Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
316test cases
1,087files differ
1,087modified
0new
0deleted
5,797changed lines
+5,680 −117insertions / deletions
Base 8f1a07a1e40658adcb92ebe10d0c17e02630037c · PR merge ac511ba36e305e329ba7960e233784e02a09fb57 · Head 95f729825f71f1ebbd34889b90c5c72fabb12511 · raw patch
Test case

test/inputs/graphql/github1.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Test case

test/inputs/graphql/github2.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
119119 if (val === null) {
120120 return null;
121121 }
122+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
123+ return invalidValue(l("Date"), val, key, parent);
122124 const d = new Date(val);
123125 if (isNaN(d.valueOf())) {
124126 return invalidValue(l("Date"), val, key, parent);
125127 }
128+ const date = typeof val === "string" ? val.slice(0, 10) : null;
129+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
130+ return invalidValue(l("Date"), val, key, parent);
126131 return d;
127132 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
119119 if (val === null) {
120120 return null;
121121 }
122+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
123+ return invalidValue(l("Date"), val, key, parent);
122124 const d = new Date(val);
123125 if (isNaN(d.valueOf())) {
124126 return invalidValue(l("Date"), val, key, parent);
125127 }
128+ const date = typeof val === "string" ? val.slice(0, 10) : null;
129+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
130+ return invalidValue(l("Date"), val, key, parent);
126131 return d;
127132 }
Test case

test/inputs/graphql/github3.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Test case

test/inputs/graphql/github4.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
128128 if (val === null) {
129129 return null;
130130 }
131+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
132+ return invalidValue(l("Date"), val, key, parent);
131133 const d = new Date(val);
132134 if (isNaN(d.valueOf())) {
133135 return invalidValue(l("Date"), val, key, parent);
134136 }
137+ const date = typeof val === "string" ? val.slice(0, 10) : null;
138+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
139+ return invalidValue(l("Date"), val, key, parent);
135140 return d;
136141 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Test case

test/inputs/graphql/github5.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Test case

test/inputs/graphql/github6.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Test case

test/inputs/graphql/github7.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Test case

test/inputs/graphql/github8.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
119119 if (val === null) {
120120 return null;
121121 }
122+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
123+ return invalidValue(l("Date"), val, key, parent);
122124 const d = new Date(val);
123125 if (isNaN(d.valueOf())) {
124126 return invalidValue(l("Date"), val, key, parent);
125127 }
128+ const date = typeof val === "string" ? val.slice(0, 10) : null;
129+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
130+ return invalidValue(l("Date"), val, key, parent);
126131 return d;
127132 }
Test case

test/inputs/graphql/github9.graphql

3 generated files · +15 −0
Mgraphql-flowdefault / TopLevel.js+5 −0
@@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
128128 if (val === null) {
129129 return null;
130130 }
131+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
132+ return invalidValue(l("Date"), val, key, parent);
131133 const d = new Date(val);
132134 if (isNaN(d.valueOf())) {
133135 return invalidValue(l("Date"), val, key, parent);
134136 }
137+ const date = typeof val === "string" ? val.slice(0, 10) : null;
138+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
139+ return invalidValue(l("Date"), val, key, parent);
135140 return d;
136141 }
Mgraphql-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
@@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
122122 if (val === null) {
123123 return null;
124124 }
125+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
126+ return invalidValue(l("Date"), val, key, parent);
125127 const d = new Date(val);
126128 if (isNaN(d.valueOf())) {
127129 return invalidValue(l("Date"), val, key, parent);
128130 }
131+ const date = typeof val === "string" ? val.slice(0, 10) : null;
132+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
133+ return invalidValue(l("Date"), val, key, parent);
129134 return d;
130135 }
Test case

test/inputs/json/misc/00c36.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
163163 if (val === null) {
164164 return null;
165165 }
166+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
167+ return invalidValue(l("Date"), val, key, parent);
166168 const d = new Date(val);
167169 if (isNaN(d.valueOf())) {
168170 return invalidValue(l("Date"), val, key, parent);
169171 }
172+ const date = typeof val === "string" ? val.slice(0, 10) : null;
173+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
174+ return invalidValue(l("Date"), val, key, parent);
170175 return d;
171176 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -162,10 +162,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
162162 if (val === null) {
163163 return null;
164164 }
165+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
166+ return invalidValue(l("Date"), val, key, parent);
165167 const d = new Date(val);
166168 if (isNaN(d.valueOf())) {
167169 return invalidValue(l("Date"), val, key, parent);
168170 }
171+ const date = typeof val === "string" ? val.slice(0, 10) : null;
172+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
173+ return invalidValue(l("Date"), val, key, parent);
169174 return d;
170175 }
Test case

test/inputs/json/misc/010b1.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/016af.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/050b0.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -152,10 +152,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
152152 if (val === null) {
153153 return null;
154154 }
155+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
156+ return invalidValue(l("Date"), val, key, parent);
155157 const d = new Date(val);
156158 if (isNaN(d.valueOf())) {
157159 return invalidValue(l("Date"), val, key, parent);
158160 }
161+ const date = typeof val === "string" ? val.slice(0, 10) : null;
162+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
163+ return invalidValue(l("Date"), val, key, parent);
159164 return d;
160165 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/json/misc/06bee.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
140140 if (val === null) {
141141 return null;
142142 }
143+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
144+ return invalidValue(l("Date"), val, key, parent);
143145 const d = new Date(val);
144146 if (isNaN(d.valueOf())) {
145147 return invalidValue(l("Date"), val, key, parent);
146148 }
149+ const date = typeof val === "string" ? val.slice(0, 10) : null;
150+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
151+ return invalidValue(l("Date"), val, key, parent);
147152 return d;
148153 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Test case

test/inputs/json/misc/07540.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/json/misc/0779f.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/07c75.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/json/misc/0a358.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -77,10 +77,10 @@ class Result {
7777
7878 factory Result.fromJson(Map<String, dynamic> json) => Result(
7979 code: json["code"],
80- createdAt: DateTime.parse(json["created_at"]),
80+ createdAt: _parseDateTime(json["created_at"]),
8181 id: json["id"],
8282 name: json["name"],
83- updatedAt: DateTime.parse(json["updated_at"]),
83+ updatedAt: _parseDateTime(json["updated_at"]),
8484 uri: json["uri"],
8585 );
8686
@@ -93,3 +93,10 @@ class Result {
9393 "uri": uri,
9494 };
9595 }
96+
97+DateTime _parseDateTime(String value) {
98+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
99+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
100+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
101+ return DateTime.parse(normalized);
102+}
Mflowdefault / TopLevel.js+5 −0
@@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
114114 if (val === null) {
115115 return null;
116116 }
117+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
118+ return invalidValue(l("Date"), val, key, parent);
117119 const d = new Date(val);
118120 if (isNaN(d.valueOf())) {
119121 return invalidValue(l("Date"), val, key, parent);
120122 }
123+ const date = typeof val === "string" ? val.slice(0, 10) : null;
124+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
125+ return invalidValue(l("Date"), val, key, parent);
121126 return d;
122127 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
111111 if (val === null) {
112112 return null;
113113 }
114+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
115+ return invalidValue(l("Date"), val, key, parent);
114116 const d = new Date(val);
115117 if (isNaN(d.valueOf())) {
116118 return invalidValue(l("Date"), val, key, parent);
117119 }
120+ const date = typeof val === "string" ? val.slice(0, 10) : null;
121+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
122+ return invalidValue(l("Date"), val, key, parent);
118123 return d;
119124 }
Test case

test/inputs/json/misc/0a91a.json

4 generated files · +30 −8
Mdartdefault / TopLevel.dart+15 −8
@@ -31,7 +31,7 @@ class TopLevel {
3131
3232 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
3333 actor: Actor.fromJson(json["actor"]),
34- createdAt: DateTime.parse(json["created_at"]),
34+ createdAt: _parseDateTime(json["created_at"]),
3535 id: json["id"],
3636 org: json["org"] == null ? null : Actor.fromJson(json["org"]),
3737 payload: Payload.fromJson(json["payload"]),
@@ -302,12 +302,12 @@ class PullRequest {
302302 base: Base.fromJson(json["base"]),
303303 body: json["body"],
304304 changedFiles: json["changed_files"],
305- closedAt: DateTime.parse(json["closed_at"]),
305+ closedAt: _parseDateTime(json["closed_at"]),
306306 comments: json["comments"],
307307 commentsUrl: json["comments_url"],
308308 commits: json["commits"],
309309 commitsUrl: json["commits_url"],
310- createdAt: DateTime.parse(json["created_at"]),
310+ createdAt: _parseDateTime(json["created_at"]),
311311 deletions: json["deletions"],
312312 diffUrl: json["diff_url"],
313313 head: Base.fromJson(json["head"]),
@@ -321,7 +321,7 @@ class PullRequest {
321321 mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')),
322322 mergeableState: json["mergeable_state"],
323323 merged: json["merged"],
324- mergedAt: DateTime.parse(json["merged_at"]),
324+ mergedAt: _parseDateTime(json["merged_at"]),
325325 mergedBy: MergedBy.fromJson(json["merged_by"]),
326326 milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')),
327327 number: json["number"],
@@ -334,7 +334,7 @@ class PullRequest {
334334 state: json["state"],
335335 statusesUrl: json["statuses_url"],
336336 title: json["title"],
337- updatedAt: DateTime.parse(json["updated_at"]),
337+ updatedAt: _parseDateTime(json["updated_at"]),
338338 url: json["url"],
339339 user: MergedBy.fromJson(json["user"]),
340340 );
@@ -571,7 +571,7 @@ class BaseRepo {
571571 compareUrl: json["compare_url"],
572572 contentsUrl: json["contents_url"],
573573 contributorsUrl: json["contributors_url"],
574- createdAt: DateTime.parse(json["created_at"]),
574+ createdAt: _parseDateTime(json["created_at"]),
575575 defaultBranch: json["default_branch"],
576576 deploymentsUrl: json["deployments_url"],
577577 description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')),
@@ -612,7 +612,7 @@ class BaseRepo {
612612 owner: MergedBy.fromJson(json["owner"]),
613613 private: json["private"],
614614 pullsUrl: json["pulls_url"],
615- pushedAt: DateTime.parse(json["pushed_at"]),
615+ pushedAt: _parseDateTime(json["pushed_at"]),
616616 releasesUrl: json["releases_url"],
617617 size: json["size"],
618618 sshUrl: json["ssh_url"],
@@ -625,7 +625,7 @@ class BaseRepo {
625625 tagsUrl: json["tags_url"],
626626 teamsUrl: json["teams_url"],
627627 treesUrl: json["trees_url"],
628- updatedAt: DateTime.parse(json["updated_at"]),
628+ updatedAt: _parseDateTime(json["updated_at"]),
629629 url: json["url"],
630630 watchers: json["watchers"],
631631 watchersCount: json["watchers_count"],
@@ -895,3 +895,10 @@ class EnumValues<T> {
895895 return reverseMap;
896896 }
897897 }
898+
899+DateTime _parseDateTime(String value) {
900+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
901+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
902+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
903+ return DateTime.parse(normalized);
904+}
Mflowdefault / TopLevel.js+5 −0
@@ -316,10 +316,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
316316 if (val === null) {
317317 return null;
318318 }
319+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
320+ return invalidValue(l("Date"), val, key, parent);
319321 const d = new Date(val);
320322 if (isNaN(d.valueOf())) {
321323 return invalidValue(l("Date"), val, key, parent);
322324 }
325+ const date = typeof val === "string" ? val.slice(0, 10) : null;
326+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
327+ return invalidValue(l("Date"), val, key, parent);
323328 return d;
324329 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -311,10 +311,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
311311 if (val === null) {
312312 return null;
313313 }
314+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
315+ return invalidValue(l("Date"), val, key, parent);
314316 const d = new Date(val);
315317 if (isNaN(d.valueOf())) {
316318 return invalidValue(l("Date"), val, key, parent);
317319 }
320+ const date = typeof val === "string" ? val.slice(0, 10) : null;
321+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
322+ return invalidValue(l("Date"), val, key, parent);
318323 return d;
319324 }
Test case

test/inputs/json/misc/0b91a.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/json/misc/0cffa.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -211,10 +211,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
211211 if (val === null) {
212212 return null;
213213 }
214+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
215+ return invalidValue(l("Date"), val, key, parent);
214216 const d = new Date(val);
215217 if (isNaN(d.valueOf())) {
216218 return invalidValue(l("Date"), val, key, parent);
217219 }
220+ const date = typeof val === "string" ? val.slice(0, 10) : null;
221+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
222+ return invalidValue(l("Date"), val, key, parent);
218223 return d;
219224 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
204204 if (val === null) {
205205 return null;
206206 }
207+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
208+ return invalidValue(l("Date"), val, key, parent);
207209 const d = new Date(val);
208210 if (isNaN(d.valueOf())) {
209211 return invalidValue(l("Date"), val, key, parent);
210212 }
213+ const date = typeof val === "string" ? val.slice(0, 10) : null;
214+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
215+ return invalidValue(l("Date"), val, key, parent);
211216 return d;
212217 }
Test case

test/inputs/json/misc/0e0c2.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -80,7 +80,7 @@ class Result {
8080 id: json["id"],
8181 images: List<Image>.from(json["images"].map((x) => Image.fromJson(x))),
8282 language: resultLanguageValues.map[json["language"]]!,
83- releaseDate: DateTime.parse(json["release_date"]),
83+ releaseDate: _parseDateTime(json["release_date"]),
8484 stars: json["stars"],
8585 tags: (json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property')) == null ? null : List<dynamic>.from((json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property'))!.map((x) => x)),
8686 title: json["title"],
@@ -325,3 +325,10 @@ class EnumValues<T> {
325325 return reverseMap;
326326 }
327327 }
328+
329+DateTime _parseDateTime(String value) {
330+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
331+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
332+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
333+ return DateTime.parse(normalized);
334+}
Mflowdefault / TopLevel.js+5 −0
@@ -173,10 +173,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
173173 if (val === null) {
174174 return null;
175175 }
176+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
177+ return invalidValue(l("Date"), val, key, parent);
176178 const d = new Date(val);
177179 if (isNaN(d.valueOf())) {
178180 return invalidValue(l("Date"), val, key, parent);
179181 }
182+ const date = typeof val === "string" ? val.slice(0, 10) : null;
183+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
184+ return invalidValue(l("Date"), val, key, parent);
180185 return d;
181186 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
167167 if (val === null) {
168168 return null;
169169 }
170+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
171+ return invalidValue(l("Date"), val, key, parent);
170172 const d = new Date(val);
171173 if (isNaN(d.valueOf())) {
172174 return invalidValue(l("Date"), val, key, parent);
173175 }
176+ const date = typeof val === "string" ? val.slice(0, 10) : null;
177+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
178+ return invalidValue(l("Date"), val, key, parent);
174179 return d;
175180 }
Test case

test/inputs/json/misc/0fecf.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/json/misc/10be4.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
163163 if (val === null) {
164164 return null;
165165 }
166+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
167+ return invalidValue(l("Date"), val, key, parent);
166168 const d = new Date(val);
167169 if (isNaN(d.valueOf())) {
168170 return invalidValue(l("Date"), val, key, parent);
169171 }
172+ const date = typeof val === "string" ? val.slice(0, 10) : null;
173+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
174+ return invalidValue(l("Date"), val, key, parent);
170175 return d;
171176 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/json/misc/112b5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/json/misc/127a1.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -210,10 +210,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
210210 if (val === null) {
211211 return null;
212212 }
213+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
214+ return invalidValue(l("Date"), val, key, parent);
213215 const d = new Date(val);
214216 if (isNaN(d.valueOf())) {
215217 return invalidValue(l("Date"), val, key, parent);
216218 }
219+ const date = typeof val === "string" ? val.slice(0, 10) : null;
220+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
221+ return invalidValue(l("Date"), val, key, parent);
217222 return d;
218223 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
204204 if (val === null) {
205205 return null;
206206 }
207+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
208+ return invalidValue(l("Date"), val, key, parent);
207209 const d = new Date(val);
208210 if (isNaN(d.valueOf())) {
209211 return invalidValue(l("Date"), val, key, parent);
210212 }
213+ const date = typeof val === "string" ? val.slice(0, 10) : null;
214+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
215+ return invalidValue(l("Date"), val, key, parent);
211216 return d;
212217 }
Test case

test/inputs/json/misc/13d8d.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
122122 if (val === null) {
123123 return null;
124124 }
125+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
126+ return invalidValue(l("Date"), val, key, parent);
125127 const d = new Date(val);
126128 if (isNaN(d.valueOf())) {
127129 return invalidValue(l("Date"), val, key, parent);
128130 }
131+ const date = typeof val === "string" ? val.slice(0, 10) : null;
132+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
133+ return invalidValue(l("Date"), val, key, parent);
129134 return d;
130135 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
122122 if (val === null) {
123123 return null;
124124 }
125+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
126+ return invalidValue(l("Date"), val, key, parent);
125127 const d = new Date(val);
126128 if (isNaN(d.valueOf())) {
127129 return invalidValue(l("Date"), val, key, parent);
128130 }
131+ const date = typeof val === "string" ? val.slice(0, 10) : null;
132+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
133+ return invalidValue(l("Date"), val, key, parent);
129134 return d;
130135 }
Test case

test/inputs/json/misc/14d38.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/16bc5.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/176f1.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Test case

test/inputs/json/misc/1a7f5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/1b28c.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/1b409.json

