Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
316test cases
1,090files differ
1,090modified
0new
0deleted
5,361changed lines
+5,238 −123insertions / deletions
Base a8cf6b324181a897679219aeb920eff38eb73da2 · PR merge 8fc470acac4c8d44fb7b18cf97614ac1506eda0d · Head 345ba7cf85dc473f4d4e42694725e928c87d809d · 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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -20,10 +20,10 @@ _Facets = PropTypes.shape({
2020 });
2121 _Result = PropTypes.shape({
2222 "code": PropTypes.oneOfType([PropTypes.string]).isRequired,
23- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
23+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2424 "id": PropTypes.oneOfType([Integer]).isRequired,
2525 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
26- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
26+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2727 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
2828 });
2929 _TopLevel = PropTypes.shape({
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 · +23 −8
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 }
Mjavascript-prop-typesdefault / toplevel.js+8 −8
@@ -89,7 +89,7 @@ _BaseRepo = PropTypes.shape({
8989 "compare_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
9090 "contents_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
9191 "contributors_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
92- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
92+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
9393 "default_branch": PropTypes.oneOfType([PropTypes.string]).isRequired,
9494 "deployments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
9595 "description": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
@@ -130,7 +130,7 @@ _BaseRepo = PropTypes.shape({
130130 "owner": _MergedBy,
131131 "private": PropTypes.oneOfType([PropTypes.bool]).isRequired,
132132 "pulls_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
133- "pushed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
133+ "pushed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
134134 "releases_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
135135 "size": PropTypes.oneOfType([Integer]).isRequired,
136136 "ssh_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -143,7 +143,7 @@ _BaseRepo = PropTypes.shape({
143143 "tags_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
144144 "teams_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
145145 "trees_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
146- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
146+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
147147 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
148148 "watchers": PropTypes.oneOfType([Integer]).isRequired,
149149 "watchers_count": PropTypes.oneOfType([Integer]).isRequired,
@@ -163,12 +163,12 @@ _PullRequest = PropTypes.shape({
163163 "base": _Base,
164164 "body": PropTypes.oneOfType([PropTypes.string]).isRequired,
165165 "changed_files": PropTypes.oneOfType([Integer]).isRequired,
166- "closed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
166+ "closed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
167167 "comments": PropTypes.oneOfType([Integer]).isRequired,
168168 "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
169169 "commits": PropTypes.oneOfType([Integer]).isRequired,
170170 "commits_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
171- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
171+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
172172 "deletions": PropTypes.oneOfType([Integer]).isRequired,
173173 "diff_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
174174 "head": _Base,
@@ -181,7 +181,7 @@ _PullRequest = PropTypes.shape({
181181 "mergeable": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
182182 "mergeable_state": PropTypes.oneOfType([PropTypes.string]).isRequired,
183183 "merged": PropTypes.oneOfType([PropTypes.bool]).isRequired,
184- "merged_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
184+ "merged_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
185185 "merged_by": _MergedBy,
186186 "milestone": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
187187 "number": PropTypes.oneOfType([Integer]).isRequired,
@@ -194,7 +194,7 @@ _PullRequest = PropTypes.shape({
194194 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
195195 "statuses_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
196196 "title": PropTypes.oneOfType([PropTypes.string]).isRequired,
197- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
197+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
198198 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
199199 "user": _MergedBy,
200200 });
@@ -221,7 +221,7 @@ _TopLevelRepo = PropTypes.shape({
221221 });
222222 _TopLevel = PropTypes.shape({
223223 "actor": _Actor,
224- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
224+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
225225 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
226226 "org": PropTypes.oneOfType([_Actor, PropTypes.oneOf([null])]),
227227 "payload": _Payload,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -71,7 +71,7 @@ _Result = PropTypes.shape({
7171 "id": PropTypes.oneOfType([Integer]).isRequired,
7272 "images": PropTypes.oneOfType([PropTypes.arrayOf(_Image)]).isRequired,
7373 "language": _ResultLanguage,
74- "release_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
74+ "release_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7575 "stars": PropTypes.oneOfType([Integer]).isRequired,
7676 "tags": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.oneOf([null])])])(props, name, ...args),
7777 "title": PropTypes.oneOfType([PropTypes.string]).isRequired,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +18 −3
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 }
Mjavascript-prop-typesdefault / toplevel.js+3 −3
@@ -39,7 +39,7 @@ _Extra = PropTypes.shape({
3939 });
4040 _Person = PropTypes.shape({
4141 "bioguideid": PropTypes.oneOfType([PropTypes.string]).isRequired,
42- "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
42+ "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4343 "cspanid": PropTypes.oneOfType([Integer]).isRequired,
4444 "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired,
4545 "gender": _Gender,
@@ -63,7 +63,7 @@ _Object = PropTypes.shape({
6363 "current": PropTypes.oneOfType([PropTypes.bool]).isRequired,
6464 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
6565 "district": PropTypes.oneOfType([Integer]).isRequired,
66- "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
66+ "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
6767 "extra": _Extra,
6868 "id": PropTypes.oneOfType([Integer]).isRequired,
6969 "leadership_title": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
@@ -74,7 +74,7 @@ _Object = PropTypes.shape({
7474 "role_type_label": _RoleTypeLabel,
7575 "senator_class": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
7676 "senator_rank": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
77- "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
77+ "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7878 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
7979 "title": _Title,
8080 "title_long": _RoleTypeLabel,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -109,7 +109,7 @@ _Results = PropTypes.shape({
109109 });
110110 _Query = PropTypes.shape({
111111 "count": PropTypes.oneOfType([Integer]).isRequired,
112- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
112+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
113113 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
114114 "results": _Results,
115115 });
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 · +18 −3
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 }
Mjavascript-prop-typesdefault / toplevel.js+3 −3
@@ -43,7 +43,7 @@ _Extra = PropTypes.shape({
4343 });
4444 _Person = PropTypes.shape({
4545 "bioguideid": PropTypes.oneOfType([PropTypes.string]).isRequired,
46- "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
46+ "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4747 "cspanid": PropTypes.oneOfType([Integer]).isRequired,
4848 "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired,
4949 "gender": _Gender,
@@ -67,7 +67,7 @@ _Object = PropTypes.shape({
6767 "current": PropTypes.oneOfType([PropTypes.bool]).isRequired,
6868 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
6969 "district": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
70- "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
70+ "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7171 "extra": _Extra,
7272 "id": PropTypes.oneOfType([Integer]).isRequired,
7373 "leadership_title": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
@@ -80,7 +80,7 @@ _Object = PropTypes.shape({
8080 "senator_class_label": _SenatorClassLabel,
8181 "senator_rank": _SenatorRank,
8282 "senator_rank_label": _SenatorRankLabel,
83- "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
83+ "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
8484 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
8585 "title": _Title,
8686 "title_long": _RoleTypeLabel,
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

4 generated files · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -26,7 +26,7 @@ _Rates = PropTypes.shape({
2626 "super_reduced": PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf([null])]),
2727 });
2828 _Period = PropTypes.shape({
29- "effective_from": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _EffectiveFromEnum])]).isRequired,
29+ "effective_from": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), _EffectiveFromEnum])]).isRequired,
3030 "rates": _Rates,
3131 });
3232 _Rate = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1515
1616 let _TopLevel;
1717 _TopLevel = PropTypes.shape({
18- "BirthDate": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
18+ "BirthDate": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
1919 "BirthDateIsProtected": PropTypes.oneOfType([PropTypes.bool]).isRequired,
2020 "GenderTypeID": PropTypes.oneOfType([Integer]).isRequired,
2121 "Notes": PropTypes.oneOfType([PropTypes.string]).isRequired,
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 · +21 −6
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 }
Mjavascript-prop-typesdefault / toplevel.js+6 −6
@@ -24,23 +24,23 @@ _Facets = PropTypes.shape({
2424 });
2525 _CustomIncome = PropTypes.shape({
2626 "amount": PropTypes.oneOfType([Integer]).isRequired,
27- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
27+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2828 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
2929 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
3030 "status": _Status,
3131 "type": _CustomIncomeType,
32- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
32+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3333 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
3434 });
3535 _Result = PropTypes.shape({
3636 "cost_absolute": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
3737 "cost_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
3838 "cost_min": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
39- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
39+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4040 "customIncomes": PropTypes.oneOfType([PropTypes.arrayOf(_CustomIncome)]).isRequired,
4141 "direct_rep_costs_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
4242 "direct_rep_costs_min": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
43- "end_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
43+ "end_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4444 "eur_sources_grants": PropTypes.oneOfType([Integer]).isRequired,
4545 "eur_sources_grants_src": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
4646 "eur_sources_procurement": PropTypes.oneOfType([Integer]).isRequired,
@@ -56,14 +56,14 @@ _Result = PropTypes.shape({
5656 "public_financing_national": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
5757 "public_financing_total": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
5858 "representative": PropTypes.oneOfType([PropTypes.string]).isRequired,
59- "start_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
59+ "start_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
6060 "status": _Status,
6161 "total_budget": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
6262 "turnover_absolute": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
6363 "turnover_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
6464 "turnover_min": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
6565 "type": _ResultType,
66- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
66+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
6767 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
6868 });
6969 _TopLevel = PropTypes.shape({
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

4 generated files · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -33,11 +33,11 @@ _Prize = PropTypes.shape({
3333 "year": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
3434 });
3535 _Laureate = PropTypes.shape({
36- "born": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _BornEnum])]).isRequired,
36+ "born": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), _BornEnum])]).isRequired,
3737 "bornCity": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
3838 "bornCountry": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
3939 "bornCountryCode": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
40- "died": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _BornEnum])]).isRequired,
40+ "died": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), _BornEnum])]).isRequired,
4141 "diedCity": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
4242 "diedCountry": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
4343 "diedCountryCode": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -109,7 +109,7 @@ _Results = PropTypes.shape({
109109 });
110110 _Query = PropTypes.shape({
111111 "count": PropTypes.oneOfType([Integer]).isRequired,
112- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
112+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
113113 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
114114 "results": _Results,
115115 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -20,12 +20,12 @@ const _Status = PropTypes.oneOf(['inactive', 'active']);
2020 _Facets = PropTypes.shape({
2121 });
2222 _Result = PropTypes.shape({
23- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
23+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2424 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
2525 "person_id": PropTypes.oneOfType([PropTypes.string]).isRequired,
2626 "representative_id": PropTypes.oneOfType([PropTypes.string]).isRequired,
2727 "status": _Status,
28- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
28+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2929 });
3030 _TopLevel = PropTypes.shape({
3131 "count": PropTypes.oneOfType([Integer]).isRequired,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1515
1616 let _TopLevel;
1717 _TopLevel = PropTypes.shape({
18- "Date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "Date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "ID": PropTypes.oneOfType([Integer]).isRequired,
2020 "Sponsor": PropTypes.oneOfType([PropTypes.string]).isRequired,
2121 "Title": PropTypes.oneOfType([PropTypes.string]).isRequired,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -28,7 +28,7 @@ _LegalityElement = PropTypes.shape({
2828 "legality": _LegalityEnum,
2929 });
3030 _Ruling = PropTypes.shape({
31- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
31+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3232 "text": PropTypes.oneOfType([PropTypes.string]).isRequired,
3333 });
3434 _Card = PropTypes.shape({
@@ -71,7 +71,7 @@ _TopLevel = PropTypes.shape({
7171 "mkm_id": PropTypes.oneOfType([Integer]).isRequired,
7272 "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
7373 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
74- "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
74+ "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7575 "type": PropTypes.oneOfType([PropTypes.string]).isRequired,
7676 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -109,7 +109,7 @@ _Results = PropTypes.shape({
109109 });
110110 _Query = PropTypes.shape({
111111 "count": PropTypes.oneOfType([Integer]).isRequired,
112- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
112+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
113113 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
114114 "results": _Results,
115115 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +19 −4
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 }
Mjavascript-prop-typesdefault / toplevel.js+4 −4
@@ -39,7 +39,7 @@ _Result = PropTypes.shape({
3939 "be_office_town": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
4040 "code_of_conduct": PropTypes.oneOfType([PropTypes.string]).isRequired,
4141 "contact_country": PropTypes.oneOfType([Integer]).isRequired,
42- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
42+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4343 "entity": PropTypes.oneOfType([PropTypes.string]).isRequired,
4444 "goals": PropTypes.oneOfType([PropTypes.string]).isRequired,
4545 "head": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -54,7 +54,7 @@ _Result = PropTypes.shape({
5454 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
5555 "identification_code": PropTypes.oneOfType([PropTypes.string]).isRequired,
5656 "info_members": PropTypes.oneOfType([PropTypes.string]).isRequired,
57- "last_update_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
57+ "last_update_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
5858 "legal": PropTypes.oneOfType([PropTypes.string]).isRequired,
5959 "legal_status": PropTypes.oneOfType([PropTypes.string]).isRequired,
6060 "main_category": PropTypes.oneOfType([Integer]).isRequired,
@@ -70,12 +70,12 @@ _Result = PropTypes.shape({
7070 "networking": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
7171 "number_of_natural_persons": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
7272 "other_code_of_conduct": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
73- "registration_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
73+ "registration_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7474 "status": _Status,
7575 "structure_members": PropTypes.oneOfType([PropTypes.string]).isRequired,
7676 "sub_category": PropTypes.oneOfType([Integer]).isRequired,
7777 "sub_category_title": PropTypes.oneOfType([PropTypes.string]).isRequired,
78- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
78+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7979 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
8080 "web_site_url": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
8181 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -17,7 +17,7 @@ const _OrbitClass = PropTypes.oneOf(['Apollo', 'Amor', 'Aten', 'Comet', 'Jupiter
1717 const _Pha = PropTypes.oneOf(['Y', 'N', 'n/a']);
1818 _TopLevel = PropTypes.shape({
1919 "designation": PropTypes.oneOfType([PropTypes.string]).isRequired,
20- "discovery_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
20+ "discovery_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2121 "h_mag": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
2222 "i_deg": PropTypes.oneOfType([PropTypes.string]).isRequired,
2323 "moid_au": PropTypes.oneOfType([PropTypes.string]).isRequired,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -28,7 +28,7 @@ _TopLevel = PropTypes.shape({
2828 "comments": PropTypes.oneOfType([Integer]).isRequired,
2929 "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
3030 "commits_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
31- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
31+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3232 "description": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
3333 "files": PropTypes.oneOfType([PropTypes.objectOf(_File)]).isRequired,
3434 "forks_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -38,7 +38,7 @@ _TopLevel = PropTypes.shape({
3838 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
3939 "public": PropTypes.oneOfType([PropTypes.bool]).isRequired,
4040 "truncated": PropTypes.oneOfType([PropTypes.bool]).isRequired,
41- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
41+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4242 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
4343 "user": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
4444 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -19,12 +19,12 @@ let _Result;
1919 _Facets = PropTypes.shape({
2020 });
2121 _Result = PropTypes.shape({
22- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
22+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2323 "id": PropTypes.oneOfType([Integer]).isRequired,
2424 "items": PropTypes.oneOfType([Integer]).isRequired,
2525 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
2626 "parent": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
27- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
27+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2828 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
2929 });
3030 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -21,7 +21,7 @@ const _Title = PropTypes.oneOf(['Mr', 'Ms']);
2121 _Facets = PropTypes.shape({
2222 });
2323 _Result = PropTypes.shape({
24- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
24+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2525 "entity": PropTypes.oneOfType([PropTypes.string]).isRequired,
2626 "first_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
2727 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -30,7 +30,7 @@ _Result = PropTypes.shape({
3030 "position": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
3131 "status": _Status,
3232 "title": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([_Title, PropTypes.oneOf([null])])])(props, name, ...args),
33- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
33+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3434 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
3535 });
3636 _TopLevel = PropTypes.shape({
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 · +19 −4
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 }
Mjavascript-prop-typesdefault / toplevel.js+4 −4
@@ -20,20 +20,20 @@ _Errors = PropTypes.shape({
2020 _TopLevel = PropTypes.shape({
2121 "code": PropTypes.oneOfType([PropTypes.string]).isRequired,
2222 "column_names": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string)]).isRequired,
23- "data": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.number, PropTypes.oneOf([null])])))]).isRequired,
23+ "data": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.number, PropTypes.oneOf([null])])))]).isRequired,
2424 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
2525 "display_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
2626 "errors": _Errors,
2727 "frequency": PropTypes.oneOfType([PropTypes.string]).isRequired,
28- "from_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
28+ "from_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2929 "id": PropTypes.oneOfType([Integer]).isRequired,
3030 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
3131 "premium": PropTypes.oneOfType([PropTypes.bool]).isRequired,
3232 "source_code": PropTypes.oneOfType([PropTypes.string]).isRequired,
3333 "source_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
34- "to_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
34+ "to_date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3535 "type": PropTypes.oneOfType([PropTypes.string]).isRequired,
36- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
36+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3737 "urlize_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
3838 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -33,7 +33,7 @@ _TopLevel = PropTypes.shape({
3333 "recclass": PropTypes.oneOfType([PropTypes.string]).isRequired,
3434 "reclat": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
3535 "reclong": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
36- "year": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
36+ "year": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
3737 });
3838
3939 export const TopLevel = PropTypes.arrayOf(_TopLevel);
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
1717 "base": PropTypes.oneOfType([PropTypes.string]).isRequired,
18- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired,
2020 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 let _TotalPopulation;
1818 _TotalPopulation = PropTypes.shape({
19- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2020 "population": PropTypes.oneOfType([Integer]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -20,10 +20,10 @@ _Facets = PropTypes.shape({
2020 });
2121 _Result = PropTypes.shape({
2222 "acronym": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
23- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
23+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2424 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
2525 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
26- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
26+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2727 "uri": PropTypes.oneOfType([PropTypes.string]).isRequired,
2828 });
2929 _TopLevel = PropTypes.shape({
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -109,7 +109,7 @@ _Results = PropTypes.shape({
109109 });
110110 _Query = PropTypes.shape({
111111 "count": PropTypes.oneOfType([Integer]).isRequired,
112- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
112+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
113113 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
114114 "results": _Results,
115115 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -31,7 +31,7 @@ _LegalityElement = PropTypes.shape({
3131 "legality": _LegalityEnum,
3232 });
3333 _Ruling = PropTypes.shape({
34- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
34+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3535 "text": PropTypes.oneOfType([PropTypes.string]).isRequired,
3636 });
3737 _Card = PropTypes.shape({
@@ -73,7 +73,7 @@ _TopLevel = PropTypes.shape({
7373 "mkm_id": PropTypes.oneOfType([Integer]).isRequired,
7474 "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
7575 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
76- "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
76+ "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7777 "type": PropTypes.oneOfType([PropTypes.string]).isRequired,
7878 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -31,7 +31,7 @@ _LegalityElement = PropTypes.shape({
3131 "legality": _LegalityEnum,
3232 });
3333 _Ruling = PropTypes.shape({
34- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
34+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
3535 "text": PropTypes.oneOfType([PropTypes.string]).isRequired,
3636 });
3737 _Card = PropTypes.shape({
@@ -73,7 +73,7 @@ _TopLevel = PropTypes.shape({
7373 "mkm_id": PropTypes.oneOfType([Integer]).isRequired,
7474 "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired,
7575 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
76- "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
76+ "releaseDate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7777 "type": PropTypes.oneOfType([PropTypes.string]).isRequired,
7878 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -108,7 +108,7 @@ _Results = PropTypes.shape({
108108 });
109109 _Query = PropTypes.shape({
110110 "count": PropTypes.oneOfType([Integer]).isRequired,
111- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
111+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
112112 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
113113 "results": _Results,
114114 });
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -109,7 +109,7 @@ _Results = PropTypes.shape({
109109 });
110110 _Query = PropTypes.shape({
111111 "count": PropTypes.oneOfType([Integer]).isRequired,
112- "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
112+ "created": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
113113 "lang": PropTypes.oneOfType([PropTypes.string]).isRequired,
114114 "results": _Results,
115115 });
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -15,8 +15,8 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 let _Invoice;
1717 _Invoice = PropTypes.shape({
18- "createdAt": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
19- "dueDate": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
18+ "createdAt": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
19+ "dueDate": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
2020 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
2121 });
2222 _TopLevel = PropTypes.shape({
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 · +17 −2
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 }
Mjavascript-prop-typesdefault / toplevel.js+2 −2
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
1414
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
17- "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
18- "lastSeen": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
17+ "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
18+ "lastSeen": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
1919 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
2020 });
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 · +21 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -622,7 +622,7 @@ _DateOnlyConverter = PropTypes.shape({
622622 "DateOnlyConverter": PropTypes.oneOfType([Integer]).isRequired,
623623 });
624624 _DateTime = PropTypes.shape({
625- "DateTime": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
625+ "DateTime": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
626626 });
627627 _DateTimeStyles = PropTypes.shape({
628628 "DateTimeStyles": PropTypes.oneOfType([Integer]).isRequired,
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 · +31 −16
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 }
Mjavascript-prop-typesdefault / toplevel.js+16 −16
@@ -60,11 +60,11 @@ _User = PropTypes.shape({
6060 });
6161 _Comment = PropTypes.shape({
6262 "body": PropTypes.oneOfType([PropTypes.string]).isRequired,
63- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
63+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
6464 "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
6565 "id": PropTypes.oneOfType([Integer]).isRequired,
6666 "issue_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
67- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
67+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
6868 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
6969 "user": _User,
7070 });
@@ -89,10 +89,10 @@ _Label = PropTypes.shape({
8989 _Milestone = PropTypes.shape({
9090 "closed_at": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
9191 "closed_issues": PropTypes.oneOfType([Integer]).isRequired,
92- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
92+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
9393 "creator": _User,
9494 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
95- "due_on": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
95+ "due_on": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
9696 "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
9797 "id": PropTypes.oneOfType([Integer]).isRequired,
9898 "labels_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -100,7 +100,7 @@ _Milestone = PropTypes.shape({
100100 "open_issues": PropTypes.oneOfType([Integer]).isRequired,
101101 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
102102 "title": PropTypes.oneOfType([PropTypes.string]).isRequired,
103- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
103+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
104104 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
105105 });
106106 _IssuePullRequest = PropTypes.shape({
@@ -113,10 +113,10 @@ _Issue = PropTypes.shape({
113113 "assignee": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
114114 "assignees": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any)]).isRequired,
115115 "body": PropTypes.oneOfType([PropTypes.string]).isRequired,
116- "closed_at": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
116+ "closed_at": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])])])(props, name, ...args),
117117 "comments": PropTypes.oneOfType([Integer]).isRequired,
118118 "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
119- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
119+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
120120 "events_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
121121 "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
122122 "id": PropTypes.oneOfType([Integer]).isRequired,
@@ -129,7 +129,7 @@ _Issue = PropTypes.shape({
129129 "repository_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
130130 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
131131 "title": PropTypes.oneOfType([PropTypes.string]).isRequired,
132- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
132+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
133133 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
134134 "user": _User,
135135 });
@@ -158,7 +158,7 @@ _BaseRepo = PropTypes.shape({
158158 "compare_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
159159 "contents_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
160160 "contributors_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
161- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
161+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
162162 "default_branch": PropTypes.oneOfType([PropTypes.string]).isRequired,
163163 "deployments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
164164 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -199,7 +199,7 @@ _BaseRepo = PropTypes.shape({
199199 "owner": _User,
200200 "private": PropTypes.oneOfType([PropTypes.bool]).isRequired,
201201 "pulls_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
202- "pushed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
202+ "pushed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
203203 "releases_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
204204 "size": PropTypes.oneOfType([Integer]).isRequired,
205205 "ssh_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
@@ -212,7 +212,7 @@ _BaseRepo = PropTypes.shape({
212212 "tags_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
213213 "teams_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
214214 "trees_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
215- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
215+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
216216 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
217217 "watchers": PropTypes.oneOfType([Integer]).isRequired,
218218 "watchers_count": PropTypes.oneOfType([Integer]).isRequired,
@@ -232,12 +232,12 @@ _PayloadPullRequest = PropTypes.shape({
232232 "base": _Base,
233233 "body": PropTypes.oneOfType([PropTypes.string]).isRequired,
234234 "changed_files": PropTypes.oneOfType([Integer]).isRequired,
235- "closed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
235+ "closed_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
236236 "comments": PropTypes.oneOfType([Integer]).isRequired,
237237 "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
238238 "commits": PropTypes.oneOfType([Integer]).isRequired,
239239 "commits_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
240- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
240+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
241241 "deletions": PropTypes.oneOfType([Integer]).isRequired,
242242 "diff_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
243243 "head": _Base,
@@ -250,7 +250,7 @@ _PayloadPullRequest = PropTypes.shape({
250250 "mergeable": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
251251 "mergeable_state": PropTypes.oneOfType([PropTypes.string]).isRequired,
252252 "merged": PropTypes.oneOfType([PropTypes.bool]).isRequired,
253- "merged_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
253+ "merged_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
254254 "merged_by": _User,
255255 "milestone": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
256256 "number": PropTypes.oneOfType([Integer]).isRequired,
@@ -263,7 +263,7 @@ _PayloadPullRequest = PropTypes.shape({
263263 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
264264 "statuses_url": PropTypes.oneOfType([PropTypes.string]).isRequired,
265265 "title": PropTypes.oneOfType([PropTypes.string]).isRequired,
266- "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
266+ "updated_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
267267 "url": PropTypes.oneOfType([PropTypes.string]).isRequired,
268268 "user": _User,
269269 });
@@ -292,7 +292,7 @@ _TopLevelRepo = PropTypes.shape({
292292 });
293293 _TopLevel = PropTypes.shape({
294294 "actor": _Actor,
295- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
295+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
296296 "id": PropTypes.oneOfType([PropTypes.string]).isRequired,
297297 "org": PropTypes.oneOfType([_Actor, PropTypes.oneOf([null])]),
298298 "payload": _Payload,
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 · +16 −1
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 }
Mjavascript-prop-typesdefault / toplevel.js+1 −1
@@ -23,7 +23,7 @@ _Address = PropTypes.shape({
2323 });
2424 _Item = PropTypes.shape({
2525 "address": PropTypes.oneOfType([_Address, PropTypes.oneOf([null])]),
26- "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
26+ "created_at": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
2727 "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
2828 "sex": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args),
2929 });
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 · +18 −3
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 }
Mjavascript-prop-typesdefault / toplevel.js+3 −3
@@ -43,7 +43,7 @@ _Extra = PropTypes.shape({
4343 });
4444 _Person = PropTypes.shape({
4545 "bioguideid": PropTypes.oneOfType([PropTypes.string]).isRequired,
46- "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
46+ "birthday": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
4747 "cspanid": PropTypes.oneOfType([Integer]).isRequired,
4848 "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired,
4949 "gender": _Gender,
@@ -66,7 +66,7 @@ _Object = PropTypes.shape({
6666 "current": PropTypes.oneOfType([PropTypes.bool]).isRequired,
6767 "description": PropTypes.oneOfType([PropTypes.string]).isRequired,
6868 "district": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args),
69- "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
69+ "enddate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
7070 "extra": _Extra,
7171 "leadership_title": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args),
7272 "party": _Party,
@@ -78,7 +78,7 @@ _Object = PropTypes.shape({
7878 "senator_class_label": _SenatorClassLabel,
7979 "senator_rank": _SenatorRank,
8080 "senator_rank_label": _SenatorRankLabel,
81- "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
81+ "startdate": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
8282 "state": PropTypes.oneOfType([PropTypes.string]).isRequired,
8383 "title": _Title,
8484 "title_long": _RoleTypeLabel,
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

4 generated files · +16 −1
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-javascript-prop-typesdefault / toplevel.js+1 −1
@@ -15,7 +15,7 @@ import PropTypes from "prop-types";
1515 let _TopLevel;
1616 const _BarEnum = PropTypes.oneOf(['quux']);
1717 _TopLevel = PropTypes.shape({
18- "bar": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _BarEnum])]).isRequired,
18+ "bar": PropTypes.oneOfType([PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), _BarEnum])]).isRequired,
1919 "foo": PropTypes.oneOfType([PropTypes.string]).isRequired,
2020 });
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 · +18 −3
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-javascript-prop-typesdefault / toplevel.js+3 −3
@@ -16,9 +16,9 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n
1616 let _TopLevel;
1717 const _ComplexUnionArrayEnum = PropTypes.oneOf(['foo', 'bar']);
1818 _TopLevel = PropTypes.shape({
19- "complex-union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), _ComplexUnionArrayEnum, Integer]))]).isRequired,
20- "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
21- "date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
19+ "complex-union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), _ComplexUnionArrayEnum, Integer]))]).isRequired,
20+ "date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
21+ "date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2222 "time": PropTypes.oneOfType([PropTypes.string]).isRequired,
2323 "union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string)]).isRequired,
2424 });
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 · +19 −4
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-javascript-prop-typesdefault / toplevel.js+4 −4
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
1414
1515 let _TopLevel;
1616 _TopLevel = PropTypes.shape({
17- "optional-date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
18- "optional-date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
17+ "optional-date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
18+ "optional-date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time"), PropTypes.oneOf([null])]),
1919 "optional-time": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]),
20- "required-date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
21- "required-date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && !Number.isNaN(Date.parse(props[name])) ? null : new Error("Expected date-time")]).isRequired,
20+ "required-date": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
21+ "required-date-time": PropTypes.oneOfType([(props, name) => props[name] == null || typeof props[name] === "string" && /^(\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01]))(?:T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d))?$/i.test(props[name]) && !Number.isNaN(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)) && new Date(Date.parse(`${props[name].slice(0, 10)}T00:00:00Z`)).toISOString().slice(0, 10) === props[name].slice(0, 10) ? null : new Error("Expected date-time")]).isRequired,
2222 "required-time": PropTypes.oneOfType([PropTypes.string]).isRequired,
2323 });
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.