4 generated files · +25 −3
Mdartdefault / TopLevel.dart+10 −3
@@ -105,7 +105,7 @@ class Object {
105105 current: json["current"],
106106 description: json["description"],
107107 district: json["district"],
108- enddate: DateTime.parse(json["enddate"]),
108+ enddate: _parseDateTime(json["enddate"]),
109109 extra: Extra.fromJson(json["extra"]),
110110 id: json["id"],
111111 leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
@@ -116,7 +116,7 @@ class Object {
116116 roleTypeLabel: roleTypeLabelValues.map[json["role_type_label"]]!,
117117 senatorClass: (json.containsKey("senator_class") ? json["senator_class"] : throw FormatException('Missing required property')),
118118 senatorRank: (json.containsKey("senator_rank") ? json["senator_rank"] : throw FormatException('Missing required property')),
119- startdate: DateTime.parse(json["startdate"]),
119+ startdate: _parseDateTime(json["startdate"]),
120120 state: json["state"],
121121 title: titleValues.map[json["title"]]!,
122122 titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -233,7 +233,7 @@ class Person {
233233
234234 factory Person.fromJson(Map<String, dynamic> json) => Person(
235235 bioguideid: json["bioguideid"],
236- birthday: DateTime.parse(json["birthday"]),
236+ birthday: _parseDateTime(json["birthday"]),
237237 cspanid: json["cspanid"],
238238 firstname: json["firstname"],
239239 gender: genderValues.map[json["gender"]]!,
@@ -351,3 +351,10 @@ class EnumValues<T> {
351351 return reverseMap;
352352 }
353353 }
354+
355+DateTime _parseDateTime(String value) {
356+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
357+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
358+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
359+ return DateTime.parse(normalized);
360+}
Mflowdefault / TopLevel.js+5 −0
@@ -187,10 +187,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
187187 if (val === null) {
188188 return null;
189189 }
190+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
191+ return invalidValue(l("Date"), val, key, parent);
190192 const d = new Date(val);
191193 if (isNaN(d.valueOf())) {
192194 return invalidValue(l("Date"), val, key, parent);
193195 }
196+ const date = typeof val === "string" ? val.slice(0, 10) : null;
197+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
198+ return invalidValue(l("Date"), val, key, parent);
194199 return d;
195200 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -170,10 +170,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
170170 if (val === null) {
171171 return null;
172172 }
173+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
174+ return invalidValue(l("Date"), val, key, parent);
173175 const d = new Date(val);
174176 if (isNaN(d.valueOf())) {
175177 return invalidValue(l("Date"), val, key, parent);
176178 }
179+ const date = typeof val === "string" ? val.slice(0, 10) : null;
180+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
181+ return invalidValue(l("Date"), val, key, parent);
177182 return d;
178183 }
Test case

test/inputs/json/misc/2465e.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
169169 if (val === null) {
170170 return null;
171171 }
172+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
173+ return invalidValue(l("Date"), val, key, parent);
172174 const d = new Date(val);
173175 if (isNaN(d.valueOf())) {
174176 return invalidValue(l("Date"), val, key, parent);
175177 }
178+ const date = typeof val === "string" ? val.slice(0, 10) : null;
179+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
180+ return invalidValue(l("Date"), val, key, parent);
176181 return d;
177182 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
169169 if (val === null) {
170170 return null;
171171 }
172+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
173+ return invalidValue(l("Date"), val, key, parent);
172174 const d = new Date(val);
173175 if (isNaN(d.valueOf())) {
174176 return invalidValue(l("Date"), val, key, parent);
175177 }
178+ const date = typeof val === "string" ? val.slice(0, 10) : null;
179+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
180+ return invalidValue(l("Date"), val, key, parent);
176181 return d;
177182 }
Test case

test/inputs/json/misc/24f52.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/262f0.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -439,3 +439,10 @@ class EnumValues<T> {
439439 return reverseMap;
440440 }
441441 }
442+
443+DateTime _parseDateTime(String value) {
444+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
445+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
446+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
447+ return DateTime.parse(normalized);
448+}
Mflowdefault / TopLevel.js+5 −0
@@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
199199 if (val === null) {
200200 return null;
201201 }
202+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
203+ return invalidValue(l("Date"), val, key, parent);
202204 const d = new Date(val);
203205 if (isNaN(d.valueOf())) {
204206 return invalidValue(l("Date"), val, key, parent);
205207 }
208+ const date = typeof val === "string" ? val.slice(0, 10) : null;
209+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
210+ return invalidValue(l("Date"), val, key, parent);
206211 return d;
207212 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
196196 if (val === null) {
197197 return null;
198198 }
199+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
200+ return invalidValue(l("Date"), val, key, parent);
199201 const d = new Date(val);
200202 if (isNaN(d.valueOf())) {
201203 return invalidValue(l("Date"), val, key, parent);
202204 }
205+ const date = typeof val === "string" ? val.slice(0, 10) : null;
206+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
207+ return invalidValue(l("Date"), val, key, parent);
203208 return d;
204209 }
Test case

test/inputs/json/misc/26b49.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -208,10 +208,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
208208 if (val === null) {
209209 return null;
210210 }
211+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
212+ return invalidValue(l("Date"), val, key, parent);
211213 const d = new Date(val);
212214 if (isNaN(d.valueOf())) {
213215 return invalidValue(l("Date"), val, key, parent);
214216 }
217+ const date = typeof val === "string" ? val.slice(0, 10) : null;
218+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
219+ return invalidValue(l("Date"), val, key, parent);
215220 return d;
216221 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
203203 if (val === null) {
204204 return null;
205205 }
206+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
207+ return invalidValue(l("Date"), val, key, parent);
206208 const d = new Date(val);
207209 if (isNaN(d.valueOf())) {
208210 return invalidValue(l("Date"), val, key, parent);
209211 }
212+ const date = typeof val === "string" ? val.slice(0, 10) : null;
213+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
214+ return invalidValue(l("Date"), val, key, parent);
210215 return d;
211216 }
Test case

test/inputs/json/misc/26c9c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
283283 if (val === null) {
284284 return null;
285285 }
286+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
287+ return invalidValue(l("Date"), val, key, parent);
286288 const d = new Date(val);
287289 if (isNaN(d.valueOf())) {
288290 return invalidValue(l("Date"), val, key, parent);
289291 }
292+ const date = typeof val === "string" ? val.slice(0, 10) : null;
293+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
294+ return invalidValue(l("Date"), val, key, parent);
290295 return d;
291296 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
283283 if (val === null) {
284284 return null;
285285 }
286+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
287+ return invalidValue(l("Date"), val, key, parent);
286288 const d = new Date(val);
287289 if (isNaN(d.valueOf())) {
288290 return invalidValue(l("Date"), val, key, parent);
289291 }
292+ const date = typeof val === "string" ? val.slice(0, 10) : null;
293+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
294+ return invalidValue(l("Date"), val, key, parent);
290295 return d;
291296 }
Test case

test/inputs/json/misc/27332.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -249,10 +249,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
249249 if (val === null) {
250250 return null;
251251 }
252+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
253+ return invalidValue(l("Date"), val, key, parent);
252254 const d = new Date(val);
253255 if (isNaN(d.valueOf())) {
254256 return invalidValue(l("Date"), val, key, parent);
255257 }
258+ const date = typeof val === "string" ? val.slice(0, 10) : null;
259+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
260+ return invalidValue(l("Date"), val, key, parent);
256261 return d;
257262 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -235,10 +235,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
235235 if (val === null) {
236236 return null;
237237 }
238+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
239+ return invalidValue(l("Date"), val, key, parent);
238240 const d = new Date(val);
239241 if (isNaN(d.valueOf())) {
240242 return invalidValue(l("Date"), val, key, parent);
241243 }
244+ const date = typeof val === "string" ? val.slice(0, 10) : null;
245+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
246+ return invalidValue(l("Date"), val, key, parent);
242247 return d;
243248 }
Test case

test/inputs/json/misc/29f47.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -235,10 +235,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
235235 if (val === null) {
236236 return null;
237237 }
238+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
239+ return invalidValue(l("Date"), val, key, parent);
238240 const d = new Date(val);
239241 if (isNaN(d.valueOf())) {
240242 return invalidValue(l("Date"), val, key, parent);
241243 }
244+ const date = typeof val === "string" ? val.slice(0, 10) : null;
245+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
246+ return invalidValue(l("Date"), val, key, parent);
242247 return d;
243248 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
222222 if (val === null) {
223223 return null;
224224 }
225+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
226+ return invalidValue(l("Date"), val, key, parent);
225227 const d = new Date(val);
226228 if (isNaN(d.valueOf())) {
227229 return invalidValue(l("Date"), val, key, parent);
228230 }
231+ const date = typeof val === "string" ? val.slice(0, 10) : null;
232+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
233+ return invalidValue(l("Date"), val, key, parent);
229234 return d;
230235 }
Test case

test/inputs/json/misc/2d4e2.json

4 generated files · +25 −3
Mdartdefault / TopLevel.dart+10 −3
@@ -109,7 +109,7 @@ class Object {
109109 current: json["current"],
110110 description: json["description"],
111111 district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')),
112- enddate: DateTime.parse(json["enddate"]),
112+ enddate: _parseDateTime(json["enddate"]),
113113 extra: Extra.fromJson(json["extra"]),
114114 id: json["id"],
115115 leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
@@ -122,7 +122,7 @@ class Object {
122122 senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!,
123123 senatorRank: senatorRankValues.map[json["senator_rank"]]!,
124124 senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!,
125- startdate: DateTime.parse(json["startdate"]),
125+ startdate: _parseDateTime(json["startdate"]),
126126 state: json["state"],
127127 title: titleValues.map[json["title"]]!,
128128 titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -243,7 +243,7 @@ class Person {
243243
244244 factory Person.fromJson(Map<String, dynamic> json) => Person(
245245 bioguideid: json["bioguideid"],
246- birthday: DateTime.parse(json["birthday"]),
246+ birthday: _parseDateTime(json["birthday"]),
247247 cspanid: json["cspanid"],
248248 firstname: json["firstname"],
249249 gender: genderValues.map[json["gender"]]!,
@@ -395,3 +395,10 @@ class EnumValues<T> {
395395 return reverseMap;
396396 }
397397 }
398+
399+DateTime _parseDateTime(String value) {
400+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
401+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
402+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
403+ return DateTime.parse(normalized);
404+}
Mflowdefault / TopLevel.js+5 −0
@@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
203203 if (val === null) {
204204 return null;
205205 }
206+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
207+ return invalidValue(l("Date"), val, key, parent);
206208 const d = new Date(val);
207209 if (isNaN(d.valueOf())) {
208210 return invalidValue(l("Date"), val, key, parent);
209211 }
212+ const date = typeof val === "string" ? val.slice(0, 10) : null;
213+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
214+ return invalidValue(l("Date"), val, key, parent);
210215 return d;
211216 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -180,10 +180,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
180180 if (val === null) {
181181 return null;
182182 }
183+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
184+ return invalidValue(l("Date"), val, key, parent);
183185 const d = new Date(val);
184186 if (isNaN(d.valueOf())) {
185187 return invalidValue(l("Date"), val, key, parent);
186188 }
189+ const date = typeof val === "string" ? val.slice(0, 10) : null;
190+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
191+ return invalidValue(l("Date"), val, key, parent);
187192 return d;
188193 }
Test case

test/inputs/json/misc/2df80.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
169169 if (val === null) {
170170 return null;
171171 }
172+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
173+ return invalidValue(l("Date"), val, key, parent);
172174 const d = new Date(val);
173175 if (isNaN(d.valueOf())) {
174176 return invalidValue(l("Date"), val, key, parent);
175177 }
178+ const date = typeof val === "string" ? val.slice(0, 10) : null;
179+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
180+ return invalidValue(l("Date"), val, key, parent);
176181 return d;
177182 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Test case

test/inputs/json/misc/31189.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
123123 if (val === null) {
124124 return null;
125125 }
126+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
127+ return invalidValue(l("Date"), val, key, parent);
126128 const d = new Date(val);
127129 if (isNaN(d.valueOf())) {
128130 return invalidValue(l("Date"), val, key, parent);
129131 }
132+ const date = typeof val === "string" ? val.slice(0, 10) : null;
133+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
134+ return invalidValue(l("Date"), val, key, parent);
130135 return d;
131136 }
Test case

test/inputs/json/misc/32431.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
167167 if (val === null) {
168168 return null;
169169 }
170+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
171+ return invalidValue(l("Date"), val, key, parent);
170172 const d = new Date(val);
171173 if (isNaN(d.valueOf())) {
172174 return invalidValue(l("Date"), val, key, parent);
173175 }
176+ const date = typeof val === "string" ? val.slice(0, 10) : null;
177+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
178+ return invalidValue(l("Date"), val, key, parent);
174179 return d;
175180 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -159,10 +159,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
159159 if (val === null) {
160160 return null;
161161 }
162+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
163+ return invalidValue(l("Date"), val, key, parent);
162164 const d = new Date(val);
163165 if (isNaN(d.valueOf())) {
164166 return invalidValue(l("Date"), val, key, parent);
165167 }
168+ const date = typeof val === "string" ? val.slice(0, 10) : null;
169+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
170+ return invalidValue(l("Date"), val, key, parent);
166171 return d;
167172 }
Test case

test/inputs/json/misc/32d5c.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -30,7 +30,7 @@ class TopLevel {
3030 });
3131
3232 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
33- birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))),
33+ birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))),
3434 birthDateIsProtected: json["BirthDateIsProtected"],
3535 genderTypeId: json["GenderTypeID"],
3636 notes: json["Notes"],
@@ -51,3 +51,10 @@ class TopLevel {
5151 "PreferredName": preferredName,
5252 };
5353 }
54+
55+DateTime _parseDateTime(String value) {
56+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
57+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
58+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
59+ return DateTime.parse(normalized);
60+}
Mflowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/337ed.json

4 generated files · +28 −6
Mdartdefault / TopLevel.dart+13 −6
@@ -131,11 +131,11 @@ class Result {
131131 costAbsolute: (json.containsKey("cost_absolute") ? json["cost_absolute"] : throw FormatException('Missing required property')),
132132 costMax: (json.containsKey("cost_max") ? json["cost_max"] : throw FormatException('Missing required property')),
133133 costMin: (json.containsKey("cost_min") ? json["cost_min"] : throw FormatException('Missing required property')),
134- createdAt: DateTime.parse(json["created_at"]),
134+ createdAt: _parseDateTime(json["created_at"]),
135135 customIncomes: List<CustomIncome>.from(json["customIncomes"].map((x) => CustomIncome.fromJson(x))),
136136 directRepCostsMax: (json.containsKey("direct_rep_costs_max") ? json["direct_rep_costs_max"] : throw FormatException('Missing required property')),
137137 directRepCostsMin: (json.containsKey("direct_rep_costs_min") ? json["direct_rep_costs_min"] : throw FormatException('Missing required property')),
138- endDate: DateTime.parse(json["end_date"]),
138+ endDate: _parseDateTime(json["end_date"]),
139139 eurSourcesGrants: json["eur_sources_grants"],
140140 eurSourcesGrantsSrc: (json.containsKey("eur_sources_grants_src") ? json["eur_sources_grants_src"] : throw FormatException('Missing required property')),
141141 eurSourcesProcurement: json["eur_sources_procurement"],
@@ -151,14 +151,14 @@ class Result {
151151 publicFinancingNational: (json.containsKey("public_financing_national") ? json["public_financing_national"] : throw FormatException('Missing required property')),
152152 publicFinancingTotal: (json.containsKey("public_financing_total") ? json["public_financing_total"] : throw FormatException('Missing required property')),
153153 representative: json["representative"],
154- startDate: DateTime.parse(json["start_date"]),
154+ startDate: _parseDateTime(json["start_date"]),
155155 status: statusValues.map[json["status"]]!,
156156 totalBudget: (json.containsKey("total_budget") ? json["total_budget"] : throw FormatException('Missing required property')),
157157 turnoverAbsolute: (json.containsKey("turnover_absolute") ? json["turnover_absolute"] : throw FormatException('Missing required property')),
158158 turnoverMax: (json.containsKey("turnover_max") ? json["turnover_max"] : throw FormatException('Missing required property')),
159159 turnoverMin: (json.containsKey("turnover_min") ? json["turnover_min"] : throw FormatException('Missing required property')),
160160 type: resultTypeValues.map[json["type"]]!,
161- updatedAt: DateTime.parse(json["updated_at"]),
161+ updatedAt: _parseDateTime(json["updated_at"]),
162162 uri: json["uri"],
163163 );
164164
@@ -221,12 +221,12 @@ class CustomIncome {
221221
222222 factory CustomIncome.fromJson(Map<String, dynamic> json) => CustomIncome(
223223 amount: json["amount"],
224- createdAt: DateTime.parse(json["created_at"]),
224+ createdAt: _parseDateTime(json["created_at"]),
225225 id: json["id"],
226226 name: json["name"],
227227 status: statusValues.map[json["status"]]!,
228228 type: customIncomeTypeValues.map[json["type"]]!,
229- updatedAt: DateTime.parse(json["updated_at"]),
229+ updatedAt: _parseDateTime(json["updated_at"]),
230230 uri: json["uri"],
231231 );
232232
@@ -285,3 +285,10 @@ class EnumValues<T> {
285285 return reverseMap;
286286 }
287287 }
288+
289+DateTime _parseDateTime(String value) {
290+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
291+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
292+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
293+ return DateTime.parse(normalized);
294+}
Mflowdefault / TopLevel.js+5 −0
@@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
164164 if (val === null) {
165165 return null;
166166 }
167+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
168+ return invalidValue(l("Date"), val, key, parent);
167169 const d = new Date(val);
168170 if (isNaN(d.valueOf())) {
169171 return invalidValue(l("Date"), val, key, parent);
170172 }
173+ const date = typeof val === "string" ? val.slice(0, 10) : null;
174+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
175+ return invalidValue(l("Date"), val, key, parent);
171176 return d;
172177 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -154,10 +154,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
154154 if (val === null) {
155155 return null;
156156 }
157+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
158+ return invalidValue(l("Date"), val, key, parent);
157159 const d = new Date(val);
158160 if (isNaN(d.valueOf())) {
159161 return invalidValue(l("Date"), val, key, parent);
160162 }
163+ const date = typeof val === "string" ? val.slice(0, 10) : null;
164+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
165+ return invalidValue(l("Date"), val, key, parent);
161166 return d;
162167 }
Test case

test/inputs/json/misc/33d2e.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
149149 if (val === null) {
150150 return null;
151151 }
152+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
153+ return invalidValue(l("Date"), val, key, parent);
152154 const d = new Date(val);
153155 if (isNaN(d.valueOf())) {
154156 return invalidValue(l("Date"), val, key, parent);
155157 }
158+ const date = typeof val === "string" ? val.slice(0, 10) : null;
159+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
160+ return invalidValue(l("Date"), val, key, parent);
156161 return d;
157162 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -137,10 +137,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
137137 if (val === null) {
138138 return null;
139139 }
140+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
141+ return invalidValue(l("Date"), val, key, parent);
140142 const d = new Date(val);
141143 if (isNaN(d.valueOf())) {
142144 return invalidValue(l("Date"), val, key, parent);
143145 }
146+ const date = typeof val === "string" ? val.slice(0, 10) : null;
147+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
148+ return invalidValue(l("Date"), val, key, parent);
144149 return d;
145150 }
Test case

test/inputs/json/misc/34702.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
184184 if (val === null) {
185185 return null;
186186 }
187+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
188+ return invalidValue(l("Date"), val, key, parent);
187189 const d = new Date(val);
188190 if (isNaN(d.valueOf())) {
189191 return invalidValue(l("Date"), val, key, parent);
190192 }
193+ const date = typeof val === "string" ? val.slice(0, 10) : null;
194+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
195+ return invalidValue(l("Date"), val, key, parent);
191196 return d;
192197 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -151,10 +151,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
151151 if (val === null) {
152152 return null;
153153 }
154+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
155+ return invalidValue(l("Date"), val, key, parent);
154156 const d = new Date(val);
155157 if (isNaN(d.valueOf())) {
156158 return invalidValue(l("Date"), val, key, parent);
157159 }
160+ const date = typeof val === "string" ? val.slice(0, 10) : null;
161+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
162+ return invalidValue(l("Date"), val, key, parent);
158163 return d;
159164 }
Test case

test/inputs/json/misc/3536b.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Test case

test/inputs/json/misc/3659d.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/36d5d.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/3a6b3.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/3e9a3.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
121121 if (val === null) {
122122 return null;
123123 }
124+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
125+ return invalidValue(l("Date"), val, key, parent);
124126 const d = new Date(val);
125127 if (isNaN(d.valueOf())) {
126128 return invalidValue(l("Date"), val, key, parent);
127129 }
130+ const date = typeof val === "string" ? val.slice(0, 10) : null;
131+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
132+ return invalidValue(l("Date"), val, key, parent);
128133 return d;
129134 }
Test case

test/inputs/json/misc/3f1ce.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -435,3 +435,10 @@ class EnumValues<T> {
435435 return reverseMap;
436436 }
437437 }
438+
439+DateTime _parseDateTime(String value) {
440+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
441+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
442+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
443+ return DateTime.parse(normalized);
444+}
Mflowdefault / TopLevel.js+5 −0
@@ -197,10 +197,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
197197 if (val === null) {
198198 return null;
199199 }
200+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
201+ return invalidValue(l("Date"), val, key, parent);
200202 const d = new Date(val);
201203 if (isNaN(d.valueOf())) {
202204 return invalidValue(l("Date"), val, key, parent);
203205 }
206+ const date = typeof val === "string" ? val.slice(0, 10) : null;
207+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
208+ return invalidValue(l("Date"), val, key, parent);
204209 return d;
205210 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
196196 if (val === null) {
197197 return null;
198198 }
199+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
200+ return invalidValue(l("Date"), val, key, parent);
199201 const d = new Date(val);
200202 if (isNaN(d.valueOf())) {
201203 return invalidValue(l("Date"), val, key, parent);
202204 }
205+ const date = typeof val === "string" ? val.slice(0, 10) : null;
206+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
207+ return invalidValue(l("Date"), val, key, parent);
203208 return d;
204209 }
Test case

test/inputs/json/misc/421d4.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -210,10 +210,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
210210 if (val === null) {
211211 return null;
212212 }
213+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
214+ return invalidValue(l("Date"), val, key, parent);
213215 const d = new Date(val);
214216 if (isNaN(d.valueOf())) {
215217 return invalidValue(l("Date"), val, key, parent);
216218 }
219+ const date = typeof val === "string" ? val.slice(0, 10) : null;
220+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
221+ return invalidValue(l("Date"), val, key, parent);
217222 return d;
218223 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -207,10 +207,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
207207 if (val === null) {
208208 return null;
209209 }
210+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
211+ return invalidValue(l("Date"), val, key, parent);
210212 const d = new Date(val);
211213 if (isNaN(d.valueOf())) {
212214 return invalidValue(l("Date"), val, key, parent);
213215 }
216+ const date = typeof val === "string" ? val.slice(0, 10) : null;
217+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
218+ return invalidValue(l("Date"), val, key, parent);
214219 return d;
215220 }
Test case

test/inputs/json/misc/437e7.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -205,10 +205,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
205205 if (val === null) {
206206 return null;
207207 }
208+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
209+ return invalidValue(l("Date"), val, key, parent);
208210 const d = new Date(val);
209211 if (isNaN(d.valueOf())) {
210212 return invalidValue(l("Date"), val, key, parent);
211213 }
214+ const date = typeof val === "string" ? val.slice(0, 10) : null;
215+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
216+ return invalidValue(l("Date"), val, key, parent);
212217 return d;
213218 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -200,10 +200,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
200200 if (val === null) {
201201 return null;
202202 }
203+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
204+ return invalidValue(l("Date"), val, key, parent);
203205 const d = new Date(val);
204206 if (isNaN(d.valueOf())) {
205207 return invalidValue(l("Date"), val, key, parent);
206208 }
209+ const date = typeof val === "string" ? val.slice(0, 10) : null;
210+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
211+ return invalidValue(l("Date"), val, key, parent);
207212 return d;
208213 }
Test case

test/inputs/json/misc/43970.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/458db.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -138,10 +138,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
138138 if (val === null) {
139139 return null;
140140 }
141+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
142+ return invalidValue(l("Date"), val, key, parent);
141143 const d = new Date(val);
142144 if (isNaN(d.valueOf())) {
143145 return invalidValue(l("Date"), val, key, parent);
144146 }
147+ const date = typeof val === "string" ? val.slice(0, 10) : null;
148+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
149+ return invalidValue(l("Date"), val, key, parent);
145150 return d;
146151 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -137,10 +137,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
137137 if (val === null) {
138138 return null;
139139 }
140+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
141+ return invalidValue(l("Date"), val, key, parent);
140142 const d = new Date(val);
141143 if (isNaN(d.valueOf())) {
142144 return invalidValue(l("Date"), val, key, parent);
143145 }
146+ const date = typeof val === "string" ? val.slice(0, 10) : null;
147+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
148+ return invalidValue(l("Date"), val, key, parent);
144149 return d;
145150 }
Test case

test/inputs/json/misc/4961a.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/4a0d7.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/4a455.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -139,10 +139,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
139139 if (val === null) {
140140 return null;
141141 }
142+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
143+ return invalidValue(l("Date"), val, key, parent);
142144 const d = new Date(val);
143145 if (isNaN(d.valueOf())) {
144146 return invalidValue(l("Date"), val, key, parent);
145147 }
148+ const date = typeof val === "string" ? val.slice(0, 10) : null;
149+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
150+ return invalidValue(l("Date"), val, key, parent);
146151 return d;
147152 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/json/misc/4c547.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/4d6fb.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -244,10 +244,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
244244 if (val === null) {
245245 return null;
246246 }
247+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
248+ return invalidValue(l("Date"), val, key, parent);
247249 const d = new Date(val);
248250 if (isNaN(d.valueOf())) {
249251 return invalidValue(l("Date"), val, key, parent);
250252 }
253+ const date = typeof val === "string" ? val.slice(0, 10) : null;
254+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
255+ return invalidValue(l("Date"), val, key, parent);
251256 return d;
252257 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -234,10 +234,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
234234 if (val === null) {
235235 return null;
236236 }
237+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
238+ return invalidValue(l("Date"), val, key, parent);
237239 const d = new Date(val);
238240 if (isNaN(d.valueOf())) {
239241 return invalidValue(l("Date"), val, key, parent);
240242 }
243+ const date = typeof val === "string" ? val.slice(0, 10) : null;
244+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
245+ return invalidValue(l("Date"), val, key, parent);
241246 return d;
242247 }
Test case

test/inputs/json/misc/4e336.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/54147.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
112112 if (val === null) {
113113 return null;
114114 }
115+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
116+ return invalidValue(l("Date"), val, key, parent);
115117 const d = new Date(val);
116118 if (isNaN(d.valueOf())) {
117119 return invalidValue(l("Date"), val, key, parent);
118120 }
121+ const date = typeof val === "string" ? val.slice(0, 10) : null;
122+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
123+ return invalidValue(l("Date"), val, key, parent);
119124 return d;
120125 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/json/misc/54d32.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -76,12 +76,12 @@ class Result {
7676 });
7777
7878 factory Result.fromJson(Map<String, dynamic> json) => Result(
79- createdAt: DateTime.parse(json["created_at"]),
79+ createdAt: _parseDateTime(json["created_at"]),
8080 id: json["id"],
8181 personId: json["person_id"],
8282 representativeId: json["representative_id"],
8383 status: statusValues.map[json["status"]]!,
84- updatedAt: DateTime.parse(json["updated_at"]),
84+ updatedAt: _parseDateTime(json["updated_at"]),
8585 );
8686
8787 Map<String, dynamic> toJson() => {
@@ -115,3 +115,10 @@ class EnumValues<T> {
115115 return reverseMap;
116116 }
117117 }
118+
119+DateTime _parseDateTime(String value) {
120+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
121+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
122+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
123+ return DateTime.parse(normalized);
124+}
Mflowdefault / TopLevel.js+5 −0
@@ -118,10 +118,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
118118 if (val === null) {
119119 return null;
120120 }
121+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
122+ return invalidValue(l("Date"), val, key, parent);
121123 const d = new Date(val);
122124 if (isNaN(d.valueOf())) {
123125 return invalidValue(l("Date"), val, key, parent);
124126 }
127+ const date = typeof val === "string" ? val.slice(0, 10) : null;
128+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
129+ return invalidValue(l("Date"), val, key, parent);
125130 return d;
126131 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
113113 if (val === null) {
114114 return null;
115115 }
116+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
117+ return invalidValue(l("Date"), val, key, parent);
116118 const d = new Date(val);
117119 if (isNaN(d.valueOf())) {
118120 return invalidValue(l("Date"), val, key, parent);
119121 }
122+ const date = typeof val === "string" ? val.slice(0, 10) : null;
123+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
124+ return invalidValue(l("Date"), val, key, parent);
120125 return d;
121126 }
Test case

test/inputs/json/misc/570ec.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
128128 if (val === null) {
129129 return null;
130130 }
131+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
132+ return invalidValue(l("Date"), val, key, parent);
131133 const d = new Date(val);
132134 if (isNaN(d.valueOf())) {
133135 return invalidValue(l("Date"), val, key, parent);
134136 }
137+ const date = typeof val === "string" ? val.slice(0, 10) : null;
138+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
139+ return invalidValue(l("Date"), val, key, parent);
135140 return d;
136141 }
Test case

test/inputs/json/misc/5dd0d.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/5eae5.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -22,7 +22,7 @@ class TopLevel {
2222 });
2323
2424 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
25- date: DateTime.parse(json["Date"]),
25+ date: _parseDateTime(json["Date"]),
2626 id: json["ID"],
2727 sponsor: json["Sponsor"],
2828 title: json["Title"],
@@ -35,3 +35,10 @@ class TopLevel {
3535 "Title": title,
3636 };
3737 }
38+
39+DateTime _parseDateTime(String value) {
40+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
41+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
42+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
43+ return DateTime.parse(normalized);
44+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/5eb20.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/5f7fe.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -284,10 +284,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
284284 if (val === null) {
285285 return null;
286286 }
287+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
288+ return invalidValue(l("Date"), val, key, parent);
287289 const d = new Date(val);
288290 if (isNaN(d.valueOf())) {
289291 return invalidValue(l("Date"), val, key, parent);
290292 }
293+ const date = typeof val === "string" ? val.slice(0, 10) : null;
294+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
295+ return invalidValue(l("Date"), val, key, parent);
291296 return d;
292297 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -281,10 +281,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
281281 if (val === null) {
282282 return null;
283283 }
284+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
285+ return invalidValue(l("Date"), val, key, parent);
284286 const d = new Date(val);
285287 if (isNaN(d.valueOf())) {
286288 return invalidValue(l("Date"), val, key, parent);
287289 }
290+ const date = typeof val === "string" ? val.slice(0, 10) : null;
291+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
292+ return invalidValue(l("Date"), val, key, parent);
288293 return d;
289294 }
Test case

test/inputs/json/misc/617e8.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
283283 if (val === null) {
284284 return null;
285285 }
286+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
287+ return invalidValue(l("Date"), val, key, parent);
286288 const d = new Date(val);
287289 if (isNaN(d.valueOf())) {
288290 return invalidValue(l("Date"), val, key, parent);
289291 }
292+ const date = typeof val === "string" ? val.slice(0, 10) : null;
293+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
294+ return invalidValue(l("Date"), val, key, parent);
290295 return d;
291296 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -280,10 +280,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
280280 if (val === null) {
281281 return null;
282282 }
283+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
284+ return invalidValue(l("Date"), val, key, parent);
283285 const d = new Date(val);
284286 if (isNaN(d.valueOf())) {
285287 return invalidValue(l("Date"), val, key, parent);
286288 }
289+ const date = typeof val === "string" ? val.slice(0, 10) : null;
290+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
291+ return invalidValue(l("Date"), val, key, parent);
287292 return d;
288293 }
Test case

test/inputs/json/misc/61b66.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/65dec.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -45,7 +45,7 @@ class TopLevel {
4545 mkmId: json["mkm_id"],
4646 mkmName: json["mkm_name"],
4747 name: json["name"],
48- releaseDate: DateTime.parse(json["releaseDate"]),
48+ releaseDate: _parseDateTime(json["releaseDate"]),
4949 type: json["type"],
5050 );
5151
@@ -284,7 +284,7 @@ class Ruling {
284284 });
285285
286286 factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
287- date: DateTime.parse(json["date"]),
287+ date: _parseDateTime(json["date"]),
288288 text: json["text"],
289289 );
290290
@@ -323,3 +323,10 @@ class EnumValues<T> {
323323 return reverseMap;
324324 }
325325 }
326+
327+DateTime _parseDateTime(String value) {
328+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
329+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
330+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
331+ return DateTime.parse(normalized);
332+}
Mflowdefault / TopLevel.js+5 −0
@@ -183,10 +183,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
183183 if (val === null) {
184184 return null;
185185 }
186+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
187+ return invalidValue(l("Date"), val, key, parent);
186188 const d = new Date(val);
187189 if (isNaN(d.valueOf())) {
188190 return invalidValue(l("Date"), val, key, parent);
189191 }
192+ const date = typeof val === "string" ? val.slice(0, 10) : null;
193+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
194+ return invalidValue(l("Date"), val, key, parent);
190195 return d;
191196 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -159,10 +159,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
159159 if (val === null) {
160160 return null;
161161 }
162+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
163+ return invalidValue(l("Date"), val, key, parent);
162164 const d = new Date(val);
163165 if (isNaN(d.valueOf())) {
164166 return invalidValue(l("Date"), val, key, parent);
165167 }
168+ const date = typeof val === "string" ? val.slice(0, 10) : null;
169+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
170+ return invalidValue(l("Date"), val, key, parent);
166171 return d;
167172 }
Test case

test/inputs/json/misc/66121.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
140140 if (val === null) {
141141 return null;
142142 }
143+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
144+ return invalidValue(l("Date"), val, key, parent);
143145 const d = new Date(val);
144146 if (isNaN(d.valueOf())) {
145147 return invalidValue(l("Date"), val, key, parent);
146148 }
149+ const date = typeof val === "string" ? val.slice(0, 10) : null;
150+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
151+ return invalidValue(l("Date"), val, key, parent);
147152 return d;
148153 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
131131 if (val === null) {
132132 return null;
133133 }
134+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
135+ return invalidValue(l("Date"), val, key, parent);
134136 const d = new Date(val);
135137 if (isNaN(d.valueOf())) {
136138 return invalidValue(l("Date"), val, key, parent);
137139 }
140+ const date = typeof val === "string" ? val.slice(0, 10) : null;
141+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
142+ return invalidValue(l("Date"), val, key, parent);
138143 return d;
139144 }
Test case

test/inputs/json/misc/6617c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/json/misc/67c03.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/json/misc/68c30.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Test case

test/inputs/json/misc/6c155.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
149149 if (val === null) {
150150 return null;
151151 }
152+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
153+ return invalidValue(l("Date"), val, key, parent);
152154 const d = new Date(val);
153155 if (isNaN(d.valueOf())) {
154156 return invalidValue(l("Date"), val, key, parent);
155157 }
158+ const date = typeof val === "string" ? val.slice(0, 10) : null;
159+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
160+ return invalidValue(l("Date"), val, key, parent);
156161 return d;
157162 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
149149 if (val === null) {
150150 return null;
151151 }
152+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
153+ return invalidValue(l("Date"), val, key, parent);
152154 const d = new Date(val);
153155 if (isNaN(d.valueOf())) {
154156 return invalidValue(l("Date"), val, key, parent);
155157 }
158+ const date = typeof val === "string" ? val.slice(0, 10) : null;
159+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
160+ return invalidValue(l("Date"), val, key, parent);
156161 return d;
157162 }
Test case

test/inputs/json/misc/6de06.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -244,10 +244,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
244244 if (val === null) {
245245 return null;
246246 }
247+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
248+ return invalidValue(l("Date"), val, key, parent);
247249 const d = new Date(val);
248250 if (isNaN(d.valueOf())) {
249251 return invalidValue(l("Date"), val, key, parent);
250252 }
253+ const date = typeof val === "string" ? val.slice(0, 10) : null;
254+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
255+ return invalidValue(l("Date"), val, key, parent);
251256 return d;
252257 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -239,10 +239,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
239239 if (val === null) {
240240 return null;
241241 }
242+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
243+ return invalidValue(l("Date"), val, key, parent);
242244 const d = new Date(val);
243245 if (isNaN(d.valueOf())) {
244246 return invalidValue(l("Date"), val, key, parent);
245247 }
248+ const date = typeof val === "string" ? val.slice(0, 10) : null;
249+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
250+ return invalidValue(l("Date"), val, key, parent);
246251 return d;
247252 }
Test case

test/inputs/json/misc/6dec6.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -439,3 +439,10 @@ class EnumValues<T> {
439439 return reverseMap;
440440 }
441441 }
442+
443+DateTime _parseDateTime(String value) {
444+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
445+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
446+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
447+ return DateTime.parse(normalized);
448+}
Mflowdefault / TopLevel.js+5 −0
@@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
199199 if (val === null) {
200200 return null;
201201 }
202+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
203+ return invalidValue(l("Date"), val, key, parent);
202204 const d = new Date(val);
203205 if (isNaN(d.valueOf())) {
204206 return invalidValue(l("Date"), val, key, parent);
205207 }
208+ const date = typeof val === "string" ? val.slice(0, 10) : null;
209+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
210+ return invalidValue(l("Date"), val, key, parent);
206211 return d;
207212 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
196196 if (val === null) {
197197 return null;
198198 }
199+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
200+ return invalidValue(l("Date"), val, key, parent);
199201 const d = new Date(val);
200202 if (isNaN(d.valueOf())) {
201203 return invalidValue(l("Date"), val, key, parent);
202204 }
205+ const date = typeof val === "string" ? val.slice(0, 10) : null;
206+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
207+ return invalidValue(l("Date"), val, key, parent);
203208 return d;
204209 }
Test case

test/inputs/json/misc/6eb00.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/734ad.json

4 generated files · +26 −4
Mdartdefault / TopLevel.dart+11 −4
@@ -199,7 +199,7 @@ class Result {
199199 beOfficeTown: json["be_office_town"],
200200 codeOfConduct: json["code_of_conduct"],
201201 contactCountry: json["contact_country"],
202- createdAt: DateTime.parse(json["created_at"]),
202+ createdAt: _parseDateTime(json["created_at"]),
203203 entity: json["entity"],
204204 goals: json["goals"],
205205 head: json["head"],
@@ -214,7 +214,7 @@ class Result {
214214 id: json["id"],
215215 identificationCode: json["identification_code"],
216216 infoMembers: json["info_members"],
217- lastUpdateDate: DateTime.parse(json["last_update_date"]),
217+ lastUpdateDate: _parseDateTime(json["last_update_date"]),
218218 legal: json["legal"],
219219 legalStatus: json["legal_status"],
220220 mainCategory: json["main_category"],
@@ -230,12 +230,12 @@ class Result {
230230 networking: (json.containsKey("networking") ? json["networking"] : throw FormatException('Missing required property')),
231231 numberOfNaturalPersons: (json.containsKey("number_of_natural_persons") ? json["number_of_natural_persons"] : throw FormatException('Missing required property')),
232232 otherCodeOfConduct: (json.containsKey("other_code_of_conduct") ? json["other_code_of_conduct"] : throw FormatException('Missing required property')),
233- registrationDate: DateTime.parse(json["registration_date"]),
233+ registrationDate: _parseDateTime(json["registration_date"]),
234234 status: statusValues.map[json["status"]]!,
235235 structureMembers: json["structure_members"],
236236 subCategory: json["sub_category"],
237237 subCategoryTitle: json["sub_category_title"],
238- updatedAt: DateTime.parse(json["updated_at"]),
238+ updatedAt: _parseDateTime(json["updated_at"]),
239239 uri: json["uri"],
240240 webSiteUrl: (json.containsKey("web_site_url") ? json["web_site_url"] : throw FormatException('Missing required property')),
241241 );
@@ -323,3 +323,10 @@ class EnumValues<T> {
323323 return reverseMap;
324324 }
325325 }
326+
327+DateTime _parseDateTime(String value) {
328+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
329+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
330+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
331+ return DateTime.parse(normalized);
332+}
Mflowdefault / TopLevel.js+5 −0
@@ -170,10 +170,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
170170 if (val === null) {
171171 return null;
172172 }
173+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
174+ return invalidValue(l("Date"), val, key, parent);
173175 const d = new Date(val);
174176 if (isNaN(d.valueOf())) {
175177 return invalidValue(l("Date"), val, key, parent);
176178 }
179+ const date = typeof val === "string" ? val.slice(0, 10) : null;
180+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
181+ return invalidValue(l("Date"), val, key, parent);
177182 return d;
178183 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -165,10 +165,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
165165 if (val === null) {
166166 return null;
167167 }
168+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
169+ return invalidValue(l("Date"), val, key, parent);
168170 const d = new Date(val);
169171 if (isNaN(d.valueOf())) {
170172 return invalidValue(l("Date"), val, key, parent);
171173 }
174+ const date = typeof val === "string" ? val.slice(0, 10) : null;
175+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
176+ return invalidValue(l("Date"), val, key, parent);
172177 return d;
173178 }
Test case

test/inputs/json/misc/75912.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/7681c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
212212 if (val === null) {
213213 return null;
214214 }
215+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
216+ return invalidValue(l("Date"), val, key, parent);
215217 const d = new Date(val);
216218 if (isNaN(d.valueOf())) {
217219 return invalidValue(l("Date"), val, key, parent);
218220 }
221+ const date = typeof val === "string" ? val.slice(0, 10) : null;
222+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
223+ return invalidValue(l("Date"), val, key, parent);
219224 return d;
220225 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
204204 if (val === null) {
205205 return null;
206206 }
207+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
208+ return invalidValue(l("Date"), val, key, parent);
207209 const d = new Date(val);
208210 if (isNaN(d.valueOf())) {
209211 return invalidValue(l("Date"), val, key, parent);
210212 }
213+ const date = typeof val === "string" ? val.slice(0, 10) : null;
214+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
215+ return invalidValue(l("Date"), val, key, parent);
211216 return d;
212217 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -280,10 +280,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
280280 if (val === null) {
281281 return null;
282282 }
283+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
284+ return invalidValue(l("Date"), val, key, parent);
283285 const d = new Date(val);
284286 if (isNaN(d.valueOf())) {
285287 return invalidValue(l("Date"), val, key, parent);
286288 }
289+ const date = typeof val === "string" ? val.slice(0, 10) : null;
290+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
291+ return invalidValue(l("Date"), val, key, parent);
287292 return d;
288293 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -277,10 +277,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
277277 if (val === null) {
278278 return null;
279279 }
280+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
281+ return invalidValue(l("Date"), val, key, parent);
280282 const d = new Date(val);
281283 if (isNaN(d.valueOf())) {
282284 return invalidValue(l("Date"), val, key, parent);
283285 }
286+ const date = typeof val === "string" ? val.slice(0, 10) : null;
287+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
288+ return invalidValue(l("Date"), val, key, parent);
284289 return d;
285290 }
Test case

test/inputs/json/misc/77392.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -35,7 +35,7 @@ class TopLevel {
3535
3636 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
3737 designation: json["designation"],
38- discoveryDate: DateTime.parse(json["discovery_date"]),
38+ discoveryDate: _parseDateTime(json["discovery_date"]),
3939 hMag: json["h_mag"],
4040 iDeg: json["i_deg"],
4141 moidAu: json["moid_au"],
@@ -107,3 +107,10 @@ class EnumValues<T> {
107107 return reverseMap;
108108 }
109109 }
110+
111+DateTime _parseDateTime(String value) {
112+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
113+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
114+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
115+ return DateTime.parse(normalized);
116+}
Mflowdefault / TopLevel.js+5 −0
@@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
123123 if (val === null) {
124124 return null;
125125 }
126+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
127+ return invalidValue(l("Date"), val, key, parent);
126128 const d = new Date(val);
127129 if (isNaN(d.valueOf())) {
128130 return invalidValue(l("Date"), val, key, parent);
129131 }
132+ const date = typeof val === "string" ? val.slice(0, 10) : null;
133+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
134+ return invalidValue(l("Date"), val, key, parent);
130135 return d;
131136 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
111111 if (val === null) {
112112 return null;
113113 }
114+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
115+ return invalidValue(l("Date"), val, key, parent);
114116 const d = new Date(val);
115117 if (isNaN(d.valueOf())) {
116118 return invalidValue(l("Date"), val, key, parent);
117119 }
120+ const date = typeof val === "string" ? val.slice(0, 10) : null;
121+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
122+ return invalidValue(l("Date"), val, key, parent);
118123 return d;
119124 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -171,10 +171,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
171171 if (val === null) {
172172 return null;
173173 }
174+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
175+ return invalidValue(l("Date"), val, key, parent);
174176 const d = new Date(val);
175177 if (isNaN(d.valueOf())) {
176178 return invalidValue(l("Date"), val, key, parent);
177179 }
180+ const date = typeof val === "string" ? val.slice(0, 10) : null;
181+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
182+ return invalidValue(l("Date"), val, key, parent);
178183 return d;
179184 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
169169 if (val === null) {
170170 return null;
171171 }
172+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
173+ return invalidValue(l("Date"), val, key, parent);
172174 const d = new Date(val);
173175 if (isNaN(d.valueOf())) {
174176 return invalidValue(l("Date"), val, key, parent);
175177 }
178+ const date = typeof val === "string" ? val.slice(0, 10) : null;
179+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
180+ return invalidValue(l("Date"), val, key, parent);
176181 return d;
177182 }
Test case

test/inputs/json/misc/7d722.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/7df41.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/json/misc/7dfa6.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/7eb30.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
140140 if (val === null) {
141141 return null;
142142 }
143+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
144+ return invalidValue(l("Date"), val, key, parent);
143145 const d = new Date(val);
144146 if (isNaN(d.valueOf())) {
145147 return invalidValue(l("Date"), val, key, parent);
146148 }
149+ const date = typeof val === "string" ? val.slice(0, 10) : null;
150+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
151+ return invalidValue(l("Date"), val, key, parent);
147152 return d;
148153 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -133,10 +133,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
133133 if (val === null) {
134134 return null;
135135 }
136+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
137+ return invalidValue(l("Date"), val, key, parent);
136138 const d = new Date(val);
137139 if (isNaN(d.valueOf())) {
138140 return invalidValue(l("Date"), val, key, parent);
139141 }
142+ const date = typeof val === "string" ? val.slice(0, 10) : null;
143+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
144+ return invalidValue(l("Date"), val, key, parent);
140145 return d;
141146 }
Test case

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

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -49,7 +49,7 @@ class TopLevel {
4949 comments: json["comments"],
5050 commentsUrl: json["comments_url"],
5151 commitsUrl: json["commits_url"],
52- createdAt: DateTime.parse(json["created_at"]),
52+ createdAt: _parseDateTime(json["created_at"]),
5353 description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')),
5454 files: Map.from(json["files"]).map((k, v) => MapEntry<String, FileValue>(k, FileValue.fromJson(v))),
5555 forksUrl: json["forks_url"],
@@ -59,7 +59,7 @@ class TopLevel {
5959 id: json["id"],
6060 public: json["public"],
6161 truncated: json["truncated"],
62- updatedAt: DateTime.parse(json["updated_at"]),
62+ updatedAt: _parseDateTime(json["updated_at"]),
6363 url: json["url"],
6464 user: (json.containsKey("user") ? json["user"] : throw FormatException('Missing required property')),
6565 );
@@ -143,3 +143,10 @@ class EnumValues<T> {
143143 return reverseMap;
144144 }
145145 }
146+
147+DateTime _parseDateTime(String value) {
148+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
149+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
150+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
151+ return DateTime.parse(normalized);
152+}
Mflowdefault / TopLevel.js+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Test case

test/inputs/json/misc/7fbfb.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/80aff.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -78,12 +78,12 @@ class Result {
7878 });
7979
8080 factory Result.fromJson(Map<String, dynamic> json) => Result(
81- createdAt: DateTime.parse(json["created_at"]),
81+ createdAt: _parseDateTime(json["created_at"]),
8282 id: json["id"],
8383 items: json["items"],
8484 name: json["name"],
8585 parent: (json.containsKey("parent") ? json["parent"] : throw FormatException('Missing required property')),
86- updatedAt: DateTime.parse(json["updated_at"]),
86+ updatedAt: _parseDateTime(json["updated_at"]),
8787 uri: json["uri"],
8888 );
8989
@@ -97,3 +97,10 @@ class Result {
9797 "uri": uri,
9898 };
9999 }
100+
101+DateTime _parseDateTime(String value) {
102+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
103+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
104+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
105+ return DateTime.parse(normalized);
106+}
Mflowdefault / TopLevel.js+5 −0
@@ -115,10 +115,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
115115 if (val === null) {
116116 return null;
117117 }
118+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
119+ return invalidValue(l("Date"), val, key, parent);
118120 const d = new Date(val);
119121 if (isNaN(d.valueOf())) {
120122 return invalidValue(l("Date"), val, key, parent);
121123 }
124+ const date = typeof val === "string" ? val.slice(0, 10) : null;
125+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
126+ return invalidValue(l("Date"), val, key, parent);
122127 return d;
123128 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
112112 if (val === null) {
113113 return null;
114114 }
115+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
116+ return invalidValue(l("Date"), val, key, parent);
115117 const d = new Date(val);
116118 if (isNaN(d.valueOf())) {
117119 return invalidValue(l("Date"), val, key, parent);
118120 }
121+ const date = typeof val === "string" ? val.slice(0, 10) : null;
122+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
123+ return invalidValue(l("Date"), val, key, parent);
119124 return d;
120125 }
Test case

test/inputs/json/misc/82509.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/json/misc/8592b.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -219,10 +219,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
219219 if (val === null) {
220220 return null;
221221 }
222+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
223+ return invalidValue(l("Date"), val, key, parent);
222224 const d = new Date(val);
223225 if (isNaN(d.valueOf())) {
224226 return invalidValue(l("Date"), val, key, parent);
225227 }
228+ const date = typeof val === "string" ? val.slice(0, 10) : null;
229+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
230+ return invalidValue(l("Date"), val, key, parent);
226231 return d;
227232 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -208,10 +208,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
208208 if (val === null) {
209209 return null;
210210 }
211+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
212+ return invalidValue(l("Date"), val, key, parent);
211213 const d = new Date(val);
212214 if (isNaN(d.valueOf())) {
213215 return invalidValue(l("Date"), val, key, parent);
214216 }
217+ const date = typeof val === "string" ? val.slice(0, 10) : null;
218+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
219+ return invalidValue(l("Date"), val, key, parent);
215220 return d;
216221 }
Test case

test/inputs/json/misc/88130.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/8a62c.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/908db.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

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

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/96f7c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/9847b.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/json/misc/9929c.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/996bd.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
140140 if (val === null) {
141141 return null;
142142 }
143+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
144+ return invalidValue(l("Date"), val, key, parent);
143145 const d = new Date(val);
144146 if (isNaN(d.valueOf())) {
145147 return invalidValue(l("Date"), val, key, parent);
146148 }
149+ const date = typeof val === "string" ? val.slice(0, 10) : null;
150+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
151+ return invalidValue(l("Date"), val, key, parent);
147152 return d;
148153 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/9a503.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -126,10 +126,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
126126 if (val === null) {
127127 return null;
128128 }
129+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
130+ return invalidValue(l("Date"), val, key, parent);
129131 const d = new Date(val);
130132 if (isNaN(d.valueOf())) {
131133 return invalidValue(l("Date"), val, key, parent);
132134 }
135+ const date = typeof val === "string" ? val.slice(0, 10) : null;
136+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
137+ return invalidValue(l("Date"), val, key, parent);
133138 return d;
134139 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
123123 if (val === null) {
124124 return null;
125125 }
126+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
127+ return invalidValue(l("Date"), val, key, parent);
126128 const d = new Date(val);
127129 if (isNaN(d.valueOf())) {
128130 return invalidValue(l("Date"), val, key, parent);
129131 }
132+ const date = typeof val === "string" ? val.slice(0, 10) : null;
133+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
134+ return invalidValue(l("Date"), val, key, parent);
130135 return d;
131136 }
Test case

test/inputs/json/misc/9ac3b.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -86,7 +86,7 @@ class Result {
8686 });
8787
8888 factory Result.fromJson(Map<String, dynamic> json) => Result(
89- createdAt: DateTime.parse(json["created_at"]),
89+ createdAt: _parseDateTime(json["created_at"]),
9090 entity: json["entity"],
9191 firstName: json["first_name"],
9292 id: json["id"],
@@ -95,7 +95,7 @@ class Result {
9595 position: (json.containsKey("position") ? json["position"] : throw FormatException('Missing required property')),
9696 status: statusValues.map[json["status"]]!,
9797 title: (json.containsKey("title") ? json["title"] : throw FormatException('Missing required property')) == null ? null : titleValues.map[(json.containsKey("title") ? json["title"] : throw FormatException('Missing required property'))]!,
98- updatedAt: DateTime.parse(json["updated_at"]),
98+ updatedAt: _parseDateTime(json["updated_at"]),
9999 uri: json["uri"],
100100 );
101101
@@ -145,3 +145,10 @@ class EnumValues<T> {
145145 return reverseMap;
146146 }
147147 }
148+
149+DateTime _parseDateTime(String value) {
150+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
151+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
152+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
153+ return DateTime.parse(normalized);
154+}
Mflowdefault / TopLevel.js+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/9eed5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
123123 if (val === null) {
124124 return null;
125125 }
126+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
127+ return invalidValue(l("Date"), val, key, parent);
126128 const d = new Date(val);
127129 if (isNaN(d.valueOf())) {
128130 return invalidValue(l("Date"), val, key, parent);
129131 }
132+ const date = typeof val === "string" ? val.slice(0, 10) : null;
133+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
134+ return invalidValue(l("Date"), val, key, parent);
130135 return d;
131136 }
Test case

test/inputs/json/misc/a0496.json

4 generated files · +25 −3
Mdartdefault / TopLevel.dart+10 −3
@@ -55,15 +55,15 @@ class TopLevel {
5555 displayUrl: json["display_url"],
5656 errors: Errors.fromJson(json["errors"]),
5757 frequency: json["frequency"],
58- fromDate: DateTime.parse(json["from_date"]),
58+ fromDate: _parseDateTime(json["from_date"]),
5959 id: json["id"],
6060 name: json["name"],
6161 premium: json["premium"],
6262 sourceCode: json["source_code"],
6363 sourceName: json["source_name"],
64- toDate: DateTime.parse(json["to_date"]),
64+ toDate: _parseDateTime(json["to_date"]),
6565 type: json["type"],
66- updatedAt: DateTime.parse(json["updated_at"]),
66+ updatedAt: _parseDateTime(json["updated_at"]),
6767 urlizeName: json["urlize_name"],
6868 );
6969
@@ -97,3 +97,10 @@ class Errors {
9797 Map<String, dynamic> toJson() => {
9898 };
9999 }
100+
101+DateTime _parseDateTime(String value) {
102+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
103+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
104+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
105+ return DateTime.parse(normalized);
106+}
Mflowdefault / TopLevel.js+5 −0
@@ -117,10 +117,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
117117 if (val === null) {
118118 return null;
119119 }
120+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
121+ return invalidValue(l("Date"), val, key, parent);
120122 const d = new Date(val);
121123 if (isNaN(d.valueOf())) {
122124 return invalidValue(l("Date"), val, key, parent);
123125 }
126+ const date = typeof val === "string" ? val.slice(0, 10) : null;
127+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
128+ return invalidValue(l("Date"), val, key, parent);
124129 return d;
125130 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
114114 if (val === null) {
115115 return null;
116116 }
117+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
118+ return invalidValue(l("Date"), val, key, parent);
117119 const d = new Date(val);
118120 if (isNaN(d.valueOf())) {
119121 return invalidValue(l("Date"), val, key, parent);
120122 }
123+ const date = typeof val === "string" ? val.slice(0, 10) : null;
124+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
125+ return invalidValue(l("Date"), val, key, parent);
121126 return d;
122127 }
Test case

test/inputs/json/misc/a1eca.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/a3d8c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
212212 if (val === null) {
213213 return null;
214214 }
215+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
216+ return invalidValue(l("Date"), val, key, parent);
215217 const d = new Date(val);
216218 if (isNaN(d.valueOf())) {
217219 return invalidValue(l("Date"), val, key, parent);
218220 }
221+ const date = typeof val === "string" ? val.slice(0, 10) : null;
222+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
223+ return invalidValue(l("Date"), val, key, parent);
219224 return d;
220225 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
206206 if (val === null) {
207207 return null;
208208 }
209+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
210+ return invalidValue(l("Date"), val, key, parent);
209211 const d = new Date(val);
210212 if (isNaN(d.valueOf())) {
211213 return invalidValue(l("Date"), val, key, parent);
212214 }
215+ const date = typeof val === "string" ? val.slice(0, 10) : null;
216+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
217+ return invalidValue(l("Date"), val, key, parent);
213218 return d;
214219 }
Test case

test/inputs/json/misc/a45b0.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/a71df.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/a9691.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/ab0d1.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/abb4b.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/ac944.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/ad8be.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
163163 if (val === null) {
164164 return null;
165165 }
166+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
167+ return invalidValue(l("Date"), val, key, parent);
166168 const d = new Date(val);
167169 if (isNaN(d.valueOf())) {
168170 return invalidValue(l("Date"), val, key, parent);
169171 }
172+ const date = typeof val === "string" ? val.slice(0, 10) : null;
173+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
174+ return invalidValue(l("Date"), val, key, parent);
170175 return d;
171176 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/json/misc/ae7f0.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -193,10 +193,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
193193 if (val === null) {
194194 return null;
195195 }
196+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
197+ return invalidValue(l("Date"), val, key, parent);
196198 const d = new Date(val);
197199 if (isNaN(d.valueOf())) {
198200 return invalidValue(l("Date"), val, key, parent);
199201 }
202+ const date = typeof val === "string" ? val.slice(0, 10) : null;
203+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
204+ return invalidValue(l("Date"), val, key, parent);
200205 return d;
201206 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
184184 if (val === null) {
185185 return null;
186186 }
187+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
188+ return invalidValue(l("Date"), val, key, parent);
187189 const d = new Date(val);
188190 if (isNaN(d.valueOf())) {
189191 return invalidValue(l("Date"), val, key, parent);
190192 }
193+ const date = typeof val === "string" ? val.slice(0, 10) : null;
194+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
195+ return invalidValue(l("Date"), val, key, parent);
191196 return d;
192197 }
Test case

test/inputs/json/misc/ae9ca.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -142,10 +142,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
142142 if (val === null) {
143143 return null;
144144 }
145+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
146+ return invalidValue(l("Date"), val, key, parent);
145147 const d = new Date(val);
146148 if (isNaN(d.valueOf())) {
147149 return invalidValue(l("Date"), val, key, parent);
148150 }
151+ const date = typeof val === "string" ? val.slice(0, 10) : null;
152+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
153+ return invalidValue(l("Date"), val, key, parent);
149154 return d;
150155 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -132,10 +132,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
132132 if (val === null) {
133133 return null;
134134 }
135+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
136+ return invalidValue(l("Date"), val, key, parent);
135137 const d = new Date(val);
136138 if (isNaN(d.valueOf())) {
137139 return invalidValue(l("Date"), val, key, parent);
138140 }
141+ const date = typeof val === "string" ? val.slice(0, 10) : null;
142+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
143+ return invalidValue(l("Date"), val, key, parent);
139144 return d;
140145 }
Test case

test/inputs/json/misc/af2d1.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
204204 if (val === null) {
205205 return null;
206206 }
207+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
208+ return invalidValue(l("Date"), val, key, parent);
207209 const d = new Date(val);
208210 if (isNaN(d.valueOf())) {
209211 return invalidValue(l("Date"), val, key, parent);
210212 }
213+ const date = typeof val === "string" ? val.slice(0, 10) : null;
214+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
215+ return invalidValue(l("Date"), val, key, parent);
211216 return d;
212217 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
182182 if (val === null) {
183183 return null;
184184 }
185+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
186+ return invalidValue(l("Date"), val, key, parent);
185187 const d = new Date(val);
186188 if (isNaN(d.valueOf())) {
187189 return invalidValue(l("Date"), val, key, parent);
188190 }
191+ const date = typeof val === "string" ? val.slice(0, 10) : null;
192+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
193+ return invalidValue(l("Date"), val, key, parent);
189194 return d;
190195 }
Test case

test/inputs/json/misc/b4865.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -49,7 +49,7 @@ class TopLevel {
4949 recclass: json["recclass"],
5050 reclat: json["reclat"],
5151 reclong: json["reclong"],
52- year: json["year"] == null ? null : DateTime.parse(json["year"]),
52+ year: json["year"] == null ? null : _parseDateTime(json["year"]),
5353 );
5454
5555 Map<String, dynamic> toJson() => {
@@ -125,3 +125,10 @@ class EnumValues<T> {
125125 return reverseMap;
126126 }
127127 }
128+
129+DateTime _parseDateTime(String value) {
130+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
131+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
132+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
133+ return DateTime.parse(normalized);
134+}
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/b6f2c.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/b6fe5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/json/misc/b9f64.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/json/misc/bb1ec.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/be234.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -258,10 +258,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
258258 if (val === null) {
259259 return null;
260260 }
261+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
262+ return invalidValue(l("Date"), val, key, parent);
261263 const d = new Date(val);
262264 if (isNaN(d.valueOf())) {
263265 return invalidValue(l("Date"), val, key, parent);
264266 }
267+ const date = typeof val === "string" ? val.slice(0, 10) : null;
268+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
269+ return invalidValue(l("Date"), val, key, parent);
265270 return d;
266271 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -245,10 +245,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
245245 if (val === null) {
246246 return null;
247247 }
248+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
249+ return invalidValue(l("Date"), val, key, parent);
248250 const d = new Date(val);
249251 if (isNaN(d.valueOf())) {
250252 return invalidValue(l("Date"), val, key, parent);
251253 }
254+ const date = typeof val === "string" ? val.slice(0, 10) : null;
255+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
256+ return invalidValue(l("Date"), val, key, parent);
252257 return d;
253258 }
Test case

test/inputs/json/misc/c0356.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Test case

test/inputs/json/misc/c0a3a.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/c3303.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -209,10 +209,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
209209 if (val === null) {
210210 return null;
211211 }
212+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
213+ return invalidValue(l("Date"), val, key, parent);
212214 const d = new Date(val);
213215 if (isNaN(d.valueOf())) {
214216 return invalidValue(l("Date"), val, key, parent);
215217 }
218+ const date = typeof val === "string" ? val.slice(0, 10) : null;
219+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
220+ return invalidValue(l("Date"), val, key, parent);
216221 return d;
217222 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
203203 if (val === null) {
204204 return null;
205205 }
206+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
207+ return invalidValue(l("Date"), val, key, parent);
206208 const d = new Date(val);
207209 if (isNaN(d.valueOf())) {
208210 return invalidValue(l("Date"), val, key, parent);
209211 }
212+ const date = typeof val === "string" ? val.slice(0, 10) : null;
213+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
214+ return invalidValue(l("Date"), val, key, parent);
210215 return d;
211216 }
Test case

test/inputs/json/misc/c6cfd.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/c8c7e.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/cb0cc.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
119119 if (val === null) {
120120 return null;
121121 }
122+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
123+ return invalidValue(l("Date"), val, key, parent);
122124 const d = new Date(val);
123125 if (isNaN(d.valueOf())) {
124126 return invalidValue(l("Date"), val, key, parent);
125127 }
128+ const date = typeof val === "string" ? val.slice(0, 10) : null;
129+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
130+ return invalidValue(l("Date"), val, key, parent);
126131 return d;
127132 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
113113 if (val === null) {
114114 return null;
115115 }
116+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
117+ return invalidValue(l("Date"), val, key, parent);
116118 const d = new Date(val);
117119 if (isNaN(d.valueOf())) {
118120 return invalidValue(l("Date"), val, key, parent);
119121 }
122+ const date = typeof val === "string" ? val.slice(0, 10) : null;
123+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
124+ return invalidValue(l("Date"), val, key, parent);
120125 return d;
121126 }
Test case

test/inputs/json/misc/cb81e.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/json/misc/ccd18.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/cd238.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
129129 if (val === null) {
130130 return null;
131131 }
132+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
133+ return invalidValue(l("Date"), val, key, parent);
132134 const d = new Date(val);
133135 if (isNaN(d.valueOf())) {
134136 return invalidValue(l("Date"), val, key, parent);
135137 }
138+ const date = typeof val === "string" ? val.slice(0, 10) : null;
139+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
140+ return invalidValue(l("Date"), val, key, parent);
136141 return d;
137142 }
Test case

test/inputs/json/misc/cd463.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/cda6c.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/cf0d8.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/cfbce.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -21,7 +21,7 @@ class TopLevel {
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2323 base: json["base"],
24- date: DateTime.parse(json["date"]),
24+ date: _parseDateTime(json["date"]),
2525 rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/misc/d0908.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -34,7 +34,7 @@ class TotalPopulation {
3434 });
3535
3636 factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
37- date: DateTime.parse(json["date"]),
37+ date: _parseDateTime(json["date"]),
3838 population: json["population"],
3939 );
4040
@@ -43,3 +43,10 @@ class TotalPopulation {
4343 "population": population,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/d23d5.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -77,10 +77,10 @@ class Result {
7777
7878 factory Result.fromJson(Map<String, dynamic> json) => Result(
7979 acronym: (json.containsKey("acronym") ? json["acronym"] : throw FormatException('Missing required property')),
80- createdAt: DateTime.parse(json["created_at"]),
80+ createdAt: _parseDateTime(json["created_at"]),
8181 id: json["id"],
8282 name: json["name"],
83- updatedAt: DateTime.parse(json["updated_at"]),
83+ updatedAt: _parseDateTime(json["updated_at"]),
8484 uri: json["uri"],
8585 );
8686
@@ -93,3 +93,10 @@ class Result {
9393 "uri": uri,
9494 };
9595 }
96+
97+DateTime _parseDateTime(String value) {
98+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
99+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
100+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
101+ return DateTime.parse(normalized);
102+}
Mflowdefault / TopLevel.js+5 −0
@@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
114114 if (val === null) {
115115 return null;
116116 }
117+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
118+ return invalidValue(l("Date"), val, key, parent);
117119 const d = new Date(val);
118120 if (isNaN(d.valueOf())) {
119121 return invalidValue(l("Date"), val, key, parent);
120122 }
123+ const date = typeof val === "string" ? val.slice(0, 10) : null;
124+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
125+ return invalidValue(l("Date"), val, key, parent);
121126 return d;
122127 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
111111 if (val === null) {
112112 return null;
113113 }
114+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
115+ return invalidValue(l("Date"), val, key, parent);
114116 const d = new Date(val);
115117 if (isNaN(d.valueOf())) {
116118 return invalidValue(l("Date"), val, key, parent);
117119 }
120+ const date = typeof val === "string" ? val.slice(0, 10) : null;
121+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
122+ return invalidValue(l("Date"), val, key, parent);
118123 return d;
119124 }
Test case

test/inputs/json/misc/dbfb3.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -437,3 +437,10 @@ class EnumValues<T> {
437437 return reverseMap;
438438 }
439439 }
440+
441+DateTime _parseDateTime(String value) {
442+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
443+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
444+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
445+ return DateTime.parse(normalized);
446+}
Mflowdefault / TopLevel.js+5 −0
@@ -198,10 +198,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
198198 if (val === null) {
199199 return null;
200200 }
201+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
202+ return invalidValue(l("Date"), val, key, parent);
201203 const d = new Date(val);
202204 if (isNaN(d.valueOf())) {
203205 return invalidValue(l("Date"), val, key, parent);
204206 }
207+ const date = typeof val === "string" ? val.slice(0, 10) : null;
208+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
209+ return invalidValue(l("Date"), val, key, parent);
205210 return d;
206211 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
196196 if (val === null) {
197197 return null;
198198 }
199+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
200+ return invalidValue(l("Date"), val, key, parent);
199201 const d = new Date(val);
200202 if (isNaN(d.valueOf())) {
201203 return invalidValue(l("Date"), val, key, parent);
202204 }
205+ const date = typeof val === "string" ? val.slice(0, 10) : null;
206+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
207+ return invalidValue(l("Date"), val, key, parent);
203208 return d;
204209 }
Test case

test/inputs/json/misc/dc44f.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -45,7 +45,7 @@ class TopLevel {
4545 mkmId: json["mkm_id"],
4646 mkmName: json["mkm_name"],
4747 name: json["name"],
48- releaseDate: DateTime.parse(json["releaseDate"]),
48+ releaseDate: _parseDateTime(json["releaseDate"]),
4949 type: json["type"],
5050 );
5151
@@ -358,7 +358,7 @@ class Ruling {
358358 });
359359
360360 factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
361- date: DateTime.parse(json["date"]),
361+ date: _parseDateTime(json["date"]),
362362 text: json["text"],
363363 );
364364
@@ -405,3 +405,10 @@ class EnumValues<T> {
405405 return reverseMap;
406406 }
407407 }
408+
409+DateTime _parseDateTime(String value) {
410+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
411+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
412+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
413+ return DateTime.parse(normalized);
414+}
Mflowdefault / TopLevel.js+5 −0
@@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
222222 if (val === null) {
223223 return null;
224224 }
225+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
226+ return invalidValue(l("Date"), val, key, parent);
225227 const d = new Date(val);
226228 if (isNaN(d.valueOf())) {
227229 return invalidValue(l("Date"), val, key, parent);
228230 }
231+ const date = typeof val === "string" ? val.slice(0, 10) : null;
232+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
233+ return invalidValue(l("Date"), val, key, parent);
229234 return d;
230235 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
164164 if (val === null) {
165165 return null;
166166 }
167+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
168+ return invalidValue(l("Date"), val, key, parent);
167169 const d = new Date(val);
168170 if (isNaN(d.valueOf())) {
169171 return invalidValue(l("Date"), val, key, parent);
170172 }
173+ const date = typeof val === "string" ? val.slice(0, 10) : null;
174+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
175+ return invalidValue(l("Date"), val, key, parent);
171176 return d;
172177 }
Test case

test/inputs/json/misc/dd1ce.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -45,7 +45,7 @@ class TopLevel {
4545 mkmId: json["mkm_id"],
4646 mkmName: json["mkm_name"],
4747 name: json["name"],
48- releaseDate: DateTime.parse(json["releaseDate"]),
48+ releaseDate: _parseDateTime(json["releaseDate"]),
4949 type: json["type"],
5050 );
5151
@@ -358,7 +358,7 @@ class Ruling {
358358 });
359359
360360 factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
361- date: DateTime.parse(json["date"]),
361+ date: _parseDateTime(json["date"]),
362362 text: json["text"],
363363 );
364364
@@ -405,3 +405,10 @@ class EnumValues<T> {
405405 return reverseMap;
406406 }
407407 }
408+
409+DateTime _parseDateTime(String value) {
410+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
411+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
412+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
413+ return DateTime.parse(normalized);
414+}
Mflowdefault / TopLevel.js+5 −0
@@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
222222 if (val === null) {
223223 return null;
224224 }
225+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
226+ return invalidValue(l("Date"), val, key, parent);
225227 const d = new Date(val);
226228 if (isNaN(d.valueOf())) {
227229 return invalidValue(l("Date"), val, key, parent);
228230 }
231+ const date = typeof val === "string" ? val.slice(0, 10) : null;
232+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
233+ return invalidValue(l("Date"), val, key, parent);
229234 return d;
230235 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
164164 if (val === null) {
165165 return null;
166166 }
167+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
168+ return invalidValue(l("Date"), val, key, parent);
167169 const d = new Date(val);
168170 if (isNaN(d.valueOf())) {
169171 return invalidValue(l("Date"), val, key, parent);
170172 }
173+ const date = typeof val === "string" ? val.slice(0, 10) : null;
174+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
175+ return invalidValue(l("Date"), val, key, parent);
171176 return d;
172177 }
Test case

test/inputs/json/misc/dec3a.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -157,10 +157,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
157157 if (val === null) {
158158 return null;
159159 }
160+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
161+ return invalidValue(l("Date"), val, key, parent);
160162 const d = new Date(val);
161163 if (isNaN(d.valueOf())) {
162164 return invalidValue(l("Date"), val, key, parent);
163165 }
166+ const date = typeof val === "string" ? val.slice(0, 10) : null;
167+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
168+ return invalidValue(l("Date"), val, key, parent);
164169 return d;
165170 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -157,10 +157,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
157157 if (val === null) {
158158 return null;
159159 }
160+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
161+ return invalidValue(l("Date"), val, key, parent);
160162 const d = new Date(val);
161163 if (isNaN(d.valueOf())) {
162164 return invalidValue(l("Date"), val, key, parent);
163165 }
166+ const date = typeof val === "string" ? val.slice(0, 10) : null;
167+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
168+ return invalidValue(l("Date"), val, key, parent);
164169 return d;
165170 }
Test case

test/inputs/json/misc/df957.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -415,3 +415,10 @@ class Wind {
415415 "speed": speed,
416416 };
417417 }
418+
419+DateTime _parseDateTime(String value) {
420+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
421+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
422+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
423+ return DateTime.parse(normalized);
424+}
Mflowdefault / TopLevel.js+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
194194 if (val === null) {
195195 return null;
196196 }
197+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
198+ return invalidValue(l("Date"), val, key, parent);
197199 const d = new Date(val);
198200 if (isNaN(d.valueOf())) {
199201 return invalidValue(l("Date"), val, key, parent);
200202 }
203+ const date = typeof val === "string" ? val.slice(0, 10) : null;
204+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
205+ return invalidValue(l("Date"), val, key, parent);
201206 return d;
202207 }
Test case

test/inputs/json/misc/e0ac7.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
206206 if (val === null) {
207207 return null;
208208 }
209+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
210+ return invalidValue(l("Date"), val, key, parent);
209211 const d = new Date(val);
210212 if (isNaN(d.valueOf())) {
211213 return invalidValue(l("Date"), val, key, parent);
212214 }
215+ const date = typeof val === "string" ? val.slice(0, 10) : null;
216+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
217+ return invalidValue(l("Date"), val, key, parent);
213218 return d;
214219 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -202,10 +202,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
202202 if (val === null) {
203203 return null;
204204 }
205+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
206+ return invalidValue(l("Date"), val, key, parent);
205207 const d = new Date(val);
206208 if (isNaN(d.valueOf())) {
207209 return invalidValue(l("Date"), val, key, parent);
208210 }
211+ const date = typeof val === "string" ? val.slice(0, 10) : null;
212+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
213+ return invalidValue(l("Date"), val, key, parent);
209214 return d;
210215 }
Test case

test/inputs/json/misc/e2915.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Query {
3939
4040 factory Query.fromJson(Map<String, dynamic> json) => Query(
4141 count: json["count"],
42- created: DateTime.parse(json["created"]),
42+ created: _parseDateTime(json["created"]),
4343 lang: json["lang"],
4444 results: Results.fromJson(json["results"]),
4545 );
@@ -435,3 +435,10 @@ class EnumValues<T> {
435435 return reverseMap;
436436 }
437437 }
438+
439+DateTime _parseDateTime(String value) {
440+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
441+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
442+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
443+ return DateTime.parse(normalized);
444+}
Mflowdefault / TopLevel.js+5 −0
@@ -197,10 +197,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
197197 if (val === null) {
198198 return null;
199199 }
200+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
201+ return invalidValue(l("Date"), val, key, parent);
200202 const d = new Date(val);
201203 if (isNaN(d.valueOf())) {
202204 return invalidValue(l("Date"), val, key, parent);
203205 }
206+ const date = typeof val === "string" ? val.slice(0, 10) : null;
207+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
208+ return invalidValue(l("Date"), val, key, parent);
204209 return d;
205210 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
196196 if (val === null) {
197197 return null;
198198 }
199+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
200+ return invalidValue(l("Date"), val, key, parent);
199201 const d = new Date(val);
200202 if (isNaN(d.valueOf())) {
201203 return invalidValue(l("Date"), val, key, parent);
202204 }
205+ const date = typeof val === "string" ? val.slice(0, 10) : null;
206+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
207+ return invalidValue(l("Date"), val, key, parent);
203208 return d;
204209 }
Test case

test/inputs/json/misc/e2a58.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/json/misc/e324e.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -168,10 +168,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
168168 if (val === null) {
169169 return null;
170170 }
171+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
172+ return invalidValue(l("Date"), val, key, parent);
171173 const d = new Date(val);
172174 if (isNaN(d.valueOf())) {
173175 return invalidValue(l("Date"), val, key, parent);
174176 }
177+ const date = typeof val === "string" ? val.slice(0, 10) : null;
178+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
179+ return invalidValue(l("Date"), val, key, parent);
175180 return d;
176181 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
167167 if (val === null) {
168168 return null;
169169 }
170+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
171+ return invalidValue(l("Date"), val, key, parent);
170172 const d = new Date(val);
171173 if (isNaN(d.valueOf())) {
172174 return invalidValue(l("Date"), val, key, parent);
173175 }
176+ const date = typeof val === "string" ? val.slice(0, 10) : null;
177+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
178+ return invalidValue(l("Date"), val, key, parent);
174179 return d;
175180 }
Test case

test/inputs/json/misc/e53b5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
120120 if (val === null) {
121121 return null;
122122 }
123+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
124+ return invalidValue(l("Date"), val, key, parent);
123125 const d = new Date(val);
124126 if (isNaN(d.valueOf())) {
125127 return invalidValue(l("Date"), val, key, parent);
126128 }
129+ const date = typeof val === "string" ? val.slice(0, 10) : null;
130+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
131+ return invalidValue(l("Date"), val, key, parent);
127132 return d;
128133 }
Test case

test/inputs/json/misc/e64a0.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/json/misc/e8a0b.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/e8b04.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -366,10 +366,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
366366 if (val === null) {
367367 return null;
368368 }
369+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
370+ return invalidValue(l("Date"), val, key, parent);
369371 const d = new Date(val);
370372 if (isNaN(d.valueOf())) {
371373 return invalidValue(l("Date"), val, key, parent);
372374 }
375+ const date = typeof val === "string" ? val.slice(0, 10) : null;
376+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
377+ return invalidValue(l("Date"), val, key, parent);
373378 return d;
374379 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -327,10 +327,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
327327 if (val === null) {
328328 return null;
329329 }
330+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
331+ return invalidValue(l("Date"), val, key, parent);
330332 const d = new Date(val);
331333 if (isNaN(d.valueOf())) {
332334 return invalidValue(l("Date"), val, key, parent);
333335 }
336+ const date = typeof val === "string" ? val.slice(0, 10) : null;
337+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
338+ return invalidValue(l("Date"), val, key, parent);
334339 return d;
335340 }
Test case

test/inputs/json/misc/ed095.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/json/misc/f22f5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -190,10 +190,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
190190 if (val === null) {
191191 return null;
192192 }
193+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
194+ return invalidValue(l("Date"), val, key, parent);
193195 const d = new Date(val);
194196 if (isNaN(d.valueOf())) {
195197 return invalidValue(l("Date"), val, key, parent);
196198 }
199+ const date = typeof val === "string" ? val.slice(0, 10) : null;
200+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
201+ return invalidValue(l("Date"), val, key, parent);
197202 return d;
198203 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
182182 if (val === null) {
183183 return null;
184184 }
185+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
186+ return invalidValue(l("Date"), val, key, parent);
185187 const d = new Date(val);
186188 if (isNaN(d.valueOf())) {
187189 return invalidValue(l("Date"), val, key, parent);
188190 }
191+ const date = typeof val === "string" ? val.slice(0, 10) : null;
192+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
193+ return invalidValue(l("Date"), val, key, parent);
189194 return d;
190195 }
Test case

test/inputs/json/misc/f3139.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/json/misc/f3edf.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/f466a.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/json/misc/f6a65.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -213,10 +213,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
213213 if (val === null) {
214214 return null;
215215 }
216+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
217+ return invalidValue(l("Date"), val, key, parent);
216218 const d = new Date(val);
217219 if (isNaN(d.valueOf())) {
218220 return invalidValue(l("Date"), val, key, parent);
219221 }
222+ const date = typeof val === "string" ? val.slice(0, 10) : null;
223+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
224+ return invalidValue(l("Date"), val, key, parent);
220225 return d;
221226 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
204204 if (val === null) {
205205 return null;
206206 }
207+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
208+ return invalidValue(l("Date"), val, key, parent);
207209 const d = new Date(val);
208210 if (isNaN(d.valueOf())) {
209211 return invalidValue(l("Date"), val, key, parent);
210212 }
213+ const date = typeof val === "string" ? val.slice(0, 10) : null;
214+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
215+ return invalidValue(l("Date"), val, key, parent);
211216 return d;
212217 }
Test case

test/inputs/json/misc/f74d5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
212212 if (val === null) {
213213 return null;
214214 }
215+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
216+ return invalidValue(l("Date"), val, key, parent);
215217 const d = new Date(val);
216218 if (isNaN(d.valueOf())) {
217219 return invalidValue(l("Date"), val, key, parent);
218220 }
221+ const date = typeof val === "string" ? val.slice(0, 10) : null;
222+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
223+ return invalidValue(l("Date"), val, key, parent);
219224 return d;
220225 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
206206 if (val === null) {
207207 return null;
208208 }
209+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
210+ return invalidValue(l("Date"), val, key, parent);
209211 const d = new Date(val);
210212 if (isNaN(d.valueOf())) {
211213 return invalidValue(l("Date"), val, key, parent);
212214 }
215+ const date = typeof val === "string" ? val.slice(0, 10) : null;
216+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
217+ return invalidValue(l("Date"), val, key, parent);
213218 return d;
214219 }
Test case

test/inputs/json/misc/f82d9.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -181,10 +181,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
181181 if (val === null) {
182182 return null;
183183 }
184+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
185+ return invalidValue(l("Date"), val, key, parent);
184186 const d = new Date(val);
185187 if (isNaN(d.valueOf())) {
186188 return invalidValue(l("Date"), val, key, parent);
187189 }
190+ const date = typeof val === "string" ? val.slice(0, 10) : null;
191+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
192+ return invalidValue(l("Date"), val, key, parent);
188193 return d;
189194 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -180,10 +180,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
180180 if (val === null) {
181181 return null;
182182 }
183+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
184+ return invalidValue(l("Date"), val, key, parent);
183185 const d = new Date(val);
184186 if (isNaN(d.valueOf())) {
185187 return invalidValue(l("Date"), val, key, parent);
186188 }
189+ const date = typeof val === "string" ? val.slice(0, 10) : null;
190+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
191+ return invalidValue(l("Date"), val, key, parent);
187192 return d;
188193 }
Test case

test/inputs/json/misc/f974d.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/misc/faff5.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/misc/fcca3.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -309,10 +309,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
309309 if (val === null) {
310310 return null;
311311 }
312+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
313+ return invalidValue(l("Date"), val, key, parent);
312314 const d = new Date(val);
313315 if (isNaN(d.valueOf())) {
314316 return invalidValue(l("Date"), val, key, parent);
315317 }
318+ const date = typeof val === "string" ? val.slice(0, 10) : null;
319+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
320+ return invalidValue(l("Date"), val, key, parent);
316321 return d;
317322 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -306,10 +306,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
306306 if (val === null) {
307307 return null;
308308 }
309+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
310+ return invalidValue(l("Date"), val, key, parent);
309311 const d = new Date(val);
310312 if (isNaN(d.valueOf())) {
311313 return invalidValue(l("Date"), val, key, parent);
312314 }
315+ const date = typeof val === "string" ? val.slice(0, 10) : null;
316+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
317+ return invalidValue(l("Date"), val, key, parent);
313318 return d;
314319 }
Test case

test/inputs/json/misc/fd329.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/json/priority/blns-object.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -691,10 +691,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
691691 if (val === null) {
692692 return null;
693693 }
694+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
695+ return invalidValue(l("Date"), val, key, parent);
694696 const d = new Date(val);
695697 if (isNaN(d.valueOf())) {
696698 return invalidValue(l("Date"), val, key, parent);
697699 }
700+ const date = typeof val === "string" ? val.slice(0, 10) : null;
701+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
702+ return invalidValue(l("Date"), val, key, parent);
698703 return d;
699704 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -691,10 +691,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
691691 if (val === null) {
692692 return null;
693693 }
694+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
695+ return invalidValue(l("Date"), val, key, parent);
694696 const d = new Date(val);
695697 if (isNaN(d.valueOf())) {
696698 return invalidValue(l("Date"), val, key, parent);
697699 }
700+ const date = typeof val === "string" ? val.slice(0, 10) : null;
701+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
702+ return invalidValue(l("Date"), val, key, parent);
698703 return d;
699704 }
Test case

test/inputs/json/priority/bug2037.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/json/priority/bug2521.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/priority/bug2590.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -36,8 +36,8 @@ class Invoice {
3636 });
3737
3838 factory Invoice.fromJson(Map<String, dynamic> json) => Invoice(
39- createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))),
40- dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))),
39+ createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))),
40+ dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))),
4141 name: json["name"],
4242 );
4343
@@ -47,3 +47,10 @@ class Invoice {
4747 "name": name,
4848 };
4949 }
50+
51+DateTime _parseDateTime(String value) {
52+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
53+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
54+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
55+ return DateTime.parse(normalized);
56+}
Mflowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/json/priority/bug2663.json

4 generated files · +24 −2
Mdartdefault / TopLevel.dart+9 −2
@@ -20,8 +20,8 @@ class TopLevel {
2020 });
2121
2222 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
23- birthday: DateTime.parse(json["birthday"]),
24- lastSeen: DateTime.parse(json["lastSeen"]),
23+ birthday: _parseDateTime(json["birthday"]),
24+ lastSeen: _parseDateTime(json["lastSeen"]),
2525 name: json["name"],
2626 );
2727
@@ -31,3 +31,10 @@ class TopLevel {
3131 "name": name,
3232 };
3333 }
34+
35+DateTime _parseDateTime(String value) {
36+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
37+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
38+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
39+ return DateTime.parse(normalized);
40+}
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/priority/bug2793.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/json/priority/bug427.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -707,10 +707,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
707707 if (val === null) {
708708 return null;
709709 }
710+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
711+ return invalidValue(l("Date"), val, key, parent);
710712 const d = new Date(val);
711713 if (isNaN(d.valueOf())) {
712714 return invalidValue(l("Date"), val, key, parent);
713715 }
716+ const date = typeof val === "string" ? val.slice(0, 10) : null;
717+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
718+ return invalidValue(l("Date"), val, key, parent);
714719 return d;
715720 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -653,10 +653,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
653653 if (val === null) {
654654 return null;
655655 }
656+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
657+ return invalidValue(l("Date"), val, key, parent);
656658 const d = new Date(val);
657659 if (isNaN(d.valueOf())) {
658660 return invalidValue(l("Date"), val, key, parent);
659661 }
662+ const date = typeof val === "string" ? val.slice(0, 10) : null;
663+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
664+ return invalidValue(l("Date"), val, key, parent);
660665 return d;
661666 }
Test case

test/inputs/json/priority/bug790.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/bug863.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
182182 if (val === null) {
183183 return null;
184184 }
185+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
186+ return invalidValue(l("Date"), val, key, parent);
185187 const d = new Date(val);
186188 if (isNaN(d.valueOf())) {
187189 return invalidValue(l("Date"), val, key, parent);
188190 }
191+ const date = typeof val === "string" ? val.slice(0, 10) : null;
192+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
193+ return invalidValue(l("Date"), val, key, parent);
189194 return d;
190195 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
166166 if (val === null) {
167167 return null;
168168 }
169+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
170+ return invalidValue(l("Date"), val, key, parent);
169171 const d = new Date(val);
170172 if (isNaN(d.valueOf())) {
171173 return invalidValue(l("Date"), val, key, parent);
172174 }
175+ const date = typeof val === "string" ? val.slice(0, 10) : null;
176+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
177+ return invalidValue(l("Date"), val, key, parent);
173178 return d;
174179 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Test case

test/inputs/json/priority/combinations1.json

20 generated files · +100 −0
Mflowdefault / TopLevel.js+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mflownice-property-names-true--f4d7920ee2ce / TopLevel.js+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mflowruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
@@ -592,10 +592,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
592592 if (val === null) {
593593 return null;
594594 }
595+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
596+ return invalidValue(l("Date"), val, key, parent);
595597 const d = new Date(val);
596598 if (isNaN(d.valueOf())) {
597599 return invalidValue(l("Date"), val, key, parent);
598600 }
601+ const date = typeof val === "string" ? val.slice(0, 10) : null;
602+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
603+ return invalidValue(l("Date"), val, key, parent);
599604 return d;
600605 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptnice-property-names-true--f4d7920ee2ce / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptprefer-const-values-true--6b26e4d1265c / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Mtypescriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.ts+5 −0
@@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
488488 if (val === null) {
489489 return null;
490490 }
491+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
492+ return invalidValue(l("Date"), val, key, parent);
491493 const d = new Date(val);
492494 if (isNaN(d.valueOf())) {
493495 return invalidValue(l("Date"), val, key, parent);
494496 }
497+ const date = typeof val === "string" ? val.slice(0, 10) : null;
498+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
499+ return invalidValue(l("Date"), val, key, parent);
495500 return d;
496501 }
Test case

test/inputs/json/priority/combinations2.json

20 generated files · +100 −0
Mflowdefault / TopLevel.js+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mflownice-property-names-true--f4d7920ee2ce / TopLevel.js+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mflowruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
@@ -520,10 +520,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
520520 if (val === null) {
521521 return null;
522522 }
523+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
524+ return invalidValue(l("Date"), val, key, parent);
523525 const d = new Date(val);
524526 if (isNaN(d.valueOf())) {
525527 return invalidValue(l("Date"), val, key, parent);
526528 }
529+ const date = typeof val === "string" ? val.slice(0, 10) : null;
530+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
531+ return invalidValue(l("Date"), val, key, parent);
527532 return d;
528533 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptnice-property-names-true--f4d7920ee2ce / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptprefer-const-values-true--6b26e4d1265c / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Mtypescriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.ts+5 −0
@@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
440440 if (val === null) {
441441 return null;
442442 }
443+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
444+ return invalidValue(l("Date"), val, key, parent);
443445 const d = new Date(val);
444446 if (isNaN(d.valueOf())) {
445447 return invalidValue(l("Date"), val, key, parent);
446448 }
449+ const date = typeof val === "string" ? val.slice(0, 10) : null;
450+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
451+ return invalidValue(l("Date"), val, key, parent);
447452 return d;
448453 }
Test case

test/inputs/json/priority/combinations3.json

20 generated files · +100 −0
Mflowdefault / TopLevel.js+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mflownice-property-names-true--f4d7920ee2ce / TopLevel.js+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mflowruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
@@ -656,10 +656,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
656656 if (val === null) {
657657 return null;
658658 }
659+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
660+ return invalidValue(l("Date"), val, key, parent);
659661 const d = new Date(val);
660662 if (isNaN(d.valueOf())) {
661663 return invalidValue(l("Date"), val, key, parent);
662664 }
665+ const date = typeof val === "string" ? val.slice(0, 10) : null;
666+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
667+ return invalidValue(l("Date"), val, key, parent);
663668 return d;
664669 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptnice-property-names-true--f4d7920ee2ce / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptprefer-const-values-true--6b26e4d1265c / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Mtypescriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.ts+5 −0
@@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
544544 if (val === null) {
545545 return null;
546546 }
547+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
548+ return invalidValue(l("Date"), val, key, parent);
547549 const d = new Date(val);
548550 if (isNaN(d.valueOf())) {
549551 return invalidValue(l("Date"), val, key, parent);
550552 }
553+ const date = typeof val === "string" ? val.slice(0, 10) : null;
554+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
555+ return invalidValue(l("Date"), val, key, parent);
551556 return d;
552557 }
Test case

test/inputs/json/priority/combinations4.json

20 generated files · +100 −0
Mflowdefault / TopLevel.js+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mflownice-property-names-true--f4d7920ee2ce / TopLevel.js+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mflowruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
@@ -742,10 +742,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
742742 if (val === null) {
743743 return null;
744744 }
745+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
746+ return invalidValue(l("Date"), val, key, parent);
745747 const d = new Date(val);
746748 if (isNaN(d.valueOf())) {
747749 return invalidValue(l("Date"), val, key, parent);
748750 }
751+ const date = typeof val === "string" ? val.slice(0, 10) : null;
752+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
753+ return invalidValue(l("Date"), val, key, parent);
749754 return d;
750755 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptnice-property-names-true--f4d7920ee2ce / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptprefer-const-values-true--6b26e4d1265c / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Mtypescriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.ts+5 −0
@@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
614614 if (val === null) {
615615 return null;
616616 }
617+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
618+ return invalidValue(l("Date"), val, key, parent);
617619 const d = new Date(val);
618620 if (isNaN(d.valueOf())) {
619621 return invalidValue(l("Date"), val, key, parent);
620622 }
623+ const date = typeof val === "string" ? val.slice(0, 10) : null;
624+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
625+ return invalidValue(l("Date"), val, key, parent);
621626 return d;
622627 }
Test case

test/inputs/json/priority/combined-enum.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/json/priority/direct-recursive.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/empty-enum.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/identifiers.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
127127 if (val === null) {
128128 return null;
129129 }
130+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
131+ return invalidValue(l("Date"), val, key, parent);
130132 const d = new Date(val);
131133 if (isNaN(d.valueOf())) {
132134 return invalidValue(l("Date"), val, key, parent);
133135 }
136+ const date = typeof val === "string" ? val.slice(0, 10) : null;
137+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
138+ return invalidValue(l("Date"), val, key, parent);
134139 return d;
135140 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
124124 if (val === null) {
125125 return null;
126126 }
127+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
128+ return invalidValue(l("Date"), val, key, parent);
127129 const d = new Date(val);
128130 if (isNaN(d.valueOf())) {
129131 return invalidValue(l("Date"), val, key, parent);
130132 }
133+ const date = typeof val === "string" ? val.slice(0, 10) : null;
134+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
135+ return invalidValue(l("Date"), val, key, parent);
131136 return d;
132137 }
Test case

test/inputs/json/priority/issue2680-object-array.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/priority/issue2680-scalar-array.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/json/priority/keywords.json

5 generated files · +28 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -1688,7 +1688,7 @@ class DateTimeClass {
16881688 });
16891689
16901690 factory DateTimeClass.fromJson(Map<String, dynamic> json) => DateTimeClass(
1691- dateTime: DateTime.parse(json["DateTime"]),
1691+ dateTime: _parseDateTime(json["DateTime"]),
16921692 );
16931693
16941694 Map<String, dynamic> toJson() => {
@@ -6805,3 +6805,10 @@ class EnumValues<T> {
68056805 return reverseMap;
68066806 }
68076807 }
6808+
6809+DateTime _parseDateTime(String value) {
6810+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
6811+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
6812+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
6813+ return DateTime.parse(normalized);
6814+}
Mflowdefault / TopLevel.js+5 −0
@@ -1790,10 +1790,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
17901790 if (val === null) {
17911791 return null;
17921792 }
1793+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
1794+ return invalidValue(l("Date"), val, key, parent);
17931795 const d = new Date(val);
17941796 if (isNaN(d.valueOf())) {
17951797 return invalidValue(l("Date"), val, key, parent);
17961798 }
1799+ const date = typeof val === "string" ? val.slice(0, 10) : null;
1800+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
1801+ return invalidValue(l("Date"), val, key, parent);
17971802 return d;
17981803 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -1788,10 +1788,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
17881788 if (val === null) {
17891789 return null;
17901790 }
1791+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
1792+ return invalidValue(l("Date"), val, key, parent);
17911793 const d = new Date(val);
17921794 if (isNaN(d.valueOf())) {
17931795 return invalidValue(l("Date"), val, key, parent);
17941796 }
1797+ const date = typeof val === "string" ? val.slice(0, 10) : null;
1798+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
1799+ return invalidValue(l("Date"), val, key, parent);
17951800 return d;
17961801 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -1788,10 +1788,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
17881788 if (val === null) {
17891789 return null;
17901790 }
1791+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
1792+ return invalidValue(l("Date"), val, key, parent);
17911793 const d = new Date(val);
17921794 if (isNaN(d.valueOf())) {
17931795 return invalidValue(l("Date"), val, key, parent);
17941796 }
1797+ const date = typeof val === "string" ? val.slice(0, 10) : null;
1798+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
1799+ return invalidValue(l("Date"), val, key, parent);
17951800 return d;
17961801 }
Test case

test/inputs/json/priority/kotlin-enum-class-case-collision.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/list.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/json/priority/name-style.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -428,10 +428,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
428428 if (val === null) {
429429 return null;
430430 }
431+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
432+ return invalidValue(l("Date"), val, key, parent);
431433 const d = new Date(val);
432434 if (isNaN(d.valueOf())) {
433435 return invalidValue(l("Date"), val, key, parent);
434436 }
437+ const date = typeof val === "string" ? val.slice(0, 10) : null;
438+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
439+ return invalidValue(l("Date"), val, key, parent);
435440 return d;
436441 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -373,10 +373,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
373373 if (val === null) {
374374 return null;
375375 }
376+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
377+ return invalidValue(l("Date"), val, key, parent);
376378 const d = new Date(val);
377379 if (isNaN(d.valueOf())) {
378380 return invalidValue(l("Date"), val, key, parent);
379381 }
382+ const date = typeof val === "string" ? val.slice(0, 10) : null;
383+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
384+ return invalidValue(l("Date"), val, key, parent);
380385 return d;
381386 }
Test case

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

4 generated files · +20 −0
Mflowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mjavascriptconverters-all-objects--3a443babd1cb / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/json/priority/no-classes.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/json/priority/nst-test-suite.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -236,10 +236,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
236236 if (val === null) {
237237 return null;
238238 }
239+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
240+ return invalidValue(l("Date"), val, key, parent);
239241 const d = new Date(val);
240242 if (isNaN(d.valueOf())) {
241243 return invalidValue(l("Date"), val, key, parent);
242244 }
245+ const date = typeof val === "string" ? val.slice(0, 10) : null;
246+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
247+ return invalidValue(l("Date"), val, key, parent);
243248 return d;
244249 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -233,10 +233,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
233233 if (val === null) {
234234 return null;
235235 }
236+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
237+ return invalidValue(l("Date"), val, key, parent);
236238 const d = new Date(val);
237239 if (isNaN(d.valueOf())) {
238240 return invalidValue(l("Date"), val, key, parent);
239241 }
242+ const date = typeof val === "string" ? val.slice(0, 10) : null;
243+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
244+ return invalidValue(l("Date"), val, key, parent);
240245 return d;
241246 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/json/priority/omit-empty.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/priority/optional-union.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/php-mixed-union.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/json/priority/php-validation.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/priority/recursive.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -215,10 +215,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
215215 if (val === null) {
216216 return null;
217217 }
218+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
219+ return invalidValue(l("Date"), val, key, parent);
218220 const d = new Date(val);
219221 if (isNaN(d.valueOf())) {
220222 return invalidValue(l("Date"), val, key, parent);
221223 }
224+ const date = typeof val === "string" ? val.slice(0, 10) : null;
225+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
226+ return invalidValue(l("Date"), val, key, parent);
222227 return d;
223228 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -215,10 +215,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
215215 if (val === null) {
216216 return null;
217217 }
218+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
219+ return invalidValue(l("Date"), val, key, parent);
218220 const d = new Date(val);
219221 if (isNaN(d.valueOf())) {
220222 return invalidValue(l("Date"), val, key, parent);
221223 }
224+ const date = typeof val === "string" ? val.slice(0, 10) : null;
225+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
226+ return invalidValue(l("Date"), val, key, parent);
222227 return d;
223228 }
Test case

test/inputs/json/priority/simple-identifiers.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/json/priority/union-constructor-clash.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/json/priority/unions.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/json/priority/url.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/json/priority/uuids.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/json/samples/bitcoin-block.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/samples/copy-with-property.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/json/samples/getting-started.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/json/samples/github-events.json

4 generated files · +38 −16
Mdartdefault / TopLevel.dart+23 −16
@@ -31,7 +31,7 @@ class TopLevel {
3131
3232 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
3333 actor: Actor.fromJson(json["actor"]),
34- createdAt: DateTime.parse(json["created_at"]),
34+ createdAt: _parseDateTime(json["created_at"]),
3535 id: json["id"],
3636 org: json["org"] == null ? null : Actor.fromJson(json["org"]),
3737 payload: Payload.fromJson(json["payload"]),
@@ -187,11 +187,11 @@ class Comment {
187187
188188 factory Comment.fromJson(Map<String, dynamic> json) => Comment(
189189 body: json["body"],
190- createdAt: DateTime.parse(json["created_at"]),
190+ createdAt: _parseDateTime(json["created_at"]),
191191 htmlUrl: json["html_url"],
192192 id: json["id"],
193193 issueUrl: json["issue_url"],
194- updatedAt: DateTime.parse(json["updated_at"]),
194+ updatedAt: _parseDateTime(json["updated_at"]),
195195 url: json["url"],
196196 user: User.fromJson(json["user"]),
197197 );
@@ -403,10 +403,10 @@ class Issue {
403403 assignee: (json.containsKey("assignee") ? json["assignee"] : throw FormatException('Missing required property')),
404404 assignees: List<dynamic>.from(json["assignees"].map((x) => x)),
405405 body: json["body"],
406- closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))),
406+ closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))),
407407 comments: json["comments"],
408408 commentsUrl: json["comments_url"],
409- createdAt: DateTime.parse(json["created_at"]),
409+ createdAt: _parseDateTime(json["created_at"]),
410410 eventsUrl: json["events_url"],
411411 htmlUrl: json["html_url"],
412412 id: json["id"],
@@ -419,7 +419,7 @@ class Issue {
419419 repositoryUrl: json["repository_url"],
420420 state: json["state"],
421421 title: json["title"],
422- updatedAt: DateTime.parse(json["updated_at"]),
422+ updatedAt: _parseDateTime(json["updated_at"]),
423423 url: json["url"],
424424 user: User.fromJson(json["user"]),
425425 );
@@ -520,10 +520,10 @@ class Milestone {
520520 factory Milestone.fromJson(Map<String, dynamic> json) => Milestone(
521521 closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')),
522522 closedIssues: json["closed_issues"],
523- createdAt: DateTime.parse(json["created_at"]),
523+ createdAt: _parseDateTime(json["created_at"]),
524524 creator: User.fromJson(json["creator"]),
525525 description: json["description"],
526- dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))),
526+ dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))),
527527 htmlUrl: json["html_url"],
528528 id: json["id"],
529529 labelsUrl: json["labels_url"],
@@ -531,7 +531,7 @@ class Milestone {
531531 openIssues: json["open_issues"],
532532 state: json["state"],
533533 title: json["title"],
534- updatedAt: DateTime.parse(json["updated_at"]),
534+ updatedAt: _parseDateTime(json["updated_at"]),
535535 url: json["url"],
536536 );
537537
@@ -676,12 +676,12 @@ class PayloadPullRequest {
676676 base: Base.fromJson(json["base"]),
677677 body: json["body"],
678678 changedFiles: json["changed_files"],
679- closedAt: DateTime.parse(json["closed_at"]),
679+ closedAt: _parseDateTime(json["closed_at"]),
680680 comments: json["comments"],
681681 commentsUrl: json["comments_url"],
682682 commits: json["commits"],
683683 commitsUrl: json["commits_url"],
684- createdAt: DateTime.parse(json["created_at"]),
684+ createdAt: _parseDateTime(json["created_at"]),
685685 deletions: json["deletions"],
686686 diffUrl: json["diff_url"],
687687 head: Base.fromJson(json["head"]),
@@ -695,7 +695,7 @@ class PayloadPullRequest {
695695 mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')),
696696 mergeableState: json["mergeable_state"],
697697 merged: json["merged"],
698- mergedAt: DateTime.parse(json["merged_at"]),
698+ mergedAt: _parseDateTime(json["merged_at"]),
699699 mergedBy: User.fromJson(json["merged_by"]),
700700 milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')),
701701 number: json["number"],
@@ -708,7 +708,7 @@ class PayloadPullRequest {
708708 state: json["state"],
709709 statusesUrl: json["statuses_url"],
710710 title: json["title"],
711- updatedAt: DateTime.parse(json["updated_at"]),
711+ updatedAt: _parseDateTime(json["updated_at"]),
712712 url: json["url"],
713713 user: User.fromJson(json["user"]),
714714 );
@@ -945,7 +945,7 @@ class BaseRepo {
945945 compareUrl: json["compare_url"],
946946 contentsUrl: json["contents_url"],
947947 contributorsUrl: json["contributors_url"],
948- createdAt: DateTime.parse(json["created_at"]),
948+ createdAt: _parseDateTime(json["created_at"]),
949949 defaultBranch: json["default_branch"],
950950 deploymentsUrl: json["deployments_url"],
951951 description: json["description"],
@@ -986,7 +986,7 @@ class BaseRepo {
986986 owner: User.fromJson(json["owner"]),
987987 private: json["private"],
988988 pullsUrl: json["pulls_url"],
989- pushedAt: DateTime.parse(json["pushed_at"]),
989+ pushedAt: _parseDateTime(json["pushed_at"]),
990990 releasesUrl: json["releases_url"],
991991 size: json["size"],
992992 sshUrl: json["ssh_url"],
@@ -999,7 +999,7 @@ class BaseRepo {
999999 tagsUrl: json["tags_url"],
10001000 teamsUrl: json["teams_url"],
10011001 treesUrl: json["trees_url"],
1002- updatedAt: DateTime.parse(json["updated_at"]),
1002+ updatedAt: _parseDateTime(json["updated_at"]),
10031003 url: json["url"],
10041004 watchers: json["watchers"],
10051005 watchersCount: json["watchers_count"],
@@ -1173,3 +1173,10 @@ class EnumValues<T> {
11731173 return reverseMap;
11741174 }
11751175 }
1176+
1177+DateTime _parseDateTime(String value) {
1178+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
1179+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
1180+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
1181+ return DateTime.parse(normalized);
1182+}
Mflowdefault / TopLevel.js+5 −0
@@ -384,10 +384,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
384384 if (val === null) {
385385 return null;
386386 }
387+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
388+ return invalidValue(l("Date"), val, key, parent);
387389 const d = new Date(val);
388390 if (isNaN(d.valueOf())) {
389391 return invalidValue(l("Date"), val, key, parent);
390392 }
393+ const date = typeof val === "string" ? val.slice(0, 10) : null;
394+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
395+ return invalidValue(l("Date"), val, key, parent);
391396 return d;
392397 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -382,10 +382,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
382382 if (val === null) {
383383 return null;
384384 }
385+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
386+ return invalidValue(l("Date"), val, key, parent);
385387 const d = new Date(val);
386388 if (isNaN(d.valueOf())) {
387389 return invalidValue(l("Date"), val, key, parent);
388390 }
391+ const date = typeof val === "string" ? val.slice(0, 10) : null;
392+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
393+ return invalidValue(l("Date"), val, key, parent);
389394 return d;
390395 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
128128 if (val === null) {
129129 return null;
130130 }
131+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
132+ return invalidValue(l("Date"), val, key, parent);
131133 const d = new Date(val);
132134 if (isNaN(d.valueOf())) {
133135 return invalidValue(l("Date"), val, key, parent);
134136 }
137+ const date = typeof val === "string" ? val.slice(0, 10) : null;
138+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
139+ return invalidValue(l("Date"), val, key, parent);
135140 return d;
136141 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
128128 if (val === null) {
129129 return null;
130130 }
131+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
132+ return invalidValue(l("Date"), val, key, parent);
131133 const d = new Date(val);
132134 if (isNaN(d.valueOf())) {
133135 return invalidValue(l("Date"), val, key, parent);
134136 }
137+ const date = typeof val === "string" ? val.slice(0, 10) : null;
138+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
139+ return invalidValue(l("Date"), val, key, parent);
135140 return d;
136141 }
Test case

test/inputs/json/samples/null-safe.json

4 generated files · +23 −1
Mdartdefault / TopLevel.dart+8 −1
@@ -39,7 +39,7 @@ class Item {
3939
4040 factory Item.fromJson(Map<String, dynamic> json) => Item(
4141 address: json["address"] == null ? null : Address.fromJson(json["address"]),
42- createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]),
42+ createdAt: json["created_at"] == null ? null : _parseDateTime(json["created_at"]),
4343 name: json["name"],
4444 sex: (json.containsKey("sex") ? json["sex"] : throw FormatException('Missing required property')),
4545 );
@@ -75,3 +75,10 @@ class Address {
7575 "street": street,
7676 };
7777 }
78+
79+DateTime _parseDateTime(String value) {
80+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
81+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
82+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
83+ return DateTime.parse(normalized);
84+}
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/json/samples/objc-control-characters.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/json/samples/pokedex.json

4 generated files · +20 −0
Mflowdefault / TopLevel.js+5 −0
@@ -148,10 +148,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
148148 if (val === null) {
149149 return null;
150150 }
151+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
152+ return invalidValue(l("Date"), val, key, parent);
151153 const d = new Date(val);
152154 if (isNaN(d.valueOf())) {
153155 return invalidValue(l("Date"), val, key, parent);
154156 }
157+ const date = typeof val === "string" ? val.slice(0, 10) : null;
158+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
159+ return invalidValue(l("Date"), val, key, parent);
155160 return d;
156161 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Test case

test/inputs/json/samples/reddit.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -237,10 +237,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
237237 if (val === null) {
238238 return null;
239239 }
240+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
241+ return invalidValue(l("Date"), val, key, parent);
240242 const d = new Date(val);
241243 if (isNaN(d.valueOf())) {
242244 return invalidValue(l("Date"), val, key, parent);
243245 }
246+ const date = typeof val === "string" ? val.slice(0, 10) : null;
247+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
248+ return invalidValue(l("Date"), val, key, parent);
244249 return d;
245250 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
222222 if (val === null) {
223223 return null;
224224 }
225+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
226+ return invalidValue(l("Date"), val, key, parent);
225227 const d = new Date(val);
226228 if (isNaN(d.valueOf())) {
227229 return invalidValue(l("Date"), val, key, parent);
228230 }
231+ const date = typeof val === "string" ? val.slice(0, 10) : null;
232+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
233+ return invalidValue(l("Date"), val, key, parent);
229234 return d;
230235 }
Test case

test/inputs/json/samples/simple-object.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/json/samples/spotify-album.json

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
166166 if (val === null) {
167167 return null;
168168 }
169+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
170+ return invalidValue(l("Date"), val, key, parent);
169171 const d = new Date(val);
170172 if (isNaN(d.valueOf())) {
171173 return invalidValue(l("Date"), val, key, parent);
172174 }
175+ const date = typeof val === "string" ? val.slice(0, 10) : null;
176+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
177+ return invalidValue(l("Date"), val, key, parent);
173178 return d;
174179 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
166166 if (val === null) {
167167 return null;
168168 }
169+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
170+ return invalidValue(l("Date"), val, key, parent);
169171 const d = new Date(val);
170172 if (isNaN(d.valueOf())) {
171173 return invalidValue(l("Date"), val, key, parent);
172174 }
175+ const date = typeof val === "string" ? val.slice(0, 10) : null;
176+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
177+ return invalidValue(l("Date"), val, key, parent);
173178 return d;
174179 }
Test case

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

3 generated files · +15 −0
Mflowdefault / TopLevel.js+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/json/samples/us-senators.json

4 generated files · +25 −3
Mdartdefault / TopLevel.dart+10 −3
@@ -107,7 +107,7 @@ class Object {
107107 current: json["current"],
108108 description: json["description"],
109109 district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')),
110- enddate: DateTime.parse(json["enddate"]),
110+ enddate: _parseDateTime(json["enddate"]),
111111 extra: Extra.fromJson(json["extra"]),
112112 leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
113113 party: partyValues.map[json["party"]]!,
@@ -119,7 +119,7 @@ class Object {
119119 senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!,
120120 senatorRank: senatorRankValues.map[json["senator_rank"]]!,
121121 senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!,
122- startdate: DateTime.parse(json["startdate"]),
122+ startdate: _parseDateTime(json["startdate"]),
123123 state: json["state"],
124124 title: titleValues.map[json["title"]]!,
125125 titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -237,7 +237,7 @@ class Person {
237237
238238 factory Person.fromJson(Map<String, dynamic> json) => Person(
239239 bioguideid: json["bioguideid"],
240- birthday: DateTime.parse(json["birthday"]),
240+ birthday: _parseDateTime(json["birthday"]),
241241 cspanid: json["cspanid"],
242242 firstname: json["firstname"],
243243 gender: genderValues.map[json["gender"]]!,
@@ -387,3 +387,10 @@ class EnumValues<T> {
387387 return reverseMap;
388388 }
389389 }
390+
391+DateTime _parseDateTime(String value) {
392+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
393+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
394+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
395+ return DateTime.parse(normalized);
396+}
Mflowdefault / TopLevel.js+5 −0
@@ -201,10 +201,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
201201 if (val === null) {
202202 return null;
203203 }
204+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
205+ return invalidValue(l("Date"), val, key, parent);
204206 const d = new Date(val);
205207 if (isNaN(d.valueOf())) {
206208 return invalidValue(l("Date"), val, key, parent);
207209 }
210+ const date = typeof val === "string" ? val.slice(0, 10) : null;
211+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
212+ return invalidValue(l("Date"), val, key, parent);
208213 return d;
209214 }
Mjavascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mtypescriptdefault / TopLevel.ts+5 −0
@@ -178,10 +178,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
178178 if (val === null) {
179179 return null;
180180 }
181+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
182+ return invalidValue(l("Date"), val, key, parent);
181183 const d = new Date(val);
182184 if (isNaN(d.valueOf())) {
183185 return invalidValue(l("Date"), val, key, parent);
184186 }
187+ const date = typeof val === "string" ? val.slice(0, 10) : null;
188+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
189+ return invalidValue(l("Date"), val, key, parent);
185190 return d;
186191 }
Test case

test/inputs/schema/accessors.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/all-of-additional-properties-false.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/any.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/schema/bool-string.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/schema/boolean-subschema.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/camelCase.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

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

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
113113 if (val === null) {
114114 return null;
115115 }
116+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
117+ return invalidValue(l("Date"), val, key, parent);
116118 const d = new Date(val);
117119 if (isNaN(d.valueOf())) {
118120 return invalidValue(l("Date"), val, key, parent);
119121 }
122+ const date = typeof val === "string" ? val.slice(0, 10) : null;
123+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
124+ return invalidValue(l("Date"), val, key, parent);
120125 return d;
121126 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
113113 if (val === null) {
114114 return null;
115115 }
116+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
117+ return invalidValue(l("Date"), val, key, parent);
116118 const d = new Date(val);
117119 if (isNaN(d.valueOf())) {
118120 return invalidValue(l("Date"), val, key, parent);
119121 }
122+ const date = typeof val === "string" ? val.slice(0, 10) : null;
123+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
124+ return invalidValue(l("Date"), val, key, parent);
120125 return d;
121126 }
Test case

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

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/schema/comment-injection-enum-nested-comment.schema

4 generated files · +20 −0
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Mschema-flowdefault / TopLevel.js+5 −0
@@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
111111 if (val === null) {
112112 return null;
113113 }
114+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
115+ return invalidValue(l("Date"), val, key, parent);
114116 const d = new Date(val);
115117 if (isNaN(d.valueOf())) {
116118 return invalidValue(l("Date"), val, key, parent);
117119 }
120+ const date = typeof val === "string" ? val.slice(0, 10) : null;
121+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
122+ return invalidValue(l("Date"), val, key, parent);
118123 return d;
119124 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Test case

test/inputs/schema/comment-injection-enum.schema

4 generated files · +20 −0
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
@@ -116,10 +116,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
116116 if (val === null) {
117117 return null;
118118 }
119+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
120+ return invalidValue(l("Date"), val, key, parent);
119121 const d = new Date(val);
120122 if (isNaN(d.valueOf())) {
121123 return invalidValue(l("Date"), val, key, parent);
122124 }
125+ const date = typeof val === "string" ? val.slice(0, 10) : null;
126+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
127+ return invalidValue(l("Date"), val, key, parent);
123128 return d;
124129 }
Mschema-flowdefault / TopLevel.js+5 −0
@@ -117,10 +117,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
117117 if (val === null) {
118118 return null;
119119 }
120+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
121+ return invalidValue(l("Date"), val, key, parent);
120122 const d = new Date(val);
121123 if (isNaN(d.valueOf())) {
122124 return invalidValue(l("Date"), val, key, parent);
123125 }
126+ const date = typeof val === "string" ? val.slice(0, 10) : null;
127+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
128+ return invalidValue(l("Date"), val, key, parent);
124129 return d;
125130 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -116,10 +116,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
116116 if (val === null) {
117117 return null;
118118 }
119+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
120+ return invalidValue(l("Date"), val, key, parent);
119121 const d = new Date(val);
120122 if (isNaN(d.valueOf())) {
121123 return invalidValue(l("Date"), val, key, parent);
122124 }
125+ const date = typeof val === "string" ? val.slice(0, 10) : null;
126+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
127+ return invalidValue(l("Date"), val, key, parent);
123128 return d;
124129 }
Test case

test/inputs/schema/comment-injection-nested-comment.schema

4 generated files · +20 −0
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Mschema-flowdefault / TopLevel.js+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
108108 if (val === null) {
109109 return null;
110110 }
111+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
112+ return invalidValue(l("Date"), val, key, parent);
111113 const d = new Date(val);
112114 if (isNaN(d.valueOf())) {
113115 return invalidValue(l("Date"), val, key, parent);
114116 }
117+ const date = typeof val === "string" ? val.slice(0, 10) : null;
118+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
119+ return invalidValue(l("Date"), val, key, parent);
115120 return d;
116121 }
Test case

test/inputs/schema/comment-injection.schema

4 generated files · +20 −0
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Mschema-flowdefault / TopLevel.js+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
136136 if (val === null) {
137137 return null;
138138 }
139+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
140+ return invalidValue(l("Date"), val, key, parent);
139141 const d = new Date(val);
140142 if (isNaN(d.valueOf())) {
141143 return invalidValue(l("Date"), val, key, parent);
142144 }
145+ const date = typeof val === "string" ? val.slice(0, 10) : null;
146+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
147+ return invalidValue(l("Date"), val, key, parent);
143148 return d;
144149 }
Test case

test/inputs/schema/const-non-string.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/constructor.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/cut-enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/date-time-or-string.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/schema/date-time.schema

4 generated files · +24 −2
Mschema-dartdefault / TopLevel.dart+9 −2
@@ -25,8 +25,8 @@ class TopLevel {
2525
2626 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
2727 complexUnionArray: List<dynamic>.from(json["complex-union-array"].map((x) => x)),
28- date: DateTime.parse(json["date"]),
29- dateTime: DateTime.parse(json["date-time"]),
28+ date: _parseDateTime(json["date"]),
29+ dateTime: _parseDateTime(json["date-time"]),
3030 time: json["time"],
3131 unionArray: List<String>.from(json["union-array"].map((x) => x)),
3232 );
@@ -61,3 +61,10 @@ class EnumValues<T> {
6161 return reverseMap;
6262 }
6363 }
64+
65+DateTime _parseDateTime(String value) {
66+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
67+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
68+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
69+ return DateTime.parse(normalized);
70+}
Mschema-flowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/default-value.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/description-with-double-quotes.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/description.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -135,10 +135,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
135135 if (val === null) {
136136 return null;
137137 }
138+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
139+ return invalidValue(l("Date"), val, key, parent);
138140 const d = new Date(val);
139141 if (isNaN(d.valueOf())) {
140142 return invalidValue(l("Date"), val, key, parent);
141143 }
144+ const date = typeof val === "string" ? val.slice(0, 10) : null;
145+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
146+ return invalidValue(l("Date"), val, key, parent);
142147 return d;
143148 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -133,10 +133,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
133133 if (val === null) {
134134 return null;
135135 }
136+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
137+ return invalidValue(l("Date"), val, key, parent);
136138 const d = new Date(val);
137139 if (isNaN(d.valueOf())) {
138140 return invalidValue(l("Date"), val, key, parent);
139141 }
142+ const date = typeof val === "string" ? val.slice(0, 10) : null;
143+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
144+ return invalidValue(l("Date"), val, key, parent);
140145 return d;
141146 }
Test case

test/inputs/schema/direct-union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/empty-object.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/schema/enum-large.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
125125 if (val === null) {
126126 return null;
127127 }
128+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
129+ return invalidValue(l("Date"), val, key, parent);
128130 const d = new Date(val);
129131 if (isNaN(d.valueOf())) {
130132 return invalidValue(l("Date"), val, key, parent);
131133 }
134+ const date = typeof val === "string" ? val.slice(0, 10) : null;
135+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
136+ return invalidValue(l("Date"), val, key, parent);
132137 return d;
133138 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/schema/enum-with-null.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/schema/enum-with-values.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -118,10 +118,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
118118 if (val === null) {
119119 return null;
120120 }
121+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
122+ return invalidValue(l("Date"), val, key, parent);
121123 const d = new Date(val);
122124 if (isNaN(d.valueOf())) {
123125 return invalidValue(l("Date"), val, key, parent);
124126 }
127+ const date = typeof val === "string" ? val.slice(0, 10) : null;
128+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
129+ return invalidValue(l("Date"), val, key, parent);
125130 return d;
126131 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
109109 if (val === null) {
110110 return null;
111111 }
112+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
113+ return invalidValue(l("Date"), val, key, parent);
112114 const d = new Date(val);
113115 if (isNaN(d.valueOf())) {
114116 return invalidValue(l("Date"), val, key, parent);
115117 }
118+ const date = typeof val === "string" ? val.slice(0, 10) : null;
119+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
120+ return invalidValue(l("Date"), val, key, parent);
116121 return d;
117122 }
Test case

test/inputs/schema/fractional-bounds.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

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

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/haskell-enum-forbidden.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/id-no-address.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/id-root.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/ie-suffix-singularization.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/implicit-all-of.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/implicit-class-array-union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/implicit-one-of.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/integer-before-number.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/integer-float-union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/integer-string.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/schema/integer-type.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
105105 if (val === null) {
106106 return null;
107107 }
108+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
109+ return invalidValue(l("Date"), val, key, parent);
108110 const d = new Date(val);
109111 if (isNaN(d.valueOf())) {
110112 return invalidValue(l("Date"), val, key, parent);
111113 }
114+ const date = typeof val === "string" ? val.slice(0, 10) : null;
115+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
116+ return invalidValue(l("Date"), val, key, parent);
112117 return d;
113118 }
Test case

test/inputs/schema/intersection-nested.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/schema/intersection.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/schema/issue2680-top-level-array.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/schema/keyword-enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -432,10 +432,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
432432 if (val === null) {
433433 return null;
434434 }
435+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
436+ return invalidValue(l("Date"), val, key, parent);
435437 const d = new Date(val);
436438 if (isNaN(d.valueOf())) {
437439 return invalidValue(l("Date"), val, key, parent);
438440 }
441+ const date = typeof val === "string" ? val.slice(0, 10) : null;
442+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
443+ return invalidValue(l("Date"), val, key, parent);
439444 return d;
440445 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/keyword-unions.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -2089,10 +2089,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
20892089 if (val === null) {
20902090 return null;
20912091 }
2092+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
2093+ return invalidValue(l("Date"), val, key, parent);
20922094 const d = new Date(val);
20932095 if (isNaN(d.valueOf())) {
20942096 return invalidValue(l("Date"), val, key, parent);
20952097 }
2098+ const date = typeof val === "string" ? val.slice(0, 10) : null;
2099+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
2100+ return invalidValue(l("Date"), val, key, parent);
20962101 return d;
20972102 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -1093,10 +1093,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
10931093 if (val === null) {
10941094 return null;
10951095 }
1096+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
1097+ return invalidValue(l("Date"), val, key, parent);
10961098 const d = new Date(val);
10971099 if (isNaN(d.valueOf())) {
10981100 return invalidValue(l("Date"), val, key, parent);
10991101 }
1102+ const date = typeof val === "string" ? val.slice(0, 10) : null;
1103+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
1104+ return invalidValue(l("Date"), val, key, parent);
11001105 return d;
11011106 }
Test case

test/inputs/schema/light.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/schema/list.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/min-max-items.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
103103 if (val === null) {
104104 return null;
105105 }
106+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
107+ return invalidValue(l("Date"), val, key, parent);
106108 const d = new Date(val);
107109 if (isNaN(d.valueOf())) {
108110 return invalidValue(l("Date"), val, key, parent);
109111 }
112+ const date = typeof val === "string" ? val.slice(0, 10) : null;
113+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
114+ return invalidValue(l("Date"), val, key, parent);
110115 return d;
111116 }
Test case

test/inputs/schema/minmax-integer.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/minmax.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/minmaxlength.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/schema/multi-type-enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/schema/mutually-recursive.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/nested-intersection-union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/non-standard-ref.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/nullable-optional-one-of.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/object-type-required.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/optional-any.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/optional-const-ref.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Test case

test/inputs/schema/optional-constraints.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/schema/optional-date-time.schema

4 generated files · +26 −4
Mschema-dartdefault / TopLevel.dart+11 −4
@@ -26,11 +26,11 @@ class TopLevel {
2626 });
2727
2828 factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
29- optionalDate: json["optional-date"] == null ? null : DateTime.parse(json["optional-date"]),
30- optionalDateTime: json["optional-date-time"] == null ? null : DateTime.parse(json["optional-date-time"]),
29+ optionalDate: json["optional-date"] == null ? null : _parseDateTime(json["optional-date"]),
30+ optionalDateTime: json["optional-date-time"] == null ? null : _parseDateTime(json["optional-date-time"]),
3131 optionalTime: json["optional-time"],
32- requiredDate: DateTime.parse(json["required-date"]),
33- requiredDateTime: DateTime.parse(json["required-date-time"]),
32+ requiredDate: _parseDateTime(json["required-date"]),
33+ requiredDateTime: _parseDateTime(json["required-date-time"]),
3434 requiredTime: json["required-time"],
3535 );
3636
@@ -43,3 +43,10 @@ class TopLevel {
4343 "required-time": requiredTime,
4444 };
4545 }
46+
47+DateTime _parseDateTime(String value) {
48+ final normalized = value.toUpperCase(), parts = value.substring(0, 10).split('-').map(int.parse).toList();
49+ final date = DateTime.utc(parts[0], parts[1], parts[2]).toIso8601String().substring(0, 10);
50+ if (date != normalized.substring(0, 10)) throw FormatException('Invalid date-time', value);
51+ return DateTime.parse(normalized);
52+}
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/schema/optional-enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/optional-property.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9696 if (val === null) {
9797 return null;
9898 }
99+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
100+ return invalidValue(l("Date"), val, key, parent);
99101 const d = new Date(val);
100102 if (isNaN(d.valueOf())) {
101103 return invalidValue(l("Date"), val, key, parent);
102104 }
105+ const date = typeof val === "string" ? val.slice(0, 10) : null;
106+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
107+ return invalidValue(l("Date"), val, key, parent);
103108 return d;
104109 }
Test case

test/inputs/schema/pattern.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
104104 if (val === null) {
105105 return null;
106106 }
107+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
108+ return invalidValue(l("Date"), val, key, parent);
107109 const d = new Date(val);
108110 if (isNaN(d.valueOf())) {
109111 return invalidValue(l("Date"), val, key, parent);
110112 }
113+ const date = typeof val === "string" ? val.slice(0, 10) : null;
114+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
115+ return invalidValue(l("Date"), val, key, parent);
111116 return d;
112117 }
Test case

test/inputs/schema/postman-collection.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Test case

test/inputs/schema/prefix-items.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

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

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
110110 if (val === null) {
111111 return null;
112112 }
113+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
114+ return invalidValue(l("Date"), val, key, parent);
113115 const d = new Date(val);
114116 if (isNaN(d.valueOf())) {
115117 return invalidValue(l("Date"), val, key, parent);
116118 }
119+ const date = typeof val === "string" ? val.slice(0, 10) : null;
120+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
121+ return invalidValue(l("Date"), val, key, parent);
117122 return d;
118123 }
Test case

test/inputs/schema/ref-id-files.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/ref-remote.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/renaming-bug.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
199199 if (val === null) {
200200 return null;
201201 }
202+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
203+ return invalidValue(l("Date"), val, key, parent);
202204 const d = new Date(val);
203205 if (isNaN(d.valueOf())) {
204206 return invalidValue(l("Date"), val, key, parent);
205207 }
208+ const date = typeof val === "string" ? val.slice(0, 10) : null;
209+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
210+ return invalidValue(l("Date"), val, key, parent);
206211 return d;
207212 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
184184 if (val === null) {
185185 return null;
186186 }
187+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
188+ return invalidValue(l("Date"), val, key, parent);
187189 const d = new Date(val);
188190 if (isNaN(d.valueOf())) {
189191 return invalidValue(l("Date"), val, key, parent);
190192 }
193+ const date = typeof val === "string" ? val.slice(0, 10) : null;
194+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
195+ return invalidValue(l("Date"), val, key, parent);
191196 return d;
192197 }
Test case

test/inputs/schema/required-draft3.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/required-non-properties.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/schema/required.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/rust-cycle-breaker-union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/schema/schema-constraints.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9898 if (val === null) {
9999 return null;
100100 }
101+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
102+ return invalidValue(l("Date"), val, key, parent);
101103 const d = new Date(val);
102104 if (isNaN(d.valueOf())) {
103105 return invalidValue(l("Date"), val, key, parent);
104106 }
107+ const date = typeof val === "string" ? val.slice(0, 10) : null;
108+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
109+ return invalidValue(l("Date"), val, key, parent);
105110 return d;
106111 }
Test case

test/inputs/schema/simple-ref.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/strict-optional.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/top-level-array.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
100100 if (val === null) {
101101 return null;
102102 }
103+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
104+ return invalidValue(l("Date"), val, key, parent);
103105 const d = new Date(val);
104106 if (isNaN(d.valueOf())) {
105107 return invalidValue(l("Date"), val, key, parent);
106108 }
109+ const date = typeof val === "string" ? val.slice(0, 10) : null;
110+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
111+ return invalidValue(l("Date"), val, key, parent);
107112 return d;
108113 }
Test case

test/inputs/schema/top-level-enum.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/schema/top-level-primitive-array.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9494 if (val === null) {
9595 return null;
9696 }
97+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
98+ return invalidValue(l("Date"), val, key, parent);
9799 const d = new Date(val);
98100 if (isNaN(d.valueOf())) {
99101 return invalidValue(l("Date"), val, key, parent);
100102 }
103+ const date = typeof val === "string" ? val.slice(0, 10) : null;
104+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
105+ return invalidValue(l("Date"), val, key, parent);
101106 return d;
102107 }
Test case

test/inputs/schema/top-level-primitive.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9797 if (val === null) {
9898 return null;
9999 }
100+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
101+ return invalidValue(l("Date"), val, key, parent);
100102 const d = new Date(val);
101103 if (isNaN(d.valueOf())) {
102104 return invalidValue(l("Date"), val, key, parent);
103105 }
106+ const date = typeof val === "string" ? val.slice(0, 10) : null;
107+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
108+ return invalidValue(l("Date"), val, key, parent);
104109 return d;
105110 }
Test case

test/inputs/schema/tuple.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/unevaluated-properties.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -115,10 +115,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
115115 if (val === null) {
116116 return null;
117117 }
118+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
119+ return invalidValue(l("Date"), val, key, parent);
118120 const d = new Date(val);
119121 if (isNaN(d.valueOf())) {
120122 return invalidValue(l("Date"), val, key, parent);
121123 }
124+ const date = typeof val === "string" ? val.slice(0, 10) : null;
125+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
126+ return invalidValue(l("Date"), val, key, parent);
122127 return d;
123128 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
112112 if (val === null) {
113113 return null;
114114 }
115+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
116+ return invalidValue(l("Date"), val, key, parent);
115117 const d = new Date(val);
116118 if (isNaN(d.valueOf())) {
117119 return invalidValue(l("Date"), val, key, parent);
118120 }
121+ const date = typeof val === "string" ? val.slice(0, 10) : null;
122+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
123+ return invalidValue(l("Date"), val, key, parent);
119124 return d;
120125 }
Test case

test/inputs/schema/unicode-codepoint-length.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/union-int-double.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
9999 if (val === null) {
100100 return null;
101101 }
102+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
103+ return invalidValue(l("Date"), val, key, parent);
102104 const d = new Date(val);
103105 if (isNaN(d.valueOf())) {
104106 return invalidValue(l("Date"), val, key, parent);
105107 }
108+ const date = typeof val === "string" ? val.slice(0, 10) : null;
109+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
110+ return invalidValue(l("Date"), val, key, parent);
106111 return d;
107112 }
Test case

test/inputs/schema/union-list.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
102102 if (val === null) {
103103 return null;
104104 }
105+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
106+ return invalidValue(l("Date"), val, key, parent);
105107 const d = new Date(val);
106108 if (isNaN(d.valueOf())) {
107109 return invalidValue(l("Date"), val, key, parent);
108110 }
111+ const date = typeof val === "string" ? val.slice(0, 10) : null;
112+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
113+ return invalidValue(l("Date"), val, key, parent);
109114 return d;
110115 }
Test case

test/inputs/schema/union.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
101101 if (val === null) {
102102 return null;
103103 }
104+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
105+ return invalidValue(l("Date"), val, key, parent);
104106 const d = new Date(val);
105107 if (isNaN(d.valueOf())) {
106108 return invalidValue(l("Date"), val, key, parent);
107109 }
110+ const date = typeof val === "string" ? val.slice(0, 10) : null;
111+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
112+ return invalidValue(l("Date"), val, key, parent);
108113 return d;
109114 }
Test case

test/inputs/schema/uuid.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
107107 if (val === null) {
108108 return null;
109109 }
110+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
111+ return invalidValue(l("Date"), val, key, parent);
110112 const d = new Date(val);
111113 if (isNaN(d.valueOf())) {
112114 return invalidValue(l("Date"), val, key, parent);
113115 }
116+ const date = typeof val === "string" ? val.slice(0, 10) : null;
117+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
118+ return invalidValue(l("Date"), val, key, parent);
114119 return d;
115120 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
106106 if (val === null) {
107107 return null;
108108 }
109+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
110+ return invalidValue(l("Date"), val, key, parent);
109111 const d = new Date(val);
110112 if (isNaN(d.valueOf())) {
111113 return invalidValue(l("Date"), val, key, parent);
112114 }
115+ const date = typeof val === "string" ? val.slice(0, 10) : null;
116+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
117+ return invalidValue(l("Date"), val, key, parent);
113118 return d;
114119 }
Test case

test/inputs/schema/vega-lite.schema

3 generated files · +15 −0
Mschema-flowdefault / TopLevel.js+5 −0
@@ -6188,10 +6188,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
61886188 if (val === null) {
61896189 return null;
61906190 }
6191+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
6192+ return invalidValue(l("Date"), val, key, parent);
61916193 const d = new Date(val);
61926194 if (isNaN(d.valueOf())) {
61936195 return invalidValue(l("Date"), val, key, parent);
61946196 }
6197+ const date = typeof val === "string" ? val.slice(0, 10) : null;
6198+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
6199+ return invalidValue(l("Date"), val, key, parent);
61956200 return d;
61966201 }
Mschema-javascriptdefault / TopLevel.js+5 −0
@@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') {
9090 if (val === null) {
9191 return null;
9292 }
93+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
94+ return invalidValue(l("Date"), val, key, parent);
9395 const d = new Date(val);
9496 if (isNaN(d.valueOf())) {
9597 return invalidValue(l("Date"), val, key, parent);
9698 }
99+ const date = typeof val === "string" ? val.slice(0, 10) : null;
100+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
101+ return invalidValue(l("Date"), val, key, parent);
97102 return d;
98103 }
Mschema-typescriptdefault / TopLevel.ts+5 −0
@@ -5945,10 +5945,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
59455945 if (val === null) {
59465946 return null;
59475947 }
5948+ if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val)))
5949+ return invalidValue(l("Date"), val, key, parent);
59485950 const d = new Date(val);
59495951 if (isNaN(d.valueOf())) {
59505952 return invalidValue(l("Date"), val, key, parent);
59515953 }
5954+ const date = typeof val === "string" ? val.slice(0, 10) : null;
5955+ if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date)
5956+ return invalidValue(l("Date"), val, key, parent);
59525957 return d;
59535958 }
No generated files match these filters.