Test case
3 generated files · +15 −0test/inputs/graphql/github1.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github2.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 119 | 119 | if (val === null) { |
| 120 | 120 | return null; |
| 121 | 121 | } |
| 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); | |
| 122 | 124 | const d = new Date(val); |
| 123 | 125 | if (isNaN(d.valueOf())) { |
| 124 | 126 | return invalidValue(l("Date"), val, key, parent); |
| 125 | 127 | } |
| 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); | |
| 126 | 131 | return d; |
| 127 | 132 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 119 | 119 | if (val === null) { |
| 120 | 120 | return null; |
| 121 | 121 | } |
| 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); | |
| 122 | 124 | const d = new Date(val); |
| 123 | 125 | if (isNaN(d.valueOf())) { |
| 124 | 126 | return invalidValue(l("Date"), val, key, parent); |
| 125 | 127 | } |
| 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); | |
| 126 | 131 | return d; |
| 127 | 132 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github3.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github4.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 128 | 128 | if (val === null) { |
| 129 | 129 | return null; |
| 130 | 130 | } |
| 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); | |
| 131 | 133 | const d = new Date(val); |
| 132 | 134 | if (isNaN(d.valueOf())) { |
| 133 | 135 | return invalidValue(l("Date"), val, key, parent); |
| 134 | 136 | } |
| 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); | |
| 135 | 140 | return d; |
| 136 | 141 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github5.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github6.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github7.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github8.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 119 | 119 | if (val === null) { |
| 120 | 120 | return null; |
| 121 | 121 | } |
| 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); | |
| 122 | 124 | const d = new Date(val); |
| 123 | 125 | if (isNaN(d.valueOf())) { |
| 124 | 126 | return invalidValue(l("Date"), val, key, parent); |
| 125 | 127 | } |
| 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); | |
| 126 | 131 | return d; |
| 127 | 132 | } |
Test case
3 generated files · +15 −0test/inputs/graphql/github9.graphql
Mgraphql-flowdefault / TopLevel.js+5 −0
| @@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 128 | 128 | if (val === null) { |
| 129 | 129 | return null; |
| 130 | 130 | } |
| 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); | |
| 131 | 133 | const d = new Date(val); |
| 132 | 134 | if (isNaN(d.valueOf())) { |
| 133 | 135 | return invalidValue(l("Date"), val, key, parent); |
| 134 | 136 | } |
| 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); | |
| 135 | 140 | return d; |
| 136 | 141 | } |
Mgraphql-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mgraphql-typescriptdefault / TopLevel.ts+5 −0
| @@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 122 | 122 | if (val === null) { |
| 123 | 123 | return null; |
| 124 | 124 | } |
| 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); | |
| 125 | 127 | const d = new Date(val); |
| 126 | 128 | if (isNaN(d.valueOf())) { |
| 127 | 129 | return invalidValue(l("Date"), val, key, parent); |
| 128 | 130 | } |
| 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); | |
| 129 | 134 | return d; |
| 130 | 135 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/00c36.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/00ec5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 163 | 163 | if (val === null) { |
| 164 | 164 | return null; |
| 165 | 165 | } |
| 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); | |
| 166 | 168 | const d = new Date(val); |
| 167 | 169 | if (isNaN(d.valueOf())) { |
| 168 | 170 | return invalidValue(l("Date"), val, key, parent); |
| 169 | 171 | } |
| 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); | |
| 170 | 175 | return d; |
| 171 | 176 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -162,10 +162,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 162 | 162 | if (val === null) { |
| 163 | 163 | return null; |
| 164 | 164 | } |
| 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); | |
| 165 | 167 | const d = new Date(val); |
| 166 | 168 | if (isNaN(d.valueOf())) { |
| 167 | 169 | return invalidValue(l("Date"), val, key, parent); |
| 168 | 170 | } |
| 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); | |
| 169 | 174 | return d; |
| 170 | 175 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/010b1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/016af.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/033b1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/050b0.json
Mflowdefault / TopLevel.js+5 −0
| @@ -152,10 +152,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 152 | 152 | if (val === null) { |
| 153 | 153 | return null; |
| 154 | 154 | } |
| 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); | |
| 155 | 157 | const d = new Date(val); |
| 156 | 158 | if (isNaN(d.valueOf())) { |
| 157 | 159 | return invalidValue(l("Date"), val, key, parent); |
| 158 | 160 | } |
| 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); | |
| 159 | 164 | return d; |
| 160 | 165 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/06bee.json
Mflowdefault / TopLevel.js+5 −0
| @@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 140 | 140 | if (val === null) { |
| 141 | 141 | return null; |
| 142 | 142 | } |
| 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); | |
| 143 | 145 | const d = new Date(val); |
| 144 | 146 | if (isNaN(d.valueOf())) { |
| 145 | 147 | return invalidValue(l("Date"), val, key, parent); |
| 146 | 148 | } |
| 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); | |
| 147 | 152 | return d; |
| 148 | 153 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/07540.json
Mflowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/0779f.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/07c75.json
Mflowdefault / TopLevel.js+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/09f54.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/0a358.json
Mflowdefault / TopLevel.js+5 −0
| @@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 114 | 114 | if (val === null) { |
| 115 | 115 | return null; |
| 116 | 116 | } |
| 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); | |
| 117 | 119 | const d = new Date(val); |
| 118 | 120 | if (isNaN(d.valueOf())) { |
| 119 | 121 | return invalidValue(l("Date"), val, key, parent); |
| 120 | 122 | } |
| 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); | |
| 121 | 126 | return d; |
| 122 | 127 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -20,10 +20,10 @@ _Facets = PropTypes.shape({ | ||
| 20 | 20 | }); |
| 21 | 21 | _Result = PropTypes.shape({ |
| 22 | 22 | "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, | |
| 24 | 24 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 25 | 25 | "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, | |
| 27 | 27 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 28 | 28 | }); |
| 29 | 29 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 111 | 111 | if (val === null) { |
| 112 | 112 | return null; |
| 113 | 113 | } |
| 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); | |
| 114 | 116 | const d = new Date(val); |
| 115 | 117 | if (isNaN(d.valueOf())) { |
| 116 | 118 | return invalidValue(l("Date"), val, key, parent); |
| 117 | 119 | } |
| 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); | |
| 118 | 123 | return d; |
| 119 | 124 | } |
Test case
4 generated files · +23 −8test/inputs/json/misc/0a91a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -316,10 +316,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 316 | 316 | if (val === null) { |
| 317 | 317 | return null; |
| 318 | 318 | } |
| 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); | |
| 319 | 321 | const d = new Date(val); |
| 320 | 322 | if (isNaN(d.valueOf())) { |
| 321 | 323 | return invalidValue(l("Date"), val, key, parent); |
| 322 | 324 | } |
| 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); | |
| 323 | 328 | return d; |
| 324 | 329 | } |
Mjavascript-prop-typesdefault / toplevel.js+8 −8
| @@ -89,7 +89,7 @@ _BaseRepo = PropTypes.shape({ | ||
| 89 | 89 | "compare_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 90 | 90 | "contents_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 91 | 91 | "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, | |
| 93 | 93 | "default_branch": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 94 | 94 | "deployments_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 95 | 95 | "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({ | ||
| 130 | 130 | "owner": _MergedBy, |
| 131 | 131 | "private": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 132 | 132 | "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, | |
| 134 | 134 | "releases_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 135 | 135 | "size": PropTypes.oneOfType([Integer]).isRequired, |
| 136 | 136 | "ssh_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -143,7 +143,7 @@ _BaseRepo = PropTypes.shape({ | ||
| 143 | 143 | "tags_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 144 | 144 | "teams_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 145 | 145 | "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, | |
| 147 | 147 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 148 | 148 | "watchers": PropTypes.oneOfType([Integer]).isRequired, |
| 149 | 149 | "watchers_count": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -163,12 +163,12 @@ _PullRequest = PropTypes.shape({ | ||
| 163 | 163 | "base": _Base, |
| 164 | 164 | "body": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 165 | 165 | "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, | |
| 167 | 167 | "comments": PropTypes.oneOfType([Integer]).isRequired, |
| 168 | 168 | "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 169 | 169 | "commits": PropTypes.oneOfType([Integer]).isRequired, |
| 170 | 170 | "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, | |
| 172 | 172 | "deletions": PropTypes.oneOfType([Integer]).isRequired, |
| 173 | 173 | "diff_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 174 | 174 | "head": _Base, |
| @@ -181,7 +181,7 @@ _PullRequest = PropTypes.shape({ | ||
| 181 | 181 | "mergeable": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 182 | 182 | "mergeable_state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 183 | 183 | "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, | |
| 185 | 185 | "merged_by": _MergedBy, |
| 186 | 186 | "milestone": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 187 | 187 | "number": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -194,7 +194,7 @@ _PullRequest = PropTypes.shape({ | ||
| 194 | 194 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 195 | 195 | "statuses_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 196 | 196 | "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, | |
| 198 | 198 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 199 | 199 | "user": _MergedBy, |
| 200 | 200 | }); |
| @@ -221,7 +221,7 @@ _TopLevelRepo = PropTypes.shape({ | ||
| 221 | 221 | }); |
| 222 | 222 | _TopLevel = PropTypes.shape({ |
| 223 | 223 | "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, | |
| 225 | 225 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 226 | 226 | "org": PropTypes.oneOfType([_Actor, PropTypes.oneOf([null])]), |
| 227 | 227 | "payload": _Payload, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -311,10 +311,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 311 | 311 | if (val === null) { |
| 312 | 312 | return null; |
| 313 | 313 | } |
| 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); | |
| 314 | 316 | const d = new Date(val); |
| 315 | 317 | if (isNaN(d.valueOf())) { |
| 316 | 318 | return invalidValue(l("Date"), val, key, parent); |
| 317 | 319 | } |
| 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); | |
| 318 | 323 | return d; |
| 319 | 324 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/0b91a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/0cffa.json
Mflowdefault / TopLevel.js+5 −0
| @@ -211,10 +211,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 211 | 211 | if (val === null) { |
| 212 | 212 | return null; |
| 213 | 213 | } |
| 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); | |
| 214 | 216 | const d = new Date(val); |
| 215 | 217 | if (isNaN(d.valueOf())) { |
| 216 | 218 | return invalidValue(l("Date"), val, key, parent); |
| 217 | 219 | } |
| 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); | |
| 218 | 223 | return d; |
| 219 | 224 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 204 | 204 | if (val === null) { |
| 205 | 205 | return null; |
| 206 | 206 | } |
| 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); | |
| 207 | 209 | const d = new Date(val); |
| 208 | 210 | if (isNaN(d.valueOf())) { |
| 209 | 211 | return invalidValue(l("Date"), val, key, parent); |
| 210 | 212 | } |
| 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); | |
| 211 | 216 | return d; |
| 212 | 217 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/0e0c2.json
Mflowdefault / TopLevel.js+5 −0
| @@ -173,10 +173,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 173 | 173 | if (val === null) { |
| 174 | 174 | return null; |
| 175 | 175 | } |
| 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); | |
| 176 | 178 | const d = new Date(val); |
| 177 | 179 | if (isNaN(d.valueOf())) { |
| 178 | 180 | return invalidValue(l("Date"), val, key, parent); |
| 179 | 181 | } |
| 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); | |
| 180 | 185 | return d; |
| 181 | 186 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -71,7 +71,7 @@ _Result = PropTypes.shape({ | ||
| 71 | 71 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 72 | 72 | "images": PropTypes.oneOfType([PropTypes.arrayOf(_Image)]).isRequired, |
| 73 | 73 | "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, | |
| 75 | 75 | "stars": PropTypes.oneOfType([Integer]).isRequired, |
| 76 | 76 | "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), |
| 77 | 77 | "title": PropTypes.oneOfType([PropTypes.string]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 167 | 167 | if (val === null) { |
| 168 | 168 | return null; |
| 169 | 169 | } |
| 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); | |
| 170 | 172 | const d = new Date(val); |
| 171 | 173 | if (isNaN(d.valueOf())) { |
| 172 | 174 | return invalidValue(l("Date"), val, key, parent); |
| 173 | 175 | } |
| 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); | |
| 174 | 179 | return d; |
| 175 | 180 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/0fecf.json
Mflowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/10be4.json
Mflowdefault / TopLevel.js+5 −0
| @@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 163 | 163 | if (val === null) { |
| 164 | 164 | return null; |
| 165 | 165 | } |
| 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); | |
| 166 | 168 | const d = new Date(val); |
| 167 | 169 | if (isNaN(d.valueOf())) { |
| 168 | 170 | return invalidValue(l("Date"), val, key, parent); |
| 169 | 171 | } |
| 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); | |
| 170 | 175 | return d; |
| 171 | 176 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/112b5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/127a1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -210,10 +210,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 210 | 210 | if (val === null) { |
| 211 | 211 | return null; |
| 212 | 212 | } |
| 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); | |
| 213 | 215 | const d = new Date(val); |
| 214 | 216 | if (isNaN(d.valueOf())) { |
| 215 | 217 | return invalidValue(l("Date"), val, key, parent); |
| 216 | 218 | } |
| 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); | |
| 217 | 222 | return d; |
| 218 | 223 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 204 | 204 | if (val === null) { |
| 205 | 205 | return null; |
| 206 | 206 | } |
| 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); | |
| 207 | 209 | const d = new Date(val); |
| 208 | 210 | if (isNaN(d.valueOf())) { |
| 209 | 211 | return invalidValue(l("Date"), val, key, parent); |
| 210 | 212 | } |
| 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); | |
| 211 | 216 | return d; |
| 212 | 217 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/13d8d.json
Mflowdefault / TopLevel.js+5 −0
| @@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 122 | 122 | if (val === null) { |
| 123 | 123 | return null; |
| 124 | 124 | } |
| 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); | |
| 125 | 127 | const d = new Date(val); |
| 126 | 128 | if (isNaN(d.valueOf())) { |
| 127 | 129 | return invalidValue(l("Date"), val, key, parent); |
| 128 | 130 | } |
| 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); | |
| 129 | 134 | return d; |
| 130 | 135 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -122,10 +122,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 122 | 122 | if (val === null) { |
| 123 | 123 | return null; |
| 124 | 124 | } |
| 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); | |
| 125 | 127 | const d = new Date(val); |
| 126 | 128 | if (isNaN(d.valueOf())) { |
| 127 | 129 | return invalidValue(l("Date"), val, key, parent); |
| 128 | 130 | } |
| 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); | |
| 129 | 134 | return d; |
| 130 | 135 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/14d38.json
Mflowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/167d6.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/16bc5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/176f1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/1a7f5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/1b28c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +18 −3test/inputs/json/misc/1b409.json
Mflowdefault / TopLevel.js+5 −0
| @@ -187,10 +187,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 187 | 187 | if (val === null) { |
| 188 | 188 | return null; |
| 189 | 189 | } |
| 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); | |
| 190 | 192 | const d = new Date(val); |
| 191 | 193 | if (isNaN(d.valueOf())) { |
| 192 | 194 | return invalidValue(l("Date"), val, key, parent); |
| 193 | 195 | } |
| 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); | |
| 194 | 199 | return d; |
| 195 | 200 | } |
Mjavascript-prop-typesdefault / toplevel.js+3 −3
| @@ -39,7 +39,7 @@ _Extra = PropTypes.shape({ | ||
| 39 | 39 | }); |
| 40 | 40 | _Person = PropTypes.shape({ |
| 41 | 41 | "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, | |
| 43 | 43 | "cspanid": PropTypes.oneOfType([Integer]).isRequired, |
| 44 | 44 | "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 45 | 45 | "gender": _Gender, |
| @@ -63,7 +63,7 @@ _Object = PropTypes.shape({ | ||
| 63 | 63 | "current": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 64 | 64 | "description": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 65 | 65 | "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, | |
| 67 | 67 | "extra": _Extra, |
| 68 | 68 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 69 | 69 | "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({ | ||
| 74 | 74 | "role_type_label": _RoleTypeLabel, |
| 75 | 75 | "senator_class": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 76 | 76 | "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, | |
| 78 | 78 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 79 | 79 | "title": _Title, |
| 80 | 80 | "title_long": _RoleTypeLabel, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -170,10 +170,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 170 | 170 | if (val === null) { |
| 171 | 171 | return null; |
| 172 | 172 | } |
| 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); | |
| 173 | 175 | const d = new Date(val); |
| 174 | 176 | if (isNaN(d.valueOf())) { |
| 175 | 177 | return invalidValue(l("Date"), val, key, parent); |
| 176 | 178 | } |
| 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); | |
| 177 | 182 | return d; |
| 178 | 183 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/2465e.json
Mflowdefault / TopLevel.js+5 −0
| @@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 169 | 169 | if (val === null) { |
| 170 | 170 | return null; |
| 171 | 171 | } |
| 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); | |
| 172 | 174 | const d = new Date(val); |
| 173 | 175 | if (isNaN(d.valueOf())) { |
| 174 | 176 | return invalidValue(l("Date"), val, key, parent); |
| 175 | 177 | } |
| 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); | |
| 176 | 181 | return d; |
| 177 | 182 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 169 | 169 | if (val === null) { |
| 170 | 170 | return null; |
| 171 | 171 | } |
| 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); | |
| 172 | 174 | const d = new Date(val); |
| 173 | 175 | if (isNaN(d.valueOf())) { |
| 174 | 176 | return invalidValue(l("Date"), val, key, parent); |
| 175 | 177 | } |
| 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); | |
| 176 | 181 | return d; |
| 177 | 182 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/24f52.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/262f0.json
Mflowdefault / TopLevel.js+5 −0
| @@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 199 | 199 | if (val === null) { |
| 200 | 200 | return null; |
| 201 | 201 | } |
| 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); | |
| 202 | 204 | const d = new Date(val); |
| 203 | 205 | if (isNaN(d.valueOf())) { |
| 204 | 206 | return invalidValue(l("Date"), val, key, parent); |
| 205 | 207 | } |
| 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); | |
| 206 | 211 | return d; |
| 207 | 212 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -109,7 +109,7 @@ _Results = PropTypes.shape({ | ||
| 109 | 109 | }); |
| 110 | 110 | _Query = PropTypes.shape({ |
| 111 | 111 | "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, | |
| 113 | 113 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 114 | 114 | "results": _Results, |
| 115 | 115 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 196 | 196 | if (val === null) { |
| 197 | 197 | return null; |
| 198 | 198 | } |
| 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); | |
| 199 | 201 | const d = new Date(val); |
| 200 | 202 | if (isNaN(d.valueOf())) { |
| 201 | 203 | return invalidValue(l("Date"), val, key, parent); |
| 202 | 204 | } |
| 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); | |
| 203 | 208 | return d; |
| 204 | 209 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/26b49.json
Mflowdefault / TopLevel.js+5 −0
| @@ -208,10 +208,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 208 | 208 | if (val === null) { |
| 209 | 209 | return null; |
| 210 | 210 | } |
| 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); | |
| 211 | 213 | const d = new Date(val); |
| 212 | 214 | if (isNaN(d.valueOf())) { |
| 213 | 215 | return invalidValue(l("Date"), val, key, parent); |
| 214 | 216 | } |
| 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); | |
| 215 | 220 | return d; |
| 216 | 221 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 203 | 203 | if (val === null) { |
| 204 | 204 | return null; |
| 205 | 205 | } |
| 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); | |
| 206 | 208 | const d = new Date(val); |
| 207 | 209 | if (isNaN(d.valueOf())) { |
| 208 | 210 | return invalidValue(l("Date"), val, key, parent); |
| 209 | 211 | } |
| 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); | |
| 210 | 215 | return d; |
| 211 | 216 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/26c9c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 283 | 283 | if (val === null) { |
| 284 | 284 | return null; |
| 285 | 285 | } |
| 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); | |
| 286 | 288 | const d = new Date(val); |
| 287 | 289 | if (isNaN(d.valueOf())) { |
| 288 | 290 | return invalidValue(l("Date"), val, key, parent); |
| 289 | 291 | } |
| 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); | |
| 290 | 295 | return d; |
| 291 | 296 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 283 | 283 | if (val === null) { |
| 284 | 284 | return null; |
| 285 | 285 | } |
| 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); | |
| 286 | 288 | const d = new Date(val); |
| 287 | 289 | if (isNaN(d.valueOf())) { |
| 288 | 290 | return invalidValue(l("Date"), val, key, parent); |
| 289 | 291 | } |
| 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); | |
| 290 | 295 | return d; |
| 291 | 296 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/27332.json
Mflowdefault / TopLevel.js+5 −0
| @@ -249,10 +249,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 249 | 249 | if (val === null) { |
| 250 | 250 | return null; |
| 251 | 251 | } |
| 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); | |
| 252 | 254 | const d = new Date(val); |
| 253 | 255 | if (isNaN(d.valueOf())) { |
| 254 | 256 | return invalidValue(l("Date"), val, key, parent); |
| 255 | 257 | } |
| 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); | |
| 256 | 261 | return d; |
| 257 | 262 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -235,10 +235,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 235 | 235 | if (val === null) { |
| 236 | 236 | return null; |
| 237 | 237 | } |
| 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); | |
| 238 | 240 | const d = new Date(val); |
| 239 | 241 | if (isNaN(d.valueOf())) { |
| 240 | 242 | return invalidValue(l("Date"), val, key, parent); |
| 241 | 243 | } |
| 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); | |
| 242 | 247 | return d; |
| 243 | 248 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/29f47.json
Mflowdefault / TopLevel.js+5 −0
| @@ -235,10 +235,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 235 | 235 | if (val === null) { |
| 236 | 236 | return null; |
| 237 | 237 | } |
| 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); | |
| 238 | 240 | const d = new Date(val); |
| 239 | 241 | if (isNaN(d.valueOf())) { |
| 240 | 242 | return invalidValue(l("Date"), val, key, parent); |
| 241 | 243 | } |
| 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); | |
| 242 | 247 | return d; |
| 243 | 248 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 222 | 222 | if (val === null) { |
| 223 | 223 | return null; |
| 224 | 224 | } |
| 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); | |
| 225 | 227 | const d = new Date(val); |
| 226 | 228 | if (isNaN(d.valueOf())) { |
| 227 | 229 | return invalidValue(l("Date"), val, key, parent); |
| 228 | 230 | } |
| 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); | |
| 229 | 234 | return d; |
| 230 | 235 | } |
Test case
4 generated files · +18 −3test/inputs/json/misc/2d4e2.json
Mflowdefault / TopLevel.js+5 −0
| @@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 203 | 203 | if (val === null) { |
| 204 | 204 | return null; |
| 205 | 205 | } |
| 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); | |
| 206 | 208 | const d = new Date(val); |
| 207 | 209 | if (isNaN(d.valueOf())) { |
| 208 | 210 | return invalidValue(l("Date"), val, key, parent); |
| 209 | 211 | } |
| 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); | |
| 210 | 215 | return d; |
| 211 | 216 | } |
Mjavascript-prop-typesdefault / toplevel.js+3 −3
| @@ -43,7 +43,7 @@ _Extra = PropTypes.shape({ | ||
| 43 | 43 | }); |
| 44 | 44 | _Person = PropTypes.shape({ |
| 45 | 45 | "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, | |
| 47 | 47 | "cspanid": PropTypes.oneOfType([Integer]).isRequired, |
| 48 | 48 | "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 49 | 49 | "gender": _Gender, |
| @@ -67,7 +67,7 @@ _Object = PropTypes.shape({ | ||
| 67 | 67 | "current": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 68 | 68 | "description": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 69 | 69 | "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, | |
| 71 | 71 | "extra": _Extra, |
| 72 | 72 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 73 | 73 | "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({ | ||
| 80 | 80 | "senator_class_label": _SenatorClassLabel, |
| 81 | 81 | "senator_rank": _SenatorRank, |
| 82 | 82 | "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, | |
| 84 | 84 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 85 | 85 | "title": _Title, |
| 86 | 86 | "title_long": _RoleTypeLabel, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -180,10 +180,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 180 | 180 | if (val === null) { |
| 181 | 181 | return null; |
| 182 | 182 | } |
| 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); | |
| 183 | 185 | const d = new Date(val); |
| 184 | 186 | if (isNaN(d.valueOf())) { |
| 185 | 187 | return invalidValue(l("Date"), val, key, parent); |
| 186 | 188 | } |
| 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); | |
| 187 | 192 | return d; |
| 188 | 193 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/2df80.json
Mflowdefault / TopLevel.js+5 −0
| @@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 169 | 169 | if (val === null) { |
| 170 | 170 | return null; |
| 171 | 171 | } |
| 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); | |
| 172 | 174 | const d = new Date(val); |
| 173 | 175 | if (isNaN(d.valueOf())) { |
| 174 | 176 | return invalidValue(l("Date"), val, key, parent); |
| 175 | 177 | } |
| 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); | |
| 176 | 181 | return d; |
| 177 | 182 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/31189.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -26,7 +26,7 @@ _Rates = PropTypes.shape({ | ||
| 26 | 26 | "super_reduced": PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf([null])]), |
| 27 | 27 | }); |
| 28 | 28 | _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, | |
| 30 | 30 | "rates": _Rates, |
| 31 | 31 | }); |
| 32 | 32 | _Rate = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 123 | 123 | if (val === null) { |
| 124 | 124 | return null; |
| 125 | 125 | } |
| 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); | |
| 126 | 128 | const d = new Date(val); |
| 127 | 129 | if (isNaN(d.valueOf())) { |
| 128 | 130 | return invalidValue(l("Date"), val, key, parent); |
| 129 | 131 | } |
| 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); | |
| 130 | 135 | return d; |
| 131 | 136 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/32431.json
Mflowdefault / TopLevel.js+5 −0
| @@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 167 | 167 | if (val === null) { |
| 168 | 168 | return null; |
| 169 | 169 | } |
| 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); | |
| 170 | 172 | const d = new Date(val); |
| 171 | 173 | if (isNaN(d.valueOf())) { |
| 172 | 174 | return invalidValue(l("Date"), val, key, parent); |
| 173 | 175 | } |
| 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); | |
| 174 | 179 | return d; |
| 175 | 180 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -159,10 +159,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 159 | 159 | if (val === null) { |
| 160 | 160 | return null; |
| 161 | 161 | } |
| 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); | |
| 162 | 164 | const d = new Date(val); |
| 163 | 165 | if (isNaN(d.valueOf())) { |
| 164 | 166 | return invalidValue(l("Date"), val, key, parent); |
| 165 | 167 | } |
| 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); | |
| 166 | 171 | return d; |
| 167 | 172 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/32d5c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 15 | 15 | |
| 16 | 16 | let _TopLevel; |
| 17 | 17 | _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), | |
| 19 | 19 | "BirthDateIsProtected": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 20 | 20 | "GenderTypeID": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | "Notes": PropTypes.oneOfType([PropTypes.string]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
4 generated files · +21 −6test/inputs/json/misc/337ed.json
Mflowdefault / TopLevel.js+5 −0
| @@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 164 | 164 | if (val === null) { |
| 165 | 165 | return null; |
| 166 | 166 | } |
| 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); | |
| 167 | 169 | const d = new Date(val); |
| 168 | 170 | if (isNaN(d.valueOf())) { |
| 169 | 171 | return invalidValue(l("Date"), val, key, parent); |
| 170 | 172 | } |
| 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); | |
| 171 | 176 | return d; |
| 172 | 177 | } |
Mjavascript-prop-typesdefault / toplevel.js+6 −6
| @@ -24,23 +24,23 @@ _Facets = PropTypes.shape({ | ||
| 24 | 24 | }); |
| 25 | 25 | _CustomIncome = PropTypes.shape({ |
| 26 | 26 | "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, | |
| 28 | 28 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 29 | 29 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 30 | 30 | "status": _Status, |
| 31 | 31 | "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, | |
| 33 | 33 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 34 | 34 | }); |
| 35 | 35 | _Result = PropTypes.shape({ |
| 36 | 36 | "cost_absolute": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 37 | 37 | "cost_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 38 | 38 | "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, | |
| 40 | 40 | "customIncomes": PropTypes.oneOfType([PropTypes.arrayOf(_CustomIncome)]).isRequired, |
| 41 | 41 | "direct_rep_costs_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 42 | 42 | "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, | |
| 44 | 44 | "eur_sources_grants": PropTypes.oneOfType([Integer]).isRequired, |
| 45 | 45 | "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), |
| 46 | 46 | "eur_sources_procurement": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -56,14 +56,14 @@ _Result = PropTypes.shape({ | ||
| 56 | 56 | "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), |
| 57 | 57 | "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), |
| 58 | 58 | "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, | |
| 60 | 60 | "status": _Status, |
| 61 | 61 | "total_budget": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 62 | 62 | "turnover_absolute": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 63 | 63 | "turnover_max": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 64 | 64 | "turnover_min": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 65 | 65 | "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, | |
| 67 | 67 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 68 | 68 | }); |
| 69 | 69 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -154,10 +154,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 154 | 154 | if (val === null) { |
| 155 | 155 | return null; |
| 156 | 156 | } |
| 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); | |
| 157 | 159 | const d = new Date(val); |
| 158 | 160 | if (isNaN(d.valueOf())) { |
| 159 | 161 | return invalidValue(l("Date"), val, key, parent); |
| 160 | 162 | } |
| 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); | |
| 161 | 166 | return d; |
| 162 | 167 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/33d2e.json
Mflowdefault / TopLevel.js+5 −0
| @@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 149 | 149 | if (val === null) { |
| 150 | 150 | return null; |
| 151 | 151 | } |
| 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); | |
| 152 | 154 | const d = new Date(val); |
| 153 | 155 | if (isNaN(d.valueOf())) { |
| 154 | 156 | return invalidValue(l("Date"), val, key, parent); |
| 155 | 157 | } |
| 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); | |
| 156 | 161 | return d; |
| 157 | 162 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -33,11 +33,11 @@ _Prize = PropTypes.shape({ | ||
| 33 | 33 | "year": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 34 | 34 | }); |
| 35 | 35 | _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, | |
| 37 | 37 | "bornCity": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 38 | 38 | "bornCountry": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 39 | 39 | "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, | |
| 41 | 41 | "diedCity": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 42 | 42 | "diedCountry": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 43 | 43 | "diedCountryCode": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -137,10 +137,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 137 | 137 | if (val === null) { |
| 138 | 138 | return null; |
| 139 | 139 | } |
| 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); | |
| 140 | 142 | const d = new Date(val); |
| 141 | 143 | if (isNaN(d.valueOf())) { |
| 142 | 144 | return invalidValue(l("Date"), val, key, parent); |
| 143 | 145 | } |
| 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); | |
| 144 | 149 | return d; |
| 145 | 150 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/34702.json
Mflowdefault / TopLevel.js+5 −0
| @@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 184 | 184 | if (val === null) { |
| 185 | 185 | return null; |
| 186 | 186 | } |
| 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); | |
| 187 | 189 | const d = new Date(val); |
| 188 | 190 | if (isNaN(d.valueOf())) { |
| 189 | 191 | return invalidValue(l("Date"), val, key, parent); |
| 190 | 192 | } |
| 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); | |
| 191 | 196 | return d; |
| 192 | 197 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -151,10 +151,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 151 | 151 | if (val === null) { |
| 152 | 152 | return null; |
| 153 | 153 | } |
| 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); | |
| 154 | 156 | const d = new Date(val); |
| 155 | 157 | if (isNaN(d.valueOf())) { |
| 156 | 158 | return invalidValue(l("Date"), val, key, parent); |
| 157 | 159 | } |
| 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); | |
| 158 | 163 | return d; |
| 159 | 164 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/3536b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/3659d.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/36d5d.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/3a6b3.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/3e9a3.json
Mflowdefault / TopLevel.js+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -121,10 +121,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 121 | 121 | if (val === null) { |
| 122 | 122 | return null; |
| 123 | 123 | } |
| 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); | |
| 124 | 126 | const d = new Date(val); |
| 125 | 127 | if (isNaN(d.valueOf())) { |
| 126 | 128 | return invalidValue(l("Date"), val, key, parent); |
| 127 | 129 | } |
| 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); | |
| 128 | 133 | return d; |
| 129 | 134 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/3f1ce.json
Mflowdefault / TopLevel.js+5 −0
| @@ -197,10 +197,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 197 | 197 | if (val === null) { |
| 198 | 198 | return null; |
| 199 | 199 | } |
| 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); | |
| 200 | 202 | const d = new Date(val); |
| 201 | 203 | if (isNaN(d.valueOf())) { |
| 202 | 204 | return invalidValue(l("Date"), val, key, parent); |
| 203 | 205 | } |
| 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); | |
| 204 | 209 | return d; |
| 205 | 210 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -109,7 +109,7 @@ _Results = PropTypes.shape({ | ||
| 109 | 109 | }); |
| 110 | 110 | _Query = PropTypes.shape({ |
| 111 | 111 | "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, | |
| 113 | 113 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 114 | 114 | "results": _Results, |
| 115 | 115 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 196 | 196 | if (val === null) { |
| 197 | 197 | return null; |
| 198 | 198 | } |
| 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); | |
| 199 | 201 | const d = new Date(val); |
| 200 | 202 | if (isNaN(d.valueOf())) { |
| 201 | 203 | return invalidValue(l("Date"), val, key, parent); |
| 202 | 204 | } |
| 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); | |
| 203 | 208 | return d; |
| 204 | 209 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/421d4.json
Mflowdefault / TopLevel.js+5 −0
| @@ -210,10 +210,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 210 | 210 | if (val === null) { |
| 211 | 211 | return null; |
| 212 | 212 | } |
| 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); | |
| 213 | 215 | const d = new Date(val); |
| 214 | 216 | if (isNaN(d.valueOf())) { |
| 215 | 217 | return invalidValue(l("Date"), val, key, parent); |
| 216 | 218 | } |
| 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); | |
| 217 | 222 | return d; |
| 218 | 223 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -207,10 +207,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 207 | 207 | if (val === null) { |
| 208 | 208 | return null; |
| 209 | 209 | } |
| 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); | |
| 210 | 212 | const d = new Date(val); |
| 211 | 213 | if (isNaN(d.valueOf())) { |
| 212 | 214 | return invalidValue(l("Date"), val, key, parent); |
| 213 | 215 | } |
| 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); | |
| 214 | 219 | return d; |
| 215 | 220 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/437e7.json
Mflowdefault / TopLevel.js+5 −0
| @@ -205,10 +205,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 205 | 205 | if (val === null) { |
| 206 | 206 | return null; |
| 207 | 207 | } |
| 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); | |
| 208 | 210 | const d = new Date(val); |
| 209 | 211 | if (isNaN(d.valueOf())) { |
| 210 | 212 | return invalidValue(l("Date"), val, key, parent); |
| 211 | 213 | } |
| 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); | |
| 212 | 217 | return d; |
| 213 | 218 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -200,10 +200,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 200 | 200 | if (val === null) { |
| 201 | 201 | return null; |
| 202 | 202 | } |
| 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); | |
| 203 | 205 | const d = new Date(val); |
| 204 | 206 | if (isNaN(d.valueOf())) { |
| 205 | 207 | return invalidValue(l("Date"), val, key, parent); |
| 206 | 208 | } |
| 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); | |
| 207 | 212 | return d; |
| 208 | 213 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/43970.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/43eaf.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/458db.json
Mflowdefault / TopLevel.js+5 −0
| @@ -138,10 +138,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 138 | 138 | if (val === null) { |
| 139 | 139 | return null; |
| 140 | 140 | } |
| 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); | |
| 141 | 143 | const d = new Date(val); |
| 142 | 144 | if (isNaN(d.valueOf())) { |
| 143 | 145 | return invalidValue(l("Date"), val, key, parent); |
| 144 | 146 | } |
| 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); | |
| 145 | 150 | return d; |
| 146 | 151 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -137,10 +137,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 137 | 137 | if (val === null) { |
| 138 | 138 | return null; |
| 139 | 139 | } |
| 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); | |
| 140 | 142 | const d = new Date(val); |
| 141 | 143 | if (isNaN(d.valueOf())) { |
| 142 | 144 | return invalidValue(l("Date"), val, key, parent); |
| 143 | 145 | } |
| 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); | |
| 144 | 149 | return d; |
| 145 | 150 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/4961a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/4a0d7.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/4a455.json
Mflowdefault / TopLevel.js+5 −0
| @@ -139,10 +139,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 139 | 139 | if (val === null) { |
| 140 | 140 | return null; |
| 141 | 141 | } |
| 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); | |
| 142 | 144 | const d = new Date(val); |
| 143 | 145 | if (isNaN(d.valueOf())) { |
| 144 | 146 | return invalidValue(l("Date"), val, key, parent); |
| 145 | 147 | } |
| 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); | |
| 146 | 151 | return d; |
| 147 | 152 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/4c547.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/4d6fb.json
Mflowdefault / TopLevel.js+5 −0
| @@ -244,10 +244,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 244 | 244 | if (val === null) { |
| 245 | 245 | return null; |
| 246 | 246 | } |
| 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); | |
| 247 | 249 | const d = new Date(val); |
| 248 | 250 | if (isNaN(d.valueOf())) { |
| 249 | 251 | return invalidValue(l("Date"), val, key, parent); |
| 250 | 252 | } |
| 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); | |
| 251 | 256 | return d; |
| 252 | 257 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -234,10 +234,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 234 | 234 | if (val === null) { |
| 235 | 235 | return null; |
| 236 | 236 | } |
| 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); | |
| 237 | 239 | const d = new Date(val); |
| 238 | 240 | if (isNaN(d.valueOf())) { |
| 239 | 241 | return invalidValue(l("Date"), val, key, parent); |
| 240 | 242 | } |
| 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); | |
| 241 | 246 | return d; |
| 242 | 247 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/4e336.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/54147.json
Mflowdefault / TopLevel.js+5 −0
| @@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 112 | 112 | if (val === null) { |
| 113 | 113 | return null; |
| 114 | 114 | } |
| 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); | |
| 115 | 117 | const d = new Date(val); |
| 116 | 118 | if (isNaN(d.valueOf())) { |
| 117 | 119 | return invalidValue(l("Date"), val, key, parent); |
| 118 | 120 | } |
| 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); | |
| 119 | 124 | return d; |
| 120 | 125 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/54d32.json
Mflowdefault / TopLevel.js+5 −0
| @@ -118,10 +118,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 118 | 118 | if (val === null) { |
| 119 | 119 | return null; |
| 120 | 120 | } |
| 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); | |
| 121 | 123 | const d = new Date(val); |
| 122 | 124 | if (isNaN(d.valueOf())) { |
| 123 | 125 | return invalidValue(l("Date"), val, key, parent); |
| 124 | 126 | } |
| 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); | |
| 125 | 130 | return d; |
| 126 | 131 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -20,12 +20,12 @@ const _Status = PropTypes.oneOf(['inactive', 'active']); | ||
| 20 | 20 | _Facets = PropTypes.shape({ |
| 21 | 21 | }); |
| 22 | 22 | _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, | |
| 24 | 24 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 25 | 25 | "person_id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 26 | 26 | "representative_id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 27 | 27 | "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, | |
| 29 | 29 | }); |
| 30 | 30 | _TopLevel = PropTypes.shape({ |
| 31 | 31 | "count": PropTypes.oneOfType([Integer]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 113 | 113 | if (val === null) { |
| 114 | 114 | return null; |
| 115 | 115 | } |
| 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); | |
| 116 | 118 | const d = new Date(val); |
| 117 | 119 | if (isNaN(d.valueOf())) { |
| 118 | 120 | return invalidValue(l("Date"), val, key, parent); |
| 119 | 121 | } |
| 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); | |
| 120 | 125 | return d; |
| 121 | 126 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/570ec.json
Mflowdefault / TopLevel.js+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 128 | 128 | if (val === null) { |
| 129 | 129 | return null; |
| 130 | 130 | } |
| 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); | |
| 131 | 133 | const d = new Date(val); |
| 132 | 134 | if (isNaN(d.valueOf())) { |
| 133 | 135 | return invalidValue(l("Date"), val, key, parent); |
| 134 | 136 | } |
| 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); | |
| 135 | 140 | return d; |
| 136 | 141 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/5dd0d.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/5eae5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 15 | 15 | |
| 16 | 16 | let _TopLevel; |
| 17 | 17 | _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, | |
| 19 | 19 | "ID": PropTypes.oneOfType([Integer]).isRequired, |
| 20 | 20 | "Sponsor": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 21 | 21 | "Title": PropTypes.oneOfType([PropTypes.string]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/5eb20.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/5f3a1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/5f7fe.json
Mflowdefault / TopLevel.js+5 −0
| @@ -284,10 +284,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 284 | 284 | if (val === null) { |
| 285 | 285 | return null; |
| 286 | 286 | } |
| 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); | |
| 287 | 289 | const d = new Date(val); |
| 288 | 290 | if (isNaN(d.valueOf())) { |
| 289 | 291 | return invalidValue(l("Date"), val, key, parent); |
| 290 | 292 | } |
| 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); | |
| 291 | 296 | return d; |
| 292 | 297 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -281,10 +281,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 281 | 281 | if (val === null) { |
| 282 | 282 | return null; |
| 283 | 283 | } |
| 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); | |
| 284 | 286 | const d = new Date(val); |
| 285 | 287 | if (isNaN(d.valueOf())) { |
| 286 | 288 | return invalidValue(l("Date"), val, key, parent); |
| 287 | 289 | } |
| 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); | |
| 288 | 293 | return d; |
| 289 | 294 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/617e8.json
Mflowdefault / TopLevel.js+5 −0
| @@ -283,10 +283,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 283 | 283 | if (val === null) { |
| 284 | 284 | return null; |
| 285 | 285 | } |
| 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); | |
| 286 | 288 | const d = new Date(val); |
| 287 | 289 | if (isNaN(d.valueOf())) { |
| 288 | 290 | return invalidValue(l("Date"), val, key, parent); |
| 289 | 291 | } |
| 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); | |
| 290 | 295 | return d; |
| 291 | 296 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -280,10 +280,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 280 | 280 | if (val === null) { |
| 281 | 281 | return null; |
| 282 | 282 | } |
| 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); | |
| 283 | 285 | const d = new Date(val); |
| 284 | 286 | if (isNaN(d.valueOf())) { |
| 285 | 287 | return invalidValue(l("Date"), val, key, parent); |
| 286 | 288 | } |
| 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); | |
| 287 | 292 | return d; |
| 288 | 293 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/61b66.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/6260a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/65dec.json
Mflowdefault / TopLevel.js+5 −0
| @@ -183,10 +183,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 183 | 183 | if (val === null) { |
| 184 | 184 | return null; |
| 185 | 185 | } |
| 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); | |
| 186 | 188 | const d = new Date(val); |
| 187 | 189 | if (isNaN(d.valueOf())) { |
| 188 | 190 | return invalidValue(l("Date"), val, key, parent); |
| 189 | 191 | } |
| 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); | |
| 190 | 195 | return d; |
| 191 | 196 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -28,7 +28,7 @@ _LegalityElement = PropTypes.shape({ | ||
| 28 | 28 | "legality": _LegalityEnum, |
| 29 | 29 | }); |
| 30 | 30 | _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, | |
| 32 | 32 | "text": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 33 | 33 | }); |
| 34 | 34 | _Card = PropTypes.shape({ |
| @@ -71,7 +71,7 @@ _TopLevel = PropTypes.shape({ | ||
| 71 | 71 | "mkm_id": PropTypes.oneOfType([Integer]).isRequired, |
| 72 | 72 | "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 73 | 73 | "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, | |
| 75 | 75 | "type": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 76 | 76 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -159,10 +159,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 159 | 159 | if (val === null) { |
| 160 | 160 | return null; |
| 161 | 161 | } |
| 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); | |
| 162 | 164 | const d = new Date(val); |
| 163 | 165 | if (isNaN(d.valueOf())) { |
| 164 | 166 | return invalidValue(l("Date"), val, key, parent); |
| 165 | 167 | } |
| 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); | |
| 166 | 171 | return d; |
| 167 | 172 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/66121.json
Mflowdefault / TopLevel.js+5 −0
| @@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 140 | 140 | if (val === null) { |
| 141 | 141 | return null; |
| 142 | 142 | } |
| 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); | |
| 143 | 145 | const d = new Date(val); |
| 144 | 146 | if (isNaN(d.valueOf())) { |
| 145 | 147 | return invalidValue(l("Date"), val, key, parent); |
| 146 | 148 | } |
| 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); | |
| 147 | 152 | return d; |
| 148 | 153 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -131,10 +131,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 131 | 131 | if (val === null) { |
| 132 | 132 | return null; |
| 133 | 133 | } |
| 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); | |
| 134 | 136 | const d = new Date(val); |
| 135 | 137 | if (isNaN(d.valueOf())) { |
| 136 | 138 | return invalidValue(l("Date"), val, key, parent); |
| 137 | 139 | } |
| 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); | |
| 138 | 143 | return d; |
| 139 | 144 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/6617c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/67c03.json
Mflowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/68c30.json
Mflowdefault / TopLevel.js+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/6c155.json
Mflowdefault / TopLevel.js+5 −0
| @@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 149 | 149 | if (val === null) { |
| 150 | 150 | return null; |
| 151 | 151 | } |
| 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); | |
| 152 | 154 | const d = new Date(val); |
| 153 | 155 | if (isNaN(d.valueOf())) { |
| 154 | 156 | return invalidValue(l("Date"), val, key, parent); |
| 155 | 157 | } |
| 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); | |
| 156 | 161 | return d; |
| 157 | 162 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -149,10 +149,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 149 | 149 | if (val === null) { |
| 150 | 150 | return null; |
| 151 | 151 | } |
| 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); | |
| 152 | 154 | const d = new Date(val); |
| 153 | 155 | if (isNaN(d.valueOf())) { |
| 154 | 156 | return invalidValue(l("Date"), val, key, parent); |
| 155 | 157 | } |
| 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); | |
| 156 | 161 | return d; |
| 157 | 162 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/6de06.json
Mflowdefault / TopLevel.js+5 −0
| @@ -244,10 +244,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 244 | 244 | if (val === null) { |
| 245 | 245 | return null; |
| 246 | 246 | } |
| 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); | |
| 247 | 249 | const d = new Date(val); |
| 248 | 250 | if (isNaN(d.valueOf())) { |
| 249 | 251 | return invalidValue(l("Date"), val, key, parent); |
| 250 | 252 | } |
| 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); | |
| 251 | 256 | return d; |
| 252 | 257 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -239,10 +239,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 239 | 239 | if (val === null) { |
| 240 | 240 | return null; |
| 241 | 241 | } |
| 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); | |
| 242 | 244 | const d = new Date(val); |
| 243 | 245 | if (isNaN(d.valueOf())) { |
| 244 | 246 | return invalidValue(l("Date"), val, key, parent); |
| 245 | 247 | } |
| 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); | |
| 246 | 251 | return d; |
| 247 | 252 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/6dec6.json
Mflowdefault / TopLevel.js+5 −0
| @@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 199 | 199 | if (val === null) { |
| 200 | 200 | return null; |
| 201 | 201 | } |
| 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); | |
| 202 | 204 | const d = new Date(val); |
| 203 | 205 | if (isNaN(d.valueOf())) { |
| 204 | 206 | return invalidValue(l("Date"), val, key, parent); |
| 205 | 207 | } |
| 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); | |
| 206 | 211 | return d; |
| 207 | 212 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -109,7 +109,7 @@ _Results = PropTypes.shape({ | ||
| 109 | 109 | }); |
| 110 | 110 | _Query = PropTypes.shape({ |
| 111 | 111 | "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, | |
| 113 | 113 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 114 | 114 | "results": _Results, |
| 115 | 115 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 196 | 196 | if (val === null) { |
| 197 | 197 | return null; |
| 198 | 198 | } |
| 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); | |
| 199 | 201 | const d = new Date(val); |
| 200 | 202 | if (isNaN(d.valueOf())) { |
| 201 | 203 | return invalidValue(l("Date"), val, key, parent); |
| 202 | 204 | } |
| 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); | |
| 203 | 208 | return d; |
| 204 | 209 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/6eb00.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/70c77.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
4 generated files · +19 −4test/inputs/json/misc/734ad.json
Mflowdefault / TopLevel.js+5 −0
| @@ -170,10 +170,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 170 | 170 | if (val === null) { |
| 171 | 171 | return null; |
| 172 | 172 | } |
| 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); | |
| 173 | 175 | const d = new Date(val); |
| 174 | 176 | if (isNaN(d.valueOf())) { |
| 175 | 177 | return invalidValue(l("Date"), val, key, parent); |
| 176 | 178 | } |
| 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); | |
| 177 | 182 | return d; |
| 178 | 183 | } |
Mjavascript-prop-typesdefault / toplevel.js+4 −4
| @@ -39,7 +39,7 @@ _Result = PropTypes.shape({ | ||
| 39 | 39 | "be_office_town": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 40 | 40 | "code_of_conduct": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 41 | 41 | "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, | |
| 43 | 43 | "entity": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 44 | 44 | "goals": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 45 | 45 | "head": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -54,7 +54,7 @@ _Result = PropTypes.shape({ | ||
| 54 | 54 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 55 | 55 | "identification_code": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 56 | 56 | "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, | |
| 58 | 58 | "legal": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 59 | 59 | "legal_status": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 60 | 60 | "main_category": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -70,12 +70,12 @@ _Result = PropTypes.shape({ | ||
| 70 | 70 | "networking": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args), |
| 71 | 71 | "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), |
| 72 | 72 | "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, | |
| 74 | 74 | "status": _Status, |
| 75 | 75 | "structure_members": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 76 | 76 | "sub_category": PropTypes.oneOfType([Integer]).isRequired, |
| 77 | 77 | "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, | |
| 79 | 79 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 80 | 80 | "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), |
| 81 | 81 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -165,10 +165,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 165 | 165 | if (val === null) { |
| 166 | 166 | return null; |
| 167 | 167 | } |
| 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); | |
| 168 | 170 | const d = new Date(val); |
| 169 | 171 | if (isNaN(d.valueOf())) { |
| 170 | 172 | return invalidValue(l("Date"), val, key, parent); |
| 171 | 173 | } |
| 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); | |
| 172 | 177 | return d; |
| 173 | 178 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/75912.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7681c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 212 | 212 | if (val === null) { |
| 213 | 213 | return null; |
| 214 | 214 | } |
| 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); | |
| 215 | 217 | const d = new Date(val); |
| 216 | 218 | if (isNaN(d.valueOf())) { |
| 217 | 219 | return invalidValue(l("Date"), val, key, parent); |
| 218 | 220 | } |
| 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); | |
| 219 | 224 | return d; |
| 220 | 225 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 204 | 204 | if (val === null) { |
| 205 | 205 | return null; |
| 206 | 206 | } |
| 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); | |
| 207 | 209 | const d = new Date(val); |
| 208 | 210 | if (isNaN(d.valueOf())) { |
| 209 | 211 | return invalidValue(l("Date"), val, key, parent); |
| 210 | 212 | } |
| 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); | |
| 211 | 216 | return d; |
| 212 | 217 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/76ae1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -280,10 +280,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 280 | 280 | if (val === null) { |
| 281 | 281 | return null; |
| 282 | 282 | } |
| 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); | |
| 283 | 285 | const d = new Date(val); |
| 284 | 286 | if (isNaN(d.valueOf())) { |
| 285 | 287 | return invalidValue(l("Date"), val, key, parent); |
| 286 | 288 | } |
| 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); | |
| 287 | 292 | return d; |
| 288 | 293 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -277,10 +277,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 277 | 277 | if (val === null) { |
| 278 | 278 | return null; |
| 279 | 279 | } |
| 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); | |
| 280 | 282 | const d = new Date(val); |
| 281 | 283 | if (isNaN(d.valueOf())) { |
| 282 | 284 | return invalidValue(l("Date"), val, key, parent); |
| 283 | 285 | } |
| 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); | |
| 284 | 289 | return d; |
| 285 | 290 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/77392.json
Mflowdefault / TopLevel.js+5 −0
| @@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 123 | 123 | if (val === null) { |
| 124 | 124 | return null; |
| 125 | 125 | } |
| 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); | |
| 126 | 128 | const d = new Date(val); |
| 127 | 129 | if (isNaN(d.valueOf())) { |
| 128 | 130 | return invalidValue(l("Date"), val, key, parent); |
| 129 | 131 | } |
| 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); | |
| 130 | 135 | return d; |
| 131 | 136 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -17,7 +17,7 @@ const _OrbitClass = PropTypes.oneOf(['Apollo', 'Amor', 'Aten', 'Comet', 'Jupiter | ||
| 17 | 17 | const _Pha = PropTypes.oneOf(['Y', 'N', 'n/a']); |
| 18 | 18 | _TopLevel = PropTypes.shape({ |
| 19 | 19 | "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, | |
| 21 | 21 | "h_mag": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 22 | 22 | "i_deg": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 23 | 23 | "moid_au": PropTypes.oneOfType([PropTypes.string]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 111 | 111 | if (val === null) { |
| 112 | 112 | return null; |
| 113 | 113 | } |
| 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); | |
| 114 | 116 | const d = new Date(val); |
| 115 | 117 | if (isNaN(d.valueOf())) { |
| 116 | 118 | return invalidValue(l("Date"), val, key, parent); |
| 117 | 119 | } |
| 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); | |
| 118 | 123 | return d; |
| 119 | 124 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7d397.json
Mflowdefault / TopLevel.js+5 −0
| @@ -171,10 +171,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 171 | 171 | if (val === null) { |
| 172 | 172 | return null; |
| 173 | 173 | } |
| 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); | |
| 174 | 176 | const d = new Date(val); |
| 175 | 177 | if (isNaN(d.valueOf())) { |
| 176 | 178 | return invalidValue(l("Date"), val, key, parent); |
| 177 | 179 | } |
| 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); | |
| 178 | 183 | return d; |
| 179 | 184 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -169,10 +169,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 169 | 169 | if (val === null) { |
| 170 | 170 | return null; |
| 171 | 171 | } |
| 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); | |
| 172 | 174 | const d = new Date(val); |
| 173 | 175 | if (isNaN(d.valueOf())) { |
| 174 | 176 | return invalidValue(l("Date"), val, key, parent); |
| 175 | 177 | } |
| 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); | |
| 176 | 181 | return d; |
| 177 | 182 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7d722.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7df41.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/7dfa6.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7eb30.json
Mflowdefault / TopLevel.js+5 −0
| @@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 140 | 140 | if (val === null) { |
| 141 | 141 | return null; |
| 142 | 142 | } |
| 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); | |
| 143 | 145 | const d = new Date(val); |
| 144 | 146 | if (isNaN(d.valueOf())) { |
| 145 | 147 | return invalidValue(l("Date"), val, key, parent); |
| 146 | 148 | } |
| 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); | |
| 147 | 152 | return d; |
| 148 | 153 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -133,10 +133,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 133 | 133 | if (val === null) { |
| 134 | 134 | return null; |
| 135 | 135 | } |
| 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); | |
| 136 | 138 | const d = new Date(val); |
| 137 | 139 | if (isNaN(d.valueOf())) { |
| 138 | 140 | return invalidValue(l("Date"), val, key, parent); |
| 139 | 141 | } |
| 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); | |
| 140 | 145 | return d; |
| 141 | 146 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/7f568.json
Mflowdefault / TopLevel.js+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -28,7 +28,7 @@ _TopLevel = PropTypes.shape({ | ||
| 28 | 28 | "comments": PropTypes.oneOfType([Integer]).isRequired, |
| 29 | 29 | "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 30 | 30 | "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, | |
| 32 | 32 | "description": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args), |
| 33 | 33 | "files": PropTypes.oneOfType([PropTypes.objectOf(_File)]).isRequired, |
| 34 | 34 | "forks_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -38,7 +38,7 @@ _TopLevel = PropTypes.shape({ | ||
| 38 | 38 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 39 | 39 | "public": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 40 | 40 | "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, | |
| 42 | 42 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 43 | 43 | "user": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 44 | 44 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/7fbfb.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/80aff.json
Mflowdefault / TopLevel.js+5 −0
| @@ -115,10 +115,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 115 | 115 | if (val === null) { |
| 116 | 116 | return null; |
| 117 | 117 | } |
| 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); | |
| 118 | 120 | const d = new Date(val); |
| 119 | 121 | if (isNaN(d.valueOf())) { |
| 120 | 122 | return invalidValue(l("Date"), val, key, parent); |
| 121 | 123 | } |
| 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); | |
| 122 | 127 | return d; |
| 123 | 128 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -19,12 +19,12 @@ let _Result; | ||
| 19 | 19 | _Facets = PropTypes.shape({ |
| 20 | 20 | }); |
| 21 | 21 | _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, | |
| 23 | 23 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 24 | 24 | "items": PropTypes.oneOfType([Integer]).isRequired, |
| 25 | 25 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 26 | 26 | "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, | |
| 28 | 28 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 29 | 29 | }); |
| 30 | 30 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 112 | 112 | if (val === null) { |
| 113 | 113 | return null; |
| 114 | 114 | } |
| 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); | |
| 115 | 117 | const d = new Date(val); |
| 116 | 118 | if (isNaN(d.valueOf())) { |
| 117 | 119 | return invalidValue(l("Date"), val, key, parent); |
| 118 | 120 | } |
| 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); | |
| 119 | 124 | return d; |
| 120 | 125 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/82509.json
Mflowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/8592b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -219,10 +219,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 219 | 219 | if (val === null) { |
| 220 | 220 | return null; |
| 221 | 221 | } |
| 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); | |
| 222 | 224 | const d = new Date(val); |
| 223 | 225 | if (isNaN(d.valueOf())) { |
| 224 | 226 | return invalidValue(l("Date"), val, key, parent); |
| 225 | 227 | } |
| 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); | |
| 226 | 231 | return d; |
| 227 | 232 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -208,10 +208,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 208 | 208 | if (val === null) { |
| 209 | 209 | return null; |
| 210 | 210 | } |
| 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); | |
| 211 | 213 | const d = new Date(val); |
| 212 | 214 | if (isNaN(d.valueOf())) { |
| 213 | 215 | return invalidValue(l("Date"), val, key, parent); |
| 214 | 216 | } |
| 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); | |
| 215 | 220 | return d; |
| 216 | 221 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/88130.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/8a62c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/908db.json
Mflowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/9617f.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/96f7c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/9847b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/9929c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/996bd.json
Mflowdefault / TopLevel.js+5 −0
| @@ -140,10 +140,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 140 | 140 | if (val === null) { |
| 141 | 141 | return null; |
| 142 | 142 | } |
| 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); | |
| 143 | 145 | const d = new Date(val); |
| 144 | 146 | if (isNaN(d.valueOf())) { |
| 145 | 147 | return invalidValue(l("Date"), val, key, parent); |
| 146 | 148 | } |
| 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); | |
| 147 | 152 | return d; |
| 148 | 153 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/9a503.json
Mflowdefault / TopLevel.js+5 −0
| @@ -126,10 +126,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 126 | 126 | if (val === null) { |
| 127 | 127 | return null; |
| 128 | 128 | } |
| 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); | |
| 129 | 131 | const d = new Date(val); |
| 130 | 132 | if (isNaN(d.valueOf())) { |
| 131 | 133 | return invalidValue(l("Date"), val, key, parent); |
| 132 | 134 | } |
| 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); | |
| 133 | 138 | return d; |
| 134 | 139 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 123 | 123 | if (val === null) { |
| 124 | 124 | return null; |
| 125 | 125 | } |
| 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); | |
| 126 | 128 | const d = new Date(val); |
| 127 | 129 | if (isNaN(d.valueOf())) { |
| 128 | 130 | return invalidValue(l("Date"), val, key, parent); |
| 129 | 131 | } |
| 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); | |
| 130 | 135 | return d; |
| 131 | 136 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/9ac3b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -21,7 +21,7 @@ const _Title = PropTypes.oneOf(['Mr', 'Ms']); | ||
| 21 | 21 | _Facets = PropTypes.shape({ |
| 22 | 22 | }); |
| 23 | 23 | _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, | |
| 25 | 25 | "entity": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 26 | 26 | "first_name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 27 | 27 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -30,7 +30,7 @@ _Result = PropTypes.shape({ | ||
| 30 | 30 | "position": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string])])(props, name, ...args), |
| 31 | 31 | "status": _Status, |
| 32 | 32 | "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, | |
| 34 | 34 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 35 | 35 | }); |
| 36 | 36 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/9eed5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -123,10 +123,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 123 | 123 | if (val === null) { |
| 124 | 124 | return null; |
| 125 | 125 | } |
| 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); | |
| 126 | 128 | const d = new Date(val); |
| 127 | 129 | if (isNaN(d.valueOf())) { |
| 128 | 130 | return invalidValue(l("Date"), val, key, parent); |
| 129 | 131 | } |
| 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); | |
| 130 | 135 | return d; |
| 131 | 136 | } |
Test case
4 generated files · +19 −4test/inputs/json/misc/a0496.json
Mflowdefault / TopLevel.js+5 −0
| @@ -117,10 +117,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 117 | 117 | if (val === null) { |
| 118 | 118 | return null; |
| 119 | 119 | } |
| 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); | |
| 120 | 122 | const d = new Date(val); |
| 121 | 123 | if (isNaN(d.valueOf())) { |
| 122 | 124 | return invalidValue(l("Date"), val, key, parent); |
| 123 | 125 | } |
| 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); | |
| 124 | 129 | return d; |
| 125 | 130 | } |
Mjavascript-prop-typesdefault / toplevel.js+4 −4
| @@ -20,20 +20,20 @@ _Errors = PropTypes.shape({ | ||
| 20 | 20 | _TopLevel = PropTypes.shape({ |
| 21 | 21 | "code": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 22 | 22 | "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, | |
| 24 | 24 | "description": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 25 | 25 | "display_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 26 | 26 | "errors": _Errors, |
| 27 | 27 | "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, | |
| 29 | 29 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 30 | 30 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 31 | 31 | "premium": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 32 | 32 | "source_code": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 33 | 33 | "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, | |
| 35 | 35 | "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, | |
| 37 | 37 | "urlize_name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 38 | 38 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 114 | 114 | if (val === null) { |
| 115 | 115 | return null; |
| 116 | 116 | } |
| 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); | |
| 117 | 119 | const d = new Date(val); |
| 118 | 120 | if (isNaN(d.valueOf())) { |
| 119 | 121 | return invalidValue(l("Date"), val, key, parent); |
| 120 | 122 | } |
| 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); | |
| 121 | 126 | return d; |
| 122 | 127 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/a1eca.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/a3d8c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 212 | 212 | if (val === null) { |
| 213 | 213 | return null; |
| 214 | 214 | } |
| 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); | |
| 215 | 217 | const d = new Date(val); |
| 216 | 218 | if (isNaN(d.valueOf())) { |
| 217 | 219 | return invalidValue(l("Date"), val, key, parent); |
| 218 | 220 | } |
| 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); | |
| 219 | 224 | return d; |
| 220 | 225 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 206 | 206 | if (val === null) { |
| 207 | 207 | return null; |
| 208 | 208 | } |
| 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); | |
| 209 | 211 | const d = new Date(val); |
| 210 | 212 | if (isNaN(d.valueOf())) { |
| 211 | 213 | return invalidValue(l("Date"), val, key, parent); |
| 212 | 214 | } |
| 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); | |
| 213 | 218 | return d; |
| 214 | 219 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/a45b0.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/a71df.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/a9691.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ab0d1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/abb4b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/ac944.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ad8be.json
Mflowdefault / TopLevel.js+5 −0
| @@ -163,10 +163,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 163 | 163 | if (val === null) { |
| 164 | 164 | return null; |
| 165 | 165 | } |
| 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); | |
| 166 | 168 | const d = new Date(val); |
| 167 | 169 | if (isNaN(d.valueOf())) { |
| 168 | 170 | return invalidValue(l("Date"), val, key, parent); |
| 169 | 171 | } |
| 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); | |
| 170 | 175 | return d; |
| 171 | 176 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ae7f0.json
Mflowdefault / TopLevel.js+5 −0
| @@ -193,10 +193,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 193 | 193 | if (val === null) { |
| 194 | 194 | return null; |
| 195 | 195 | } |
| 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); | |
| 196 | 198 | const d = new Date(val); |
| 197 | 199 | if (isNaN(d.valueOf())) { |
| 198 | 200 | return invalidValue(l("Date"), val, key, parent); |
| 199 | 201 | } |
| 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); | |
| 200 | 205 | return d; |
| 201 | 206 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 184 | 184 | if (val === null) { |
| 185 | 185 | return null; |
| 186 | 186 | } |
| 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); | |
| 187 | 189 | const d = new Date(val); |
| 188 | 190 | if (isNaN(d.valueOf())) { |
| 189 | 191 | return invalidValue(l("Date"), val, key, parent); |
| 190 | 192 | } |
| 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); | |
| 191 | 196 | return d; |
| 192 | 197 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ae9ca.json
Mflowdefault / TopLevel.js+5 −0
| @@ -142,10 +142,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 142 | 142 | if (val === null) { |
| 143 | 143 | return null; |
| 144 | 144 | } |
| 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); | |
| 145 | 147 | const d = new Date(val); |
| 146 | 148 | if (isNaN(d.valueOf())) { |
| 147 | 149 | return invalidValue(l("Date"), val, key, parent); |
| 148 | 150 | } |
| 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); | |
| 149 | 154 | return d; |
| 150 | 155 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -132,10 +132,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 132 | 132 | if (val === null) { |
| 133 | 133 | return null; |
| 134 | 134 | } |
| 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); | |
| 135 | 137 | const d = new Date(val); |
| 136 | 138 | if (isNaN(d.valueOf())) { |
| 137 | 139 | return invalidValue(l("Date"), val, key, parent); |
| 138 | 140 | } |
| 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); | |
| 139 | 144 | return d; |
| 140 | 145 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/af2d1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 204 | 204 | if (val === null) { |
| 205 | 205 | return null; |
| 206 | 206 | } |
| 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); | |
| 207 | 209 | const d = new Date(val); |
| 208 | 210 | if (isNaN(d.valueOf())) { |
| 209 | 211 | return invalidValue(l("Date"), val, key, parent); |
| 210 | 212 | } |
| 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); | |
| 211 | 216 | return d; |
| 212 | 217 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 182 | 182 | if (val === null) { |
| 183 | 183 | return null; |
| 184 | 184 | } |
| 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); | |
| 185 | 187 | const d = new Date(val); |
| 186 | 188 | if (isNaN(d.valueOf())) { |
| 187 | 189 | return invalidValue(l("Date"), val, key, parent); |
| 188 | 190 | } |
| 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); | |
| 189 | 194 | return d; |
| 190 | 195 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/b4865.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -33,7 +33,7 @@ _TopLevel = PropTypes.shape({ | ||
| 33 | 33 | "recclass": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 34 | 34 | "reclat": PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.string]), |
| 35 | 35 | "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])]), | |
| 37 | 37 | }); |
| 38 | 38 | |
| 39 | 39 | export const TopLevel = PropTypes.arrayOf(_TopLevel); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/b6f2c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/b6fe5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/b9f64.json
Mflowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/bb1ec.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/be234.json
Mflowdefault / TopLevel.js+5 −0
| @@ -258,10 +258,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 258 | 258 | if (val === null) { |
| 259 | 259 | return null; |
| 260 | 260 | } |
| 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); | |
| 261 | 263 | const d = new Date(val); |
| 262 | 264 | if (isNaN(d.valueOf())) { |
| 263 | 265 | return invalidValue(l("Date"), val, key, parent); |
| 264 | 266 | } |
| 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); | |
| 265 | 270 | return d; |
| 266 | 271 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -245,10 +245,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 245 | 245 | if (val === null) { |
| 246 | 246 | return null; |
| 247 | 247 | } |
| 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); | |
| 248 | 250 | const d = new Date(val); |
| 249 | 251 | if (isNaN(d.valueOf())) { |
| 250 | 252 | return invalidValue(l("Date"), val, key, parent); |
| 251 | 253 | } |
| 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); | |
| 252 | 257 | return d; |
| 253 | 258 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/c0356.json
Mflowdefault / TopLevel.js+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/c0a3a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/c3303.json
Mflowdefault / TopLevel.js+5 −0
| @@ -209,10 +209,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 209 | 209 | if (val === null) { |
| 210 | 210 | return null; |
| 211 | 211 | } |
| 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); | |
| 212 | 214 | const d = new Date(val); |
| 213 | 215 | if (isNaN(d.valueOf())) { |
| 214 | 216 | return invalidValue(l("Date"), val, key, parent); |
| 215 | 217 | } |
| 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); | |
| 216 | 221 | return d; |
| 217 | 222 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -203,10 +203,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 203 | 203 | if (val === null) { |
| 204 | 204 | return null; |
| 205 | 205 | } |
| 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); | |
| 206 | 208 | const d = new Date(val); |
| 207 | 209 | if (isNaN(d.valueOf())) { |
| 208 | 210 | return invalidValue(l("Date"), val, key, parent); |
| 209 | 211 | } |
| 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); | |
| 210 | 215 | return d; |
| 211 | 216 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/c6cfd.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/c8c7e.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/cb0cc.json
Mflowdefault / TopLevel.js+5 −0
| @@ -119,10 +119,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 119 | 119 | if (val === null) { |
| 120 | 120 | return null; |
| 121 | 121 | } |
| 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); | |
| 122 | 124 | const d = new Date(val); |
| 123 | 125 | if (isNaN(d.valueOf())) { |
| 124 | 126 | return invalidValue(l("Date"), val, key, parent); |
| 125 | 127 | } |
| 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); | |
| 126 | 131 | return d; |
| 127 | 132 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 113 | 113 | if (val === null) { |
| 114 | 114 | return null; |
| 115 | 115 | } |
| 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); | |
| 116 | 118 | const d = new Date(val); |
| 117 | 119 | if (isNaN(d.valueOf())) { |
| 118 | 120 | return invalidValue(l("Date"), val, key, parent); |
| 119 | 121 | } |
| 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); | |
| 120 | 125 | return d; |
| 121 | 126 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/cb81e.json
Mflowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ccd18.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/cd238.json
Mflowdefault / TopLevel.js+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -129,10 +129,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 129 | 129 | if (val === null) { |
| 130 | 130 | return null; |
| 131 | 131 | } |
| 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); | |
| 132 | 134 | const d = new Date(val); |
| 133 | 135 | if (isNaN(d.valueOf())) { |
| 134 | 136 | return invalidValue(l("Date"), val, key, parent); |
| 135 | 137 | } |
| 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); | |
| 136 | 141 | return d; |
| 137 | 142 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/cd463.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/cda6c.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/cf0d8.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/cfbce.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _TopLevel = PropTypes.shape({ |
| 17 | 17 | "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, | |
| 19 | 19 | "rates": PropTypes.oneOfType([PropTypes.objectOf(PropTypes.number)]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/d0908.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -16,7 +16,7 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | let _TotalPopulation; |
| 18 | 18 | _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, | |
| 20 | 20 | "population": PropTypes.oneOfType([Integer]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/d23d5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -114,10 +114,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 114 | 114 | if (val === null) { |
| 115 | 115 | return null; |
| 116 | 116 | } |
| 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); | |
| 117 | 119 | const d = new Date(val); |
| 118 | 120 | if (isNaN(d.valueOf())) { |
| 119 | 121 | return invalidValue(l("Date"), val, key, parent); |
| 120 | 122 | } |
| 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); | |
| 121 | 126 | return d; |
| 122 | 127 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -20,10 +20,10 @@ _Facets = PropTypes.shape({ | ||
| 20 | 20 | }); |
| 21 | 21 | _Result = PropTypes.shape({ |
| 22 | 22 | "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, | |
| 24 | 24 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 25 | 25 | "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, | |
| 27 | 27 | "uri": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 28 | 28 | }); |
| 29 | 29 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 111 | 111 | if (val === null) { |
| 112 | 112 | return null; |
| 113 | 113 | } |
| 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); | |
| 114 | 116 | const d = new Date(val); |
| 115 | 117 | if (isNaN(d.valueOf())) { |
| 116 | 118 | return invalidValue(l("Date"), val, key, parent); |
| 117 | 119 | } |
| 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); | |
| 118 | 123 | return d; |
| 119 | 124 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/dbfb3.json
Mflowdefault / TopLevel.js+5 −0
| @@ -198,10 +198,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 198 | 198 | if (val === null) { |
| 199 | 199 | return null; |
| 200 | 200 | } |
| 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); | |
| 201 | 203 | const d = new Date(val); |
| 202 | 204 | if (isNaN(d.valueOf())) { |
| 203 | 205 | return invalidValue(l("Date"), val, key, parent); |
| 204 | 206 | } |
| 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); | |
| 205 | 210 | return d; |
| 206 | 211 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -109,7 +109,7 @@ _Results = PropTypes.shape({ | ||
| 109 | 109 | }); |
| 110 | 110 | _Query = PropTypes.shape({ |
| 111 | 111 | "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, | |
| 113 | 113 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 114 | 114 | "results": _Results, |
| 115 | 115 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 196 | 196 | if (val === null) { |
| 197 | 197 | return null; |
| 198 | 198 | } |
| 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); | |
| 199 | 201 | const d = new Date(val); |
| 200 | 202 | if (isNaN(d.valueOf())) { |
| 201 | 203 | return invalidValue(l("Date"), val, key, parent); |
| 202 | 204 | } |
| 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); | |
| 203 | 208 | return d; |
| 204 | 209 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/dc44f.json
Mflowdefault / TopLevel.js+5 −0
| @@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 222 | 222 | if (val === null) { |
| 223 | 223 | return null; |
| 224 | 224 | } |
| 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); | |
| 225 | 227 | const d = new Date(val); |
| 226 | 228 | if (isNaN(d.valueOf())) { |
| 227 | 229 | return invalidValue(l("Date"), val, key, parent); |
| 228 | 230 | } |
| 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); | |
| 229 | 234 | return d; |
| 230 | 235 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -31,7 +31,7 @@ _LegalityElement = PropTypes.shape({ | ||
| 31 | 31 | "legality": _LegalityEnum, |
| 32 | 32 | }); |
| 33 | 33 | _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, | |
| 35 | 35 | "text": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 36 | 36 | }); |
| 37 | 37 | _Card = PropTypes.shape({ |
| @@ -73,7 +73,7 @@ _TopLevel = PropTypes.shape({ | ||
| 73 | 73 | "mkm_id": PropTypes.oneOfType([Integer]).isRequired, |
| 74 | 74 | "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 75 | 75 | "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, | |
| 77 | 77 | "type": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 78 | 78 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 164 | 164 | if (val === null) { |
| 165 | 165 | return null; |
| 166 | 166 | } |
| 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); | |
| 167 | 169 | const d = new Date(val); |
| 168 | 170 | if (isNaN(d.valueOf())) { |
| 169 | 171 | return invalidValue(l("Date"), val, key, parent); |
| 170 | 172 | } |
| 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); | |
| 171 | 176 | return d; |
| 172 | 177 | } |
Test case
4 generated files · +17 −2test/inputs/json/misc/dd1ce.json
Mflowdefault / TopLevel.js+5 −0
| @@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 222 | 222 | if (val === null) { |
| 223 | 223 | return null; |
| 224 | 224 | } |
| 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); | |
| 225 | 227 | const d = new Date(val); |
| 226 | 228 | if (isNaN(d.valueOf())) { |
| 227 | 229 | return invalidValue(l("Date"), val, key, parent); |
| 228 | 230 | } |
| 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); | |
| 229 | 234 | return d; |
| 230 | 235 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -31,7 +31,7 @@ _LegalityElement = PropTypes.shape({ | ||
| 31 | 31 | "legality": _LegalityEnum, |
| 32 | 32 | }); |
| 33 | 33 | _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, | |
| 35 | 35 | "text": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 36 | 36 | }); |
| 37 | 37 | _Card = PropTypes.shape({ |
| @@ -73,7 +73,7 @@ _TopLevel = PropTypes.shape({ | ||
| 73 | 73 | "mkm_id": PropTypes.oneOfType([Integer]).isRequired, |
| 74 | 74 | "mkm_name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 75 | 75 | "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, | |
| 77 | 77 | "type": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 78 | 78 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -164,10 +164,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 164 | 164 | if (val === null) { |
| 165 | 165 | return null; |
| 166 | 166 | } |
| 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); | |
| 167 | 169 | const d = new Date(val); |
| 168 | 170 | if (isNaN(d.valueOf())) { |
| 169 | 171 | return invalidValue(l("Date"), val, key, parent); |
| 170 | 172 | } |
| 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); | |
| 171 | 176 | return d; |
| 172 | 177 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/dec3a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -157,10 +157,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 157 | 157 | if (val === null) { |
| 158 | 158 | return null; |
| 159 | 159 | } |
| 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); | |
| 160 | 162 | const d = new Date(val); |
| 161 | 163 | if (isNaN(d.valueOf())) { |
| 162 | 164 | return invalidValue(l("Date"), val, key, parent); |
| 163 | 165 | } |
| 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); | |
| 164 | 169 | return d; |
| 165 | 170 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -157,10 +157,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 157 | 157 | if (val === null) { |
| 158 | 158 | return null; |
| 159 | 159 | } |
| 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); | |
| 160 | 162 | const d = new Date(val); |
| 161 | 163 | if (isNaN(d.valueOf())) { |
| 162 | 164 | return invalidValue(l("Date"), val, key, parent); |
| 163 | 165 | } |
| 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); | |
| 164 | 169 | return d; |
| 165 | 170 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/df957.json
Mflowdefault / TopLevel.js+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -108,7 +108,7 @@ _Results = PropTypes.shape({ | ||
| 108 | 108 | }); |
| 109 | 109 | _Query = PropTypes.shape({ |
| 110 | 110 | "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, | |
| 112 | 112 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 113 | 113 | "results": _Results, |
| 114 | 114 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -194,10 +194,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 194 | 194 | if (val === null) { |
| 195 | 195 | return null; |
| 196 | 196 | } |
| 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); | |
| 197 | 199 | const d = new Date(val); |
| 198 | 200 | if (isNaN(d.valueOf())) { |
| 199 | 201 | return invalidValue(l("Date"), val, key, parent); |
| 200 | 202 | } |
| 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); | |
| 201 | 206 | return d; |
| 202 | 207 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e0ac7.json
Mflowdefault / TopLevel.js+5 −0
| @@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 206 | 206 | if (val === null) { |
| 207 | 207 | return null; |
| 208 | 208 | } |
| 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); | |
| 209 | 211 | const d = new Date(val); |
| 210 | 212 | if (isNaN(d.valueOf())) { |
| 211 | 213 | return invalidValue(l("Date"), val, key, parent); |
| 212 | 214 | } |
| 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); | |
| 213 | 218 | return d; |
| 214 | 219 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -202,10 +202,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 202 | 202 | if (val === null) { |
| 203 | 203 | return null; |
| 204 | 204 | } |
| 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); | |
| 205 | 207 | const d = new Date(val); |
| 206 | 208 | if (isNaN(d.valueOf())) { |
| 207 | 209 | return invalidValue(l("Date"), val, key, parent); |
| 208 | 210 | } |
| 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); | |
| 209 | 214 | return d; |
| 210 | 215 | } |
Test case
4 generated files · +16 −1test/inputs/json/misc/e2915.json
Mflowdefault / TopLevel.js+5 −0
| @@ -197,10 +197,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 197 | 197 | if (val === null) { |
| 198 | 198 | return null; |
| 199 | 199 | } |
| 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); | |
| 200 | 202 | const d = new Date(val); |
| 201 | 203 | if (isNaN(d.valueOf())) { |
| 202 | 204 | return invalidValue(l("Date"), val, key, parent); |
| 203 | 205 | } |
| 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); | |
| 204 | 209 | return d; |
| 205 | 210 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -109,7 +109,7 @@ _Results = PropTypes.shape({ | ||
| 109 | 109 | }); |
| 110 | 110 | _Query = PropTypes.shape({ |
| 111 | 111 | "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, | |
| 113 | 113 | "lang": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 114 | 114 | "results": _Results, |
| 115 | 115 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -196,10 +196,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 196 | 196 | if (val === null) { |
| 197 | 197 | return null; |
| 198 | 198 | } |
| 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); | |
| 199 | 201 | const d = new Date(val); |
| 200 | 202 | if (isNaN(d.valueOf())) { |
| 201 | 203 | return invalidValue(l("Date"), val, key, parent); |
| 202 | 204 | } |
| 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); | |
| 203 | 208 | return d; |
| 204 | 209 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e2a58.json
Mflowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e324e.json
Mflowdefault / TopLevel.js+5 −0
| @@ -168,10 +168,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 168 | 168 | if (val === null) { |
| 169 | 169 | return null; |
| 170 | 170 | } |
| 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); | |
| 171 | 173 | const d = new Date(val); |
| 172 | 174 | if (isNaN(d.valueOf())) { |
| 173 | 175 | return invalidValue(l("Date"), val, key, parent); |
| 174 | 176 | } |
| 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); | |
| 175 | 180 | return d; |
| 176 | 181 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -167,10 +167,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 167 | 167 | if (val === null) { |
| 168 | 168 | return null; |
| 169 | 169 | } |
| 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); | |
| 170 | 172 | const d = new Date(val); |
| 171 | 173 | if (isNaN(d.valueOf())) { |
| 172 | 174 | return invalidValue(l("Date"), val, key, parent); |
| 173 | 175 | } |
| 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); | |
| 174 | 179 | return d; |
| 175 | 180 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e53b5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -120,10 +120,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 120 | 120 | if (val === null) { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 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); | |
| 123 | 125 | const d = new Date(val); |
| 124 | 126 | if (isNaN(d.valueOf())) { |
| 125 | 127 | return invalidValue(l("Date"), val, key, parent); |
| 126 | 128 | } |
| 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); | |
| 127 | 132 | return d; |
| 128 | 133 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e64a0.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e8a0b.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/e8b04.json
Mflowdefault / TopLevel.js+5 −0
| @@ -366,10 +366,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 366 | 366 | if (val === null) { |
| 367 | 367 | return null; |
| 368 | 368 | } |
| 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); | |
| 369 | 371 | const d = new Date(val); |
| 370 | 372 | if (isNaN(d.valueOf())) { |
| 371 | 373 | return invalidValue(l("Date"), val, key, parent); |
| 372 | 374 | } |
| 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); | |
| 373 | 378 | return d; |
| 374 | 379 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -327,10 +327,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 327 | 327 | if (val === null) { |
| 328 | 328 | return null; |
| 329 | 329 | } |
| 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); | |
| 330 | 332 | const d = new Date(val); |
| 331 | 333 | if (isNaN(d.valueOf())) { |
| 332 | 334 | return invalidValue(l("Date"), val, key, parent); |
| 333 | 335 | } |
| 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); | |
| 334 | 339 | return d; |
| 335 | 340 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/ed095.json
Mflowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f22f5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -190,10 +190,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 190 | 190 | if (val === null) { |
| 191 | 191 | return null; |
| 192 | 192 | } |
| 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); | |
| 193 | 195 | const d = new Date(val); |
| 194 | 196 | if (isNaN(d.valueOf())) { |
| 195 | 197 | return invalidValue(l("Date"), val, key, parent); |
| 196 | 198 | } |
| 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); | |
| 197 | 202 | return d; |
| 198 | 203 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 182 | 182 | if (val === null) { |
| 183 | 183 | return null; |
| 184 | 184 | } |
| 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); | |
| 185 | 187 | const d = new Date(val); |
| 186 | 188 | if (isNaN(d.valueOf())) { |
| 187 | 189 | return invalidValue(l("Date"), val, key, parent); |
| 188 | 190 | } |
| 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); | |
| 189 | 194 | return d; |
| 190 | 195 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f3139.json
Mflowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f3edf.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f466a.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f6a65.json
Mflowdefault / TopLevel.js+5 −0
| @@ -213,10 +213,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 213 | 213 | if (val === null) { |
| 214 | 214 | return null; |
| 215 | 215 | } |
| 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); | |
| 216 | 218 | const d = new Date(val); |
| 217 | 219 | if (isNaN(d.valueOf())) { |
| 218 | 220 | return invalidValue(l("Date"), val, key, parent); |
| 219 | 221 | } |
| 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); | |
| 220 | 225 | return d; |
| 221 | 226 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -204,10 +204,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 204 | 204 | if (val === null) { |
| 205 | 205 | return null; |
| 206 | 206 | } |
| 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); | |
| 207 | 209 | const d = new Date(val); |
| 208 | 210 | if (isNaN(d.valueOf())) { |
| 209 | 211 | return invalidValue(l("Date"), val, key, parent); |
| 210 | 212 | } |
| 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); | |
| 211 | 216 | return d; |
| 212 | 217 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f74d5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -212,10 +212,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 212 | 212 | if (val === null) { |
| 213 | 213 | return null; |
| 214 | 214 | } |
| 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); | |
| 215 | 217 | const d = new Date(val); |
| 216 | 218 | if (isNaN(d.valueOf())) { |
| 217 | 219 | return invalidValue(l("Date"), val, key, parent); |
| 218 | 220 | } |
| 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); | |
| 219 | 224 | return d; |
| 220 | 225 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -206,10 +206,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 206 | 206 | if (val === null) { |
| 207 | 207 | return null; |
| 208 | 208 | } |
| 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); | |
| 209 | 211 | const d = new Date(val); |
| 210 | 212 | if (isNaN(d.valueOf())) { |
| 211 | 213 | return invalidValue(l("Date"), val, key, parent); |
| 212 | 214 | } |
| 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); | |
| 213 | 218 | return d; |
| 214 | 219 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f82d9.json
Mflowdefault / TopLevel.js+5 −0
| @@ -181,10 +181,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 181 | 181 | if (val === null) { |
| 182 | 182 | return null; |
| 183 | 183 | } |
| 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); | |
| 184 | 186 | const d = new Date(val); |
| 185 | 187 | if (isNaN(d.valueOf())) { |
| 186 | 188 | return invalidValue(l("Date"), val, key, parent); |
| 187 | 189 | } |
| 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); | |
| 188 | 193 | return d; |
| 189 | 194 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -180,10 +180,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 180 | 180 | if (val === null) { |
| 181 | 181 | return null; |
| 182 | 182 | } |
| 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); | |
| 183 | 185 | const d = new Date(val); |
| 184 | 186 | if (isNaN(d.valueOf())) { |
| 185 | 187 | return invalidValue(l("Date"), val, key, parent); |
| 186 | 188 | } |
| 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); | |
| 187 | 192 | return d; |
| 188 | 193 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/f974d.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/faff5.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/fcca3.json
Mflowdefault / TopLevel.js+5 −0
| @@ -309,10 +309,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 309 | 309 | if (val === null) { |
| 310 | 310 | return null; |
| 311 | 311 | } |
| 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); | |
| 312 | 314 | const d = new Date(val); |
| 313 | 315 | if (isNaN(d.valueOf())) { |
| 314 | 316 | return invalidValue(l("Date"), val, key, parent); |
| 315 | 317 | } |
| 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); | |
| 316 | 321 | return d; |
| 317 | 322 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -306,10 +306,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 306 | 306 | if (val === null) { |
| 307 | 307 | return null; |
| 308 | 308 | } |
| 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); | |
| 309 | 311 | const d = new Date(val); |
| 310 | 312 | if (isNaN(d.valueOf())) { |
| 311 | 313 | return invalidValue(l("Date"), val, key, parent); |
| 312 | 314 | } |
| 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); | |
| 313 | 318 | return d; |
| 314 | 319 | } |
Test case
3 generated files · +15 −0test/inputs/json/misc/fd329.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/blns-object.json
Mflowdefault / TopLevel.js+5 −0
| @@ -691,10 +691,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 691 | 691 | if (val === null) { |
| 692 | 692 | return null; |
| 693 | 693 | } |
| 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); | |
| 694 | 696 | const d = new Date(val); |
| 695 | 697 | if (isNaN(d.valueOf())) { |
| 696 | 698 | return invalidValue(l("Date"), val, key, parent); |
| 697 | 699 | } |
| 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); | |
| 698 | 703 | return d; |
| 699 | 704 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -691,10 +691,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 691 | 691 | if (val === null) { |
| 692 | 692 | return null; |
| 693 | 693 | } |
| 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); | |
| 694 | 696 | const d = new Date(val); |
| 695 | 697 | if (isNaN(d.valueOf())) { |
| 696 | 698 | return invalidValue(l("Date"), val, key, parent); |
| 697 | 699 | } |
| 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); | |
| 698 | 703 | return d; |
| 699 | 704 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug2037.json
Mflowdefault / TopLevel.js+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug2521.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +17 −2test/inputs/json/priority/bug2590.json
Mflowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -15,8 +15,8 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | let _Invoice; |
| 17 | 17 | _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), | |
| 20 | 20 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 21 | 21 | }); |
| 22 | 22 | _TopLevel = PropTypes.shape({ |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
4 generated files · +17 −2test/inputs/json/priority/bug2663.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascript-prop-typesdefault / toplevel.js+2 −2
| @@ -14,8 +14,8 @@ import PropTypes from "prop-types"; | ||
| 14 | 14 | |
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _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, | |
| 19 | 19 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 20 | 20 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug2793.json
Mflowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug427.json
Mflowdefault / TopLevel.js+5 −0
| @@ -707,10 +707,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 707 | 707 | if (val === null) { |
| 708 | 708 | return null; |
| 709 | 709 | } |
| 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); | |
| 710 | 712 | const d = new Date(val); |
| 711 | 713 | if (isNaN(d.valueOf())) { |
| 712 | 714 | return invalidValue(l("Date"), val, key, parent); |
| 713 | 715 | } |
| 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); | |
| 714 | 719 | return d; |
| 715 | 720 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -653,10 +653,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 653 | 653 | if (val === null) { |
| 654 | 654 | return null; |
| 655 | 655 | } |
| 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); | |
| 656 | 658 | const d = new Date(val); |
| 657 | 659 | if (isNaN(d.valueOf())) { |
| 658 | 660 | return invalidValue(l("Date"), val, key, parent); |
| 659 | 661 | } |
| 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); | |
| 660 | 665 | return d; |
| 661 | 666 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug790.json
Mflowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug855-short.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/bug863.json
Mflowdefault / TopLevel.js+5 −0
| @@ -182,10 +182,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 182 | 182 | if (val === null) { |
| 183 | 183 | return null; |
| 184 | 184 | } |
| 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); | |
| 185 | 187 | const d = new Date(val); |
| 186 | 188 | if (isNaN(d.valueOf())) { |
| 187 | 189 | return invalidValue(l("Date"), val, key, parent); |
| 188 | 190 | } |
| 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); | |
| 189 | 194 | return d; |
| 190 | 195 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 166 | 166 | if (val === null) { |
| 167 | 167 | return null; |
| 168 | 168 | } |
| 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); | |
| 169 | 171 | const d = new Date(val); |
| 170 | 172 | if (isNaN(d.valueOf())) { |
| 171 | 173 | return invalidValue(l("Date"), val, key, parent); |
| 172 | 174 | } |
| 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); | |
| 173 | 178 | return d; |
| 174 | 179 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/coin-pairs.json
Mflowdefault / TopLevel.js+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Test case
20 generated files · +100 −0test/inputs/json/priority/combinations1.json
Mflowdefault / TopLevel.js+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
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 | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
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 | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
| @@ -592,10 +592,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 592 | 592 | if (val === null) { |
| 593 | 593 | return null; |
| 594 | 594 | } |
| 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); | |
| 595 | 597 | const d = new Date(val); |
| 596 | 598 | if (isNaN(d.valueOf())) { |
| 597 | 599 | return invalidValue(l("Date"), val, key, parent); |
| 598 | 600 | } |
| 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); | |
| 599 | 604 | return d; |
| 600 | 605 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
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 | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
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 | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
| @@ -488,10 +488,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
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 | ||
| 488 | 488 | if (val === null) { |
| 489 | 489 | return null; |
| 490 | 490 | } |
| 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); | |
| 491 | 493 | const d = new Date(val); |
| 492 | 494 | if (isNaN(d.valueOf())) { |
| 493 | 495 | return invalidValue(l("Date"), val, key, parent); |
| 494 | 496 | } |
| 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); | |
| 495 | 500 | return d; |
| 496 | 501 | } |
Test case
20 generated files · +100 −0test/inputs/json/priority/combinations2.json
Mflowdefault / TopLevel.js+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
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 | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
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 | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
| @@ -520,10 +520,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 520 | 520 | if (val === null) { |
| 521 | 521 | return null; |
| 522 | 522 | } |
| 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); | |
| 523 | 525 | const d = new Date(val); |
| 524 | 526 | if (isNaN(d.valueOf())) { |
| 525 | 527 | return invalidValue(l("Date"), val, key, parent); |
| 526 | 528 | } |
| 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); | |
| 527 | 532 | return d; |
| 528 | 533 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
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 | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
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 | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
| @@ -440,10 +440,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
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 | ||
| 440 | 440 | if (val === null) { |
| 441 | 441 | return null; |
| 442 | 442 | } |
| 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); | |
| 443 | 445 | const d = new Date(val); |
| 444 | 446 | if (isNaN(d.valueOf())) { |
| 445 | 447 | return invalidValue(l("Date"), val, key, parent); |
| 446 | 448 | } |
| 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); | |
| 447 | 452 | return d; |
| 448 | 453 | } |
Test case
20 generated files · +100 −0test/inputs/json/priority/combinations3.json
Mflowdefault / TopLevel.js+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
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 | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
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 | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
| @@ -656,10 +656,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 656 | 656 | if (val === null) { |
| 657 | 657 | return null; |
| 658 | 658 | } |
| 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); | |
| 659 | 661 | const d = new Date(val); |
| 660 | 662 | if (isNaN(d.valueOf())) { |
| 661 | 663 | return invalidValue(l("Date"), val, key, parent); |
| 662 | 664 | } |
| 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); | |
| 663 | 668 | return d; |
| 664 | 669 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
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 | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
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 | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
| @@ -544,10 +544,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
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 | ||
| 544 | 544 | if (val === null) { |
| 545 | 545 | return null; |
| 546 | 546 | } |
| 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); | |
| 547 | 549 | const d = new Date(val); |
| 548 | 550 | if (isNaN(d.valueOf())) { |
| 549 | 551 | return invalidValue(l("Date"), val, key, parent); |
| 550 | 552 | } |
| 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); | |
| 551 | 556 | return d; |
| 552 | 557 | } |
Test case
20 generated files · +100 −0test/inputs/json/priority/combinations4.json
Mflowdefault / TopLevel.js+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
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 | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mflowprefer-unions-false--a5053c0a486d / TopLevel.js+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mflowprefer-unknown-false--f1ab9e45d823 / TopLevel.js+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
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 | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mjavascriptconverters-top-level--67aa452ed509 / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptraw-type-any--474b307c39db / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptruntime-typecheck-ignore-unknown-properties-true--d792c40f022e / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptacronym-style-pascal--d9e0c1bd777a / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptconverters-all-objects--3a443babd1cb / TopLevel.ts+5 −0
| @@ -742,10 +742,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 742 | 742 | if (val === null) { |
| 743 | 743 | return null; |
| 744 | 744 | } |
| 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); | |
| 745 | 747 | const d = new Date(val); |
| 746 | 748 | if (isNaN(d.valueOf())) { |
| 747 | 749 | return invalidValue(l("Date"), val, key, parent); |
| 748 | 750 | } |
| 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); | |
| 749 | 754 | return d; |
| 750 | 755 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
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 | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
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 | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptprefer-unions-false--a5053c0a486d / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptprefer-unknown-false--f1ab9e45d823 / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptraw-type-any--474b307c39db / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Mtypescriptreadonly-true--24da4fc107df / TopLevel.ts+5 −0
| @@ -614,10 +614,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
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 | ||
| 614 | 614 | if (val === null) { |
| 615 | 615 | return null; |
| 616 | 616 | } |
| 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); | |
| 617 | 619 | const d = new Date(val); |
| 618 | 620 | if (isNaN(d.valueOf())) { |
| 619 | 621 | return invalidValue(l("Date"), val, key, parent); |
| 620 | 622 | } |
| 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); | |
| 621 | 626 | return d; |
| 622 | 627 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/combined-enum.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/direct-recursive.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/empty-enum.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/identifiers.json
Mflowdefault / TopLevel.js+5 −0
| @@ -127,10 +127,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 127 | 127 | if (val === null) { |
| 128 | 128 | return null; |
| 129 | 129 | } |
| 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); | |
| 130 | 132 | const d = new Date(val); |
| 131 | 133 | if (isNaN(d.valueOf())) { |
| 132 | 134 | return invalidValue(l("Date"), val, key, parent); |
| 133 | 135 | } |
| 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); | |
| 134 | 139 | return d; |
| 135 | 140 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -124,10 +124,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 124 | 124 | if (val === null) { |
| 125 | 125 | return null; |
| 126 | 126 | } |
| 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); | |
| 127 | 129 | const d = new Date(val); |
| 128 | 130 | if (isNaN(d.valueOf())) { |
| 129 | 131 | return invalidValue(l("Date"), val, key, parent); |
| 130 | 132 | } |
| 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); | |
| 131 | 136 | return d; |
| 132 | 137 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/issue2680-object-array.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/issue2680-scalar-array.json
Mflowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
5 generated files · +21 −1test/inputs/json/priority/keywords.json
Mflowdefault / TopLevel.js+5 −0
| @@ -1790,10 +1790,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 1790 | 1790 | if (val === null) { |
| 1791 | 1791 | return null; |
| 1792 | 1792 | } |
| 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); | |
| 1793 | 1795 | const d = new Date(val); |
| 1794 | 1796 | if (isNaN(d.valueOf())) { |
| 1795 | 1797 | return invalidValue(l("Date"), val, key, parent); |
| 1796 | 1798 | } |
| 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); | |
| 1797 | 1802 | return d; |
| 1798 | 1803 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -622,7 +622,7 @@ _DateOnlyConverter = PropTypes.shape({ | ||
| 622 | 622 | "DateOnlyConverter": PropTypes.oneOfType([Integer]).isRequired, |
| 623 | 623 | }); |
| 624 | 624 | _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, | |
| 626 | 626 | }); |
| 627 | 627 | _DateTimeStyles = PropTypes.shape({ |
| 628 | 628 | "DateTimeStyles": PropTypes.oneOfType([Integer]).isRequired, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -1788,10 +1788,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 1788 | 1788 | if (val === null) { |
| 1789 | 1789 | return null; |
| 1790 | 1790 | } |
| 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); | |
| 1791 | 1793 | const d = new Date(val); |
| 1792 | 1794 | if (isNaN(d.valueOf())) { |
| 1793 | 1795 | return invalidValue(l("Date"), val, key, parent); |
| 1794 | 1796 | } |
| 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); | |
| 1795 | 1800 | return d; |
| 1796 | 1801 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -1788,10 +1788,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 1788 | 1788 | if (val === null) { |
| 1789 | 1789 | return null; |
| 1790 | 1790 | } |
| 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); | |
| 1791 | 1793 | const d = new Date(val); |
| 1792 | 1794 | if (isNaN(d.valueOf())) { |
| 1793 | 1795 | return invalidValue(l("Date"), val, key, parent); |
| 1794 | 1796 | } |
| 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); | |
| 1795 | 1800 | return d; |
| 1796 | 1801 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/kotlin-enum-class-case-collision.json
Mflowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/list.json
Mflowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/name-style.json
Mflowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/nbl-stats.json
Mflowdefault / TopLevel.js+5 −0
| @@ -428,10 +428,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 428 | 428 | if (val === null) { |
| 429 | 429 | return null; |
| 430 | 430 | } |
| 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); | |
| 431 | 433 | const d = new Date(val); |
| 432 | 434 | if (isNaN(d.valueOf())) { |
| 433 | 435 | return invalidValue(l("Date"), val, key, parent); |
| 434 | 436 | } |
| 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); | |
| 435 | 440 | return d; |
| 436 | 441 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -373,10 +373,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 373 | 373 | if (val === null) { |
| 374 | 374 | return null; |
| 375 | 375 | } |
| 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); | |
| 376 | 378 | const d = new Date(val); |
| 377 | 379 | if (isNaN(d.valueOf())) { |
| 378 | 380 | return invalidValue(l("Date"), val, key, parent); |
| 379 | 381 | } |
| 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); | |
| 380 | 385 | return d; |
| 381 | 386 | } |
Test case
4 generated files · +20 −0test/inputs/json/priority/nested-objects.json
Mflowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mjavascriptconverters-all-objects--3a443babd1cb / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/no-classes.json
Mflowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/nst-test-suite.json
Mflowdefault / TopLevel.js+5 −0
| @@ -236,10 +236,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 236 | 236 | if (val === null) { |
| 237 | 237 | return null; |
| 238 | 238 | } |
| 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); | |
| 239 | 241 | const d = new Date(val); |
| 240 | 242 | if (isNaN(d.valueOf())) { |
| 241 | 243 | return invalidValue(l("Date"), val, key, parent); |
| 242 | 244 | } |
| 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); | |
| 243 | 248 | return d; |
| 244 | 249 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -233,10 +233,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 233 | 233 | if (val === null) { |
| 234 | 234 | return null; |
| 235 | 235 | } |
| 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); | |
| 236 | 238 | const d = new Date(val); |
| 237 | 239 | if (isNaN(d.valueOf())) { |
| 238 | 240 | return invalidValue(l("Date"), val, key, parent); |
| 239 | 241 | } |
| 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); | |
| 240 | 245 | return d; |
| 241 | 246 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/number-map.json
Mflowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/omit-empty.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/optional-union.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/php-mixed-union.json
Mflowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/php-validation.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/recursive.json
Mflowdefault / TopLevel.js+5 −0
| @@ -215,10 +215,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 215 | 215 | if (val === null) { |
| 216 | 216 | return null; |
| 217 | 217 | } |
| 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); | |
| 218 | 220 | const d = new Date(val); |
| 219 | 221 | if (isNaN(d.valueOf())) { |
| 220 | 222 | return invalidValue(l("Date"), val, key, parent); |
| 221 | 223 | } |
| 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); | |
| 222 | 227 | return d; |
| 223 | 228 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -215,10 +215,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 215 | 215 | if (val === null) { |
| 216 | 216 | return null; |
| 217 | 217 | } |
| 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); | |
| 218 | 220 | const d = new Date(val); |
| 219 | 221 | if (isNaN(d.valueOf())) { |
| 220 | 222 | return invalidValue(l("Date"), val, key, parent); |
| 221 | 223 | } |
| 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); | |
| 222 | 227 | return d; |
| 223 | 228 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/simple-identifiers.json
Mflowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/union-constructor-clash.json
Mflowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/unions.json
Mflowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/url.json
Mflowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/json/priority/uuids.json
Mflowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/bitcoin-block.json
Mflowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/copy-with-property.json
Mflowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/getting-started.json
Mflowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
4 generated files · +31 −16test/inputs/json/samples/github-events.json
Mflowdefault / TopLevel.js+5 −0
| @@ -384,10 +384,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 384 | 384 | if (val === null) { |
| 385 | 385 | return null; |
| 386 | 386 | } |
| 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); | |
| 387 | 389 | const d = new Date(val); |
| 388 | 390 | if (isNaN(d.valueOf())) { |
| 389 | 391 | return invalidValue(l("Date"), val, key, parent); |
| 390 | 392 | } |
| 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); | |
| 391 | 396 | return d; |
| 392 | 397 | } |
Mjavascript-prop-typesdefault / toplevel.js+16 −16
| @@ -60,11 +60,11 @@ _User = PropTypes.shape({ | ||
| 60 | 60 | }); |
| 61 | 61 | _Comment = PropTypes.shape({ |
| 62 | 62 | "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, | |
| 64 | 64 | "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 65 | 65 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 66 | 66 | "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, | |
| 68 | 68 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 69 | 69 | "user": _User, |
| 70 | 70 | }); |
| @@ -89,10 +89,10 @@ _Label = PropTypes.shape({ | ||
| 89 | 89 | _Milestone = PropTypes.shape({ |
| 90 | 90 | "closed_at": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 91 | 91 | "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, | |
| 93 | 93 | "creator": _User, |
| 94 | 94 | "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), | |
| 96 | 96 | "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 97 | 97 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| 98 | 98 | "labels_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -100,7 +100,7 @@ _Milestone = PropTypes.shape({ | ||
| 100 | 100 | "open_issues": PropTypes.oneOfType([Integer]).isRequired, |
| 101 | 101 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 102 | 102 | "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, | |
| 104 | 104 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 105 | 105 | }); |
| 106 | 106 | _IssuePullRequest = PropTypes.shape({ |
| @@ -113,10 +113,10 @@ _Issue = PropTypes.shape({ | ||
| 113 | 113 | "assignee": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 114 | 114 | "assignees": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any)]).isRequired, |
| 115 | 115 | "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), | |
| 117 | 117 | "comments": PropTypes.oneOfType([Integer]).isRequired, |
| 118 | 118 | "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, | |
| 120 | 120 | "events_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 121 | 121 | "html_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 122 | 122 | "id": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -129,7 +129,7 @@ _Issue = PropTypes.shape({ | ||
| 129 | 129 | "repository_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 130 | 130 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 131 | 131 | "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, | |
| 133 | 133 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 134 | 134 | "user": _User, |
| 135 | 135 | }); |
| @@ -158,7 +158,7 @@ _BaseRepo = PropTypes.shape({ | ||
| 158 | 158 | "compare_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 159 | 159 | "contents_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 160 | 160 | "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, | |
| 162 | 162 | "default_branch": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 163 | 163 | "deployments_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 164 | 164 | "description": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -199,7 +199,7 @@ _BaseRepo = PropTypes.shape({ | ||
| 199 | 199 | "owner": _User, |
| 200 | 200 | "private": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 201 | 201 | "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, | |
| 203 | 203 | "releases_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 204 | 204 | "size": PropTypes.oneOfType([Integer]).isRequired, |
| 205 | 205 | "ssh_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| @@ -212,7 +212,7 @@ _BaseRepo = PropTypes.shape({ | ||
| 212 | 212 | "tags_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 213 | 213 | "teams_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 214 | 214 | "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, | |
| 216 | 216 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 217 | 217 | "watchers": PropTypes.oneOfType([Integer]).isRequired, |
| 218 | 218 | "watchers_count": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -232,12 +232,12 @@ _PayloadPullRequest = PropTypes.shape({ | ||
| 232 | 232 | "base": _Base, |
| 233 | 233 | "body": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 234 | 234 | "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, | |
| 236 | 236 | "comments": PropTypes.oneOfType([Integer]).isRequired, |
| 237 | 237 | "comments_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 238 | 238 | "commits": PropTypes.oneOfType([Integer]).isRequired, |
| 239 | 239 | "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, | |
| 241 | 241 | "deletions": PropTypes.oneOfType([Integer]).isRequired, |
| 242 | 242 | "diff_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 243 | 243 | "head": _Base, |
| @@ -250,7 +250,7 @@ _PayloadPullRequest = PropTypes.shape({ | ||
| 250 | 250 | "mergeable": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 251 | 251 | "mergeable_state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 252 | 252 | "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, | |
| 254 | 254 | "merged_by": _User, |
| 255 | 255 | "milestone": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOf([null])])(props, name, ...args), |
| 256 | 256 | "number": PropTypes.oneOfType([Integer]).isRequired, |
| @@ -263,7 +263,7 @@ _PayloadPullRequest = PropTypes.shape({ | ||
| 263 | 263 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 264 | 264 | "statuses_url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 265 | 265 | "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, | |
| 267 | 267 | "url": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 268 | 268 | "user": _User, |
| 269 | 269 | }); |
| @@ -292,7 +292,7 @@ _TopLevelRepo = PropTypes.shape({ | ||
| 292 | 292 | }); |
| 293 | 293 | _TopLevel = PropTypes.shape({ |
| 294 | 294 | "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, | |
| 296 | 296 | "id": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 297 | 297 | "org": PropTypes.oneOfType([_Actor, PropTypes.oneOf([null])]), |
| 298 | 298 | "payload": _Payload, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -382,10 +382,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 382 | 382 | if (val === null) { |
| 383 | 383 | return null; |
| 384 | 384 | } |
| 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); | |
| 385 | 387 | const d = new Date(val); |
| 386 | 388 | if (isNaN(d.valueOf())) { |
| 387 | 389 | return invalidValue(l("Date"), val, key, parent); |
| 388 | 390 | } |
| 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); | |
| 389 | 394 | return d; |
| 390 | 395 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/kitchen-sink.json
Mflowdefault / TopLevel.js+5 −0
| @@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 128 | 128 | if (val === null) { |
| 129 | 129 | return null; |
| 130 | 130 | } |
| 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); | |
| 131 | 133 | const d = new Date(val); |
| 132 | 134 | if (isNaN(d.valueOf())) { |
| 133 | 135 | return invalidValue(l("Date"), val, key, parent); |
| 134 | 136 | } |
| 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); | |
| 135 | 140 | return d; |
| 136 | 141 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -128,10 +128,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 128 | 128 | if (val === null) { |
| 129 | 129 | return null; |
| 130 | 130 | } |
| 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); | |
| 131 | 133 | const d = new Date(val); |
| 132 | 134 | if (isNaN(d.valueOf())) { |
| 133 | 135 | return invalidValue(l("Date"), val, key, parent); |
| 134 | 136 | } |
| 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); | |
| 135 | 140 | return d; |
| 136 | 141 | } |
Test case
4 generated files · +16 −1test/inputs/json/samples/null-safe.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascript-prop-typesdefault / toplevel.js+1 −1
| @@ -23,7 +23,7 @@ _Address = PropTypes.shape({ | ||
| 23 | 23 | }); |
| 24 | 24 | _Item = PropTypes.shape({ |
| 25 | 25 | "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])]), | |
| 27 | 27 | "name": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 28 | 28 | "sex": (props, name, ...args) => props[name] === undefined ? new Error("Expected required property") : PropTypes.oneOfType([PropTypes.oneOfType([Integer, PropTypes.oneOf([null])])])(props, name, ...args), |
| 29 | 29 | }); |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/objc-control-characters.json
Mflowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
4 generated files · +20 −0test/inputs/json/samples/pokedex.json
Mflowdefault / TopLevel.js+5 −0
| @@ -148,10 +148,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 148 | 148 | if (val === null) { |
| 149 | 149 | return null; |
| 150 | 150 | } |
| 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); | |
| 151 | 153 | const d = new Date(val); |
| 152 | 154 | if (isNaN(d.valueOf())) { |
| 153 | 155 | return invalidValue(l("Date"), val, key, parent); |
| 154 | 156 | } |
| 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); | |
| 155 | 160 | return d; |
| 156 | 161 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Mtypescriptprefer-types-true--df33e18681f9 / TopLevel.ts+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/reddit.json
Mflowdefault / TopLevel.js+5 −0
| @@ -237,10 +237,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 237 | 237 | if (val === null) { |
| 238 | 238 | return null; |
| 239 | 239 | } |
| 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); | |
| 240 | 242 | const d = new Date(val); |
| 241 | 243 | if (isNaN(d.valueOf())) { |
| 242 | 244 | return invalidValue(l("Date"), val, key, parent); |
| 243 | 245 | } |
| 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); | |
| 244 | 249 | return d; |
| 245 | 250 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -222,10 +222,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 222 | 222 | if (val === null) { |
| 223 | 223 | return null; |
| 224 | 224 | } |
| 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); | |
| 225 | 227 | const d = new Date(val); |
| 226 | 228 | if (isNaN(d.valueOf())) { |
| 227 | 229 | return invalidValue(l("Date"), val, key, parent); |
| 228 | 230 | } |
| 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); | |
| 229 | 234 | return d; |
| 230 | 235 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/simple-object.json
Mflowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/spotify-album.json
Mflowdefault / TopLevel.js+5 −0
| @@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 166 | 166 | if (val === null) { |
| 167 | 167 | return null; |
| 168 | 168 | } |
| 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); | |
| 169 | 171 | const d = new Date(val); |
| 170 | 172 | if (isNaN(d.valueOf())) { |
| 171 | 173 | return invalidValue(l("Date"), val, key, parent); |
| 172 | 174 | } |
| 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); | |
| 173 | 178 | return d; |
| 174 | 179 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -166,10 +166,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 166 | 166 | if (val === null) { |
| 167 | 167 | return null; |
| 168 | 168 | } |
| 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); | |
| 169 | 171 | const d = new Date(val); |
| 170 | 172 | if (isNaN(d.valueOf())) { |
| 171 | 173 | return invalidValue(l("Date"), val, key, parent); |
| 172 | 174 | } |
| 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); | |
| 173 | 178 | return d; |
| 174 | 179 | } |
Test case
3 generated files · +15 −0test/inputs/json/samples/us-avg-temperatures.json
Mflowdefault / TopLevel.js+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
4 generated files · +18 −3test/inputs/json/samples/us-senators.json
Mflowdefault / TopLevel.js+5 −0
| @@ -201,10 +201,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 201 | 201 | if (val === null) { |
| 202 | 202 | return null; |
| 203 | 203 | } |
| 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); | |
| 204 | 206 | const d = new Date(val); |
| 205 | 207 | if (isNaN(d.valueOf())) { |
| 206 | 208 | return invalidValue(l("Date"), val, key, parent); |
| 207 | 209 | } |
| 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); | |
| 208 | 213 | return d; |
| 209 | 214 | } |
Mjavascript-prop-typesdefault / toplevel.js+3 −3
| @@ -43,7 +43,7 @@ _Extra = PropTypes.shape({ | ||
| 43 | 43 | }); |
| 44 | 44 | _Person = PropTypes.shape({ |
| 45 | 45 | "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, | |
| 47 | 47 | "cspanid": PropTypes.oneOfType([Integer]).isRequired, |
| 48 | 48 | "firstname": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 49 | 49 | "gender": _Gender, |
| @@ -66,7 +66,7 @@ _Object = PropTypes.shape({ | ||
| 66 | 66 | "current": PropTypes.oneOfType([PropTypes.bool]).isRequired, |
| 67 | 67 | "description": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 68 | 68 | "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, | |
| 70 | 70 | "extra": _Extra, |
| 71 | 71 | "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), |
| 72 | 72 | "party": _Party, |
| @@ -78,7 +78,7 @@ _Object = PropTypes.shape({ | ||
| 78 | 78 | "senator_class_label": _SenatorClassLabel, |
| 79 | 79 | "senator_rank": _SenatorRank, |
| 80 | 80 | "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, | |
| 82 | 82 | "state": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 83 | 83 | "title": _Title, |
| 84 | 84 | "title_long": _RoleTypeLabel, |
Mjavascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mtypescriptdefault / TopLevel.ts+5 −0
| @@ -178,10 +178,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 178 | 178 | if (val === null) { |
| 179 | 179 | return null; |
| 180 | 180 | } |
| 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); | |
| 181 | 183 | const d = new Date(val); |
| 182 | 184 | if (isNaN(d.valueOf())) { |
| 183 | 185 | return invalidValue(l("Date"), val, key, parent); |
| 184 | 186 | } |
| 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); | |
| 185 | 190 | return d; |
| 186 | 191 | } |
Test case
3 generated files · +15 −0test/inputs/schema/accessors.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/all-of-additional-properties-false.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/any.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/schema/bool-string.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/schema/boolean-subschema.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/camelCase.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/schema/class-map-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 113 | 113 | if (val === null) { |
| 114 | 114 | return null; |
| 115 | 115 | } |
| 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); | |
| 116 | 118 | const d = new Date(val); |
| 117 | 119 | if (isNaN(d.valueOf())) { |
| 118 | 120 | return invalidValue(l("Date"), val, key, parent); |
| 119 | 121 | } |
| 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); | |
| 120 | 125 | return d; |
| 121 | 126 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -113,10 +113,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 113 | 113 | if (val === null) { |
| 114 | 114 | return null; |
| 115 | 115 | } |
| 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); | |
| 116 | 118 | const d = new Date(val); |
| 117 | 119 | if (isNaN(d.valueOf())) { |
| 118 | 120 | return invalidValue(l("Date"), val, key, parent); |
| 119 | 121 | } |
| 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); | |
| 120 | 125 | return d; |
| 121 | 126 | } |
Test case
3 generated files · +15 −0test/inputs/schema/class-with-additional.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +20 −0test/inputs/schema/comment-injection-enum-nested-comment.schema
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -111,10 +111,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 111 | 111 | if (val === null) { |
| 112 | 112 | return null; |
| 113 | 113 | } |
| 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); | |
| 114 | 116 | const d = new Date(val); |
| 115 | 117 | if (isNaN(d.valueOf())) { |
| 116 | 118 | return invalidValue(l("Date"), val, key, parent); |
| 117 | 119 | } |
| 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); | |
| 118 | 123 | return d; |
| 119 | 124 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Test case
4 generated files · +20 −0test/inputs/schema/comment-injection-enum.schema
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
| @@ -116,10 +116,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 116 | 116 | if (val === null) { |
| 117 | 117 | return null; |
| 118 | 118 | } |
| 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); | |
| 119 | 121 | const d = new Date(val); |
| 120 | 122 | if (isNaN(d.valueOf())) { |
| 121 | 123 | return invalidValue(l("Date"), val, key, parent); |
| 122 | 124 | } |
| 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); | |
| 123 | 128 | return d; |
| 124 | 129 | } |
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -117,10 +117,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 117 | 117 | if (val === null) { |
| 118 | 118 | return null; |
| 119 | 119 | } |
| 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); | |
| 120 | 122 | const d = new Date(val); |
| 121 | 123 | if (isNaN(d.valueOf())) { |
| 122 | 124 | return invalidValue(l("Date"), val, key, parent); |
| 123 | 125 | } |
| 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); | |
| 124 | 129 | return d; |
| 125 | 130 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -116,10 +116,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 116 | 116 | if (val === null) { |
| 117 | 117 | return null; |
| 118 | 118 | } |
| 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); | |
| 119 | 121 | const d = new Date(val); |
| 120 | 122 | if (isNaN(d.valueOf())) { |
| 121 | 123 | return invalidValue(l("Date"), val, key, parent); |
| 122 | 124 | } |
| 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); | |
| 123 | 128 | return d; |
| 124 | 129 | } |
Test case
4 generated files · +20 −0test/inputs/schema/comment-injection-nested-comment.schema
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -108,10 +108,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 108 | 108 | if (val === null) { |
| 109 | 109 | return null; |
| 110 | 110 | } |
| 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); | |
| 111 | 113 | const d = new Date(val); |
| 112 | 114 | if (isNaN(d.valueOf())) { |
| 113 | 115 | return invalidValue(l("Date"), val, key, parent); |
| 114 | 116 | } |
| 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); | |
| 115 | 120 | return d; |
| 116 | 121 | } |
Test case
4 generated files · +20 −0test/inputs/schema/comment-injection.schema
Mcomment-injection-typescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -136,10 +136,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 136 | 136 | if (val === null) { |
| 137 | 137 | return null; |
| 138 | 138 | } |
| 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); | |
| 139 | 141 | const d = new Date(val); |
| 140 | 142 | if (isNaN(d.valueOf())) { |
| 141 | 143 | return invalidValue(l("Date"), val, key, parent); |
| 142 | 144 | } |
| 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); | |
| 143 | 148 | return d; |
| 144 | 149 | } |
Test case
3 generated files · +15 −0test/inputs/schema/const-non-string.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/constructor.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/cut-enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
4 generated files · +16 −1test/inputs/schema/date-time-or-string.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mschema-javascript-prop-typesdefault / toplevel.js+1 −1
| @@ -15,7 +15,7 @@ import PropTypes from "prop-types"; | ||
| 15 | 15 | let _TopLevel; |
| 16 | 16 | const _BarEnum = PropTypes.oneOf(['quux']); |
| 17 | 17 | _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, | |
| 19 | 19 | "foo": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 20 | 20 | }); |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
4 generated files · +18 −3test/inputs/schema/date-time.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mschema-javascript-prop-typesdefault / toplevel.js+3 −3
| @@ -16,9 +16,9 @@ const Integer = (props, name) => props[name] == null || Number.isInteger(props[n | ||
| 16 | 16 | let _TopLevel; |
| 17 | 17 | const _ComplexUnionArrayEnum = PropTypes.oneOf(['foo', 'bar']); |
| 18 | 18 | _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, | |
| 22 | 22 | "time": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 23 | 23 | "union-array": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string)]).isRequired, |
| 24 | 24 | }); |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/default-value.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/description-with-double-quotes.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/description.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -135,10 +135,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 135 | 135 | if (val === null) { |
| 136 | 136 | return null; |
| 137 | 137 | } |
| 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); | |
| 138 | 140 | const d = new Date(val); |
| 139 | 141 | if (isNaN(d.valueOf())) { |
| 140 | 142 | return invalidValue(l("Date"), val, key, parent); |
| 141 | 143 | } |
| 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); | |
| 142 | 147 | return d; |
| 143 | 148 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -133,10 +133,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 133 | 133 | if (val === null) { |
| 134 | 134 | return null; |
| 135 | 135 | } |
| 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); | |
| 136 | 138 | const d = new Date(val); |
| 137 | 139 | if (isNaN(d.valueOf())) { |
| 138 | 140 | return invalidValue(l("Date"), val, key, parent); |
| 139 | 141 | } |
| 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); | |
| 140 | 145 | return d; |
| 141 | 146 | } |
Test case
3 generated files · +15 −0test/inputs/schema/direct-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/empty-object.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/schema/enum-large.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -125,10 +125,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 125 | 125 | if (val === null) { |
| 126 | 126 | return null; |
| 127 | 127 | } |
| 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); | |
| 128 | 130 | const d = new Date(val); |
| 129 | 131 | if (isNaN(d.valueOf())) { |
| 130 | 132 | return invalidValue(l("Date"), val, key, parent); |
| 131 | 133 | } |
| 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); | |
| 132 | 137 | return d; |
| 133 | 138 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/schema/enum-with-null.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/schema/enum-with-values.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -118,10 +118,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 118 | 118 | if (val === null) { |
| 119 | 119 | return null; |
| 120 | 120 | } |
| 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); | |
| 121 | 123 | const d = new Date(val); |
| 122 | 124 | if (isNaN(d.valueOf())) { |
| 123 | 125 | return invalidValue(l("Date"), val, key, parent); |
| 124 | 126 | } |
| 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); | |
| 125 | 130 | return d; |
| 126 | 131 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -109,10 +109,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 109 | 109 | if (val === null) { |
| 110 | 110 | return null; |
| 111 | 111 | } |
| 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); | |
| 112 | 114 | const d = new Date(val); |
| 113 | 115 | if (isNaN(d.valueOf())) { |
| 114 | 116 | return invalidValue(l("Date"), val, key, parent); |
| 115 | 117 | } |
| 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); | |
| 116 | 121 | return d; |
| 117 | 122 | } |
Test case
3 generated files · +15 −0test/inputs/schema/fractional-bounds.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/go-schema-pattern-properties.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/haskell-enum-forbidden.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/id-no-address.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/id-root.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/ie-suffix-singularization.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/implicit-all-of.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/implicit-class-array-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/implicit-one-of.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/integer-before-number.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/integer-float-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/integer-string.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/schema/integer-type.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -105,10 +105,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 105 | 105 | if (val === null) { |
| 106 | 106 | return null; |
| 107 | 107 | } |
| 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); | |
| 108 | 110 | const d = new Date(val); |
| 109 | 111 | if (isNaN(d.valueOf())) { |
| 110 | 112 | return invalidValue(l("Date"), val, key, parent); |
| 111 | 113 | } |
| 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); | |
| 112 | 117 | return d; |
| 113 | 118 | } |
Test case
3 generated files · +15 −0test/inputs/schema/intersection-nested.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/schema/intersection.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/schema/issue2680-top-level-array.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/schema/keyword-enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -432,10 +432,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 432 | 432 | if (val === null) { |
| 433 | 433 | return null; |
| 434 | 434 | } |
| 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); | |
| 435 | 437 | const d = new Date(val); |
| 436 | 438 | if (isNaN(d.valueOf())) { |
| 437 | 439 | return invalidValue(l("Date"), val, key, parent); |
| 438 | 440 | } |
| 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); | |
| 439 | 444 | return d; |
| 440 | 445 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/keyword-unions.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -2089,10 +2089,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 2089 | 2089 | if (val === null) { |
| 2090 | 2090 | return null; |
| 2091 | 2091 | } |
| 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); | |
| 2092 | 2094 | const d = new Date(val); |
| 2093 | 2095 | if (isNaN(d.valueOf())) { |
| 2094 | 2096 | return invalidValue(l("Date"), val, key, parent); |
| 2095 | 2097 | } |
| 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); | |
| 2096 | 2101 | return d; |
| 2097 | 2102 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -1093,10 +1093,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 1093 | 1093 | if (val === null) { |
| 1094 | 1094 | return null; |
| 1095 | 1095 | } |
| 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); | |
| 1096 | 1098 | const d = new Date(val); |
| 1097 | 1099 | if (isNaN(d.valueOf())) { |
| 1098 | 1100 | return invalidValue(l("Date"), val, key, parent); |
| 1099 | 1101 | } |
| 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); | |
| 1100 | 1105 | return d; |
| 1101 | 1106 | } |
Test case
3 generated files · +15 −0test/inputs/schema/light.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/schema/list.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/min-max-items.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -103,10 +103,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 103 | 103 | if (val === null) { |
| 104 | 104 | return null; |
| 105 | 105 | } |
| 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); | |
| 106 | 108 | const d = new Date(val); |
| 107 | 109 | if (isNaN(d.valueOf())) { |
| 108 | 110 | return invalidValue(l("Date"), val, key, parent); |
| 109 | 111 | } |
| 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); | |
| 110 | 115 | return d; |
| 111 | 116 | } |
Test case
3 generated files · +15 −0test/inputs/schema/minmax-integer.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/minmax.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/minmaxlength.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/schema/multi-type-enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/schema/mutually-recursive.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/nested-intersection-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/non-standard-ref.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/nullable-optional-one-of.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/object-type-required.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/optional-any.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/optional-const-ref.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Test case
3 generated files · +15 −0test/inputs/schema/optional-constraints.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
4 generated files · +19 −4test/inputs/schema/optional-date-time.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascript-prop-typesdefault / toplevel.js+4 −4
| @@ -14,11 +14,11 @@ import PropTypes from "prop-types"; | ||
| 14 | 14 | |
| 15 | 15 | let _TopLevel; |
| 16 | 16 | _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])]), | |
| 19 | 19 | "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, | |
| 22 | 22 | "required-time": PropTypes.oneOfType([PropTypes.string]).isRequired, |
| 23 | 23 | }); |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/schema/optional-enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/optional-property.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -96,10 +96,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 96 | 96 | if (val === null) { |
| 97 | 97 | return null; |
| 98 | 98 | } |
| 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); | |
| 99 | 101 | const d = new Date(val); |
| 100 | 102 | if (isNaN(d.valueOf())) { |
| 101 | 103 | return invalidValue(l("Date"), val, key, parent); |
| 102 | 104 | } |
| 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); | |
| 103 | 108 | return d; |
| 104 | 109 | } |
Test case
3 generated files · +15 −0test/inputs/schema/pattern.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -104,10 +104,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 104 | 104 | if (val === null) { |
| 105 | 105 | return null; |
| 106 | 106 | } |
| 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); | |
| 107 | 109 | const d = new Date(val); |
| 108 | 110 | if (isNaN(d.valueOf())) { |
| 109 | 111 | return invalidValue(l("Date"), val, key, parent); |
| 110 | 112 | } |
| 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); | |
| 111 | 116 | return d; |
| 112 | 117 | } |
Test case
3 generated files · +15 −0test/inputs/schema/postman-collection.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Test case
3 generated files · +15 −0test/inputs/schema/prefix-items.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/recursive-union-flattening.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -110,10 +110,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 110 | 110 | if (val === null) { |
| 111 | 111 | return null; |
| 112 | 112 | } |
| 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); | |
| 113 | 115 | const d = new Date(val); |
| 114 | 116 | if (isNaN(d.valueOf())) { |
| 115 | 117 | return invalidValue(l("Date"), val, key, parent); |
| 116 | 118 | } |
| 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); | |
| 117 | 122 | return d; |
| 118 | 123 | } |
Test case
3 generated files · +15 −0test/inputs/schema/ref-id-files.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/ref-remote.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/renaming-bug.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -199,10 +199,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 199 | 199 | if (val === null) { |
| 200 | 200 | return null; |
| 201 | 201 | } |
| 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); | |
| 202 | 204 | const d = new Date(val); |
| 203 | 205 | if (isNaN(d.valueOf())) { |
| 204 | 206 | return invalidValue(l("Date"), val, key, parent); |
| 205 | 207 | } |
| 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); | |
| 206 | 211 | return d; |
| 207 | 212 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -184,10 +184,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 184 | 184 | if (val === null) { |
| 185 | 185 | return null; |
| 186 | 186 | } |
| 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); | |
| 187 | 189 | const d = new Date(val); |
| 188 | 190 | if (isNaN(d.valueOf())) { |
| 189 | 191 | return invalidValue(l("Date"), val, key, parent); |
| 190 | 192 | } |
| 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); | |
| 191 | 196 | return d; |
| 192 | 197 | } |
Test case
3 generated files · +15 −0test/inputs/schema/required-draft3.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/required-non-properties.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/schema/required.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/rust-cycle-breaker-union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/schema/schema-constraints.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -98,10 +98,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 98 | 98 | if (val === null) { |
| 99 | 99 | return null; |
| 100 | 100 | } |
| 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); | |
| 101 | 103 | const d = new Date(val); |
| 102 | 104 | if (isNaN(d.valueOf())) { |
| 103 | 105 | return invalidValue(l("Date"), val, key, parent); |
| 104 | 106 | } |
| 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); | |
| 105 | 110 | return d; |
| 106 | 111 | } |
Test case
3 generated files · +15 −0test/inputs/schema/simple-ref.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/strict-optional.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/top-level-array.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -100,10 +100,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 100 | 100 | if (val === null) { |
| 101 | 101 | return null; |
| 102 | 102 | } |
| 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); | |
| 103 | 105 | const d = new Date(val); |
| 104 | 106 | if (isNaN(d.valueOf())) { |
| 105 | 107 | return invalidValue(l("Date"), val, key, parent); |
| 106 | 108 | } |
| 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); | |
| 107 | 112 | return d; |
| 108 | 113 | } |
Test case
3 generated files · +15 −0test/inputs/schema/top-level-enum.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/schema/top-level-primitive-array.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -94,10 +94,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 94 | 94 | if (val === null) { |
| 95 | 95 | return null; |
| 96 | 96 | } |
| 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); | |
| 97 | 99 | const d = new Date(val); |
| 98 | 100 | if (isNaN(d.valueOf())) { |
| 99 | 101 | return invalidValue(l("Date"), val, key, parent); |
| 100 | 102 | } |
| 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); | |
| 101 | 106 | return d; |
| 102 | 107 | } |
Test case
3 generated files · +15 −0test/inputs/schema/top-level-primitive.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -97,10 +97,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 97 | 97 | if (val === null) { |
| 98 | 98 | return null; |
| 99 | 99 | } |
| 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); | |
| 100 | 102 | const d = new Date(val); |
| 101 | 103 | if (isNaN(d.valueOf())) { |
| 102 | 104 | return invalidValue(l("Date"), val, key, parent); |
| 103 | 105 | } |
| 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); | |
| 104 | 109 | return d; |
| 105 | 110 | } |
Test case
3 generated files · +15 −0test/inputs/schema/tuple.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/unevaluated-properties.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -115,10 +115,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 115 | 115 | if (val === null) { |
| 116 | 116 | return null; |
| 117 | 117 | } |
| 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); | |
| 118 | 120 | const d = new Date(val); |
| 119 | 121 | if (isNaN(d.valueOf())) { |
| 120 | 122 | return invalidValue(l("Date"), val, key, parent); |
| 121 | 123 | } |
| 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); | |
| 122 | 127 | return d; |
| 123 | 128 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -112,10 +112,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 112 | 112 | if (val === null) { |
| 113 | 113 | return null; |
| 114 | 114 | } |
| 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); | |
| 115 | 117 | const d = new Date(val); |
| 116 | 118 | if (isNaN(d.valueOf())) { |
| 117 | 119 | return invalidValue(l("Date"), val, key, parent); |
| 118 | 120 | } |
| 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); | |
| 119 | 124 | return d; |
| 120 | 125 | } |
Test case
3 generated files · +15 −0test/inputs/schema/unicode-codepoint-length.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/union-int-double.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -99,10 +99,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 99 | 99 | if (val === null) { |
| 100 | 100 | return null; |
| 101 | 101 | } |
| 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); | |
| 102 | 104 | const d = new Date(val); |
| 103 | 105 | if (isNaN(d.valueOf())) { |
| 104 | 106 | return invalidValue(l("Date"), val, key, parent); |
| 105 | 107 | } |
| 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); | |
| 106 | 111 | return d; |
| 107 | 112 | } |
Test case
3 generated files · +15 −0test/inputs/schema/union-list.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -102,10 +102,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 102 | 102 | if (val === null) { |
| 103 | 103 | return null; |
| 104 | 104 | } |
| 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); | |
| 105 | 107 | const d = new Date(val); |
| 106 | 108 | if (isNaN(d.valueOf())) { |
| 107 | 109 | return invalidValue(l("Date"), val, key, parent); |
| 108 | 110 | } |
| 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); | |
| 109 | 114 | return d; |
| 110 | 115 | } |
Test case
3 generated files · +15 −0test/inputs/schema/union.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -101,10 +101,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 101 | 101 | if (val === null) { |
| 102 | 102 | return null; |
| 103 | 103 | } |
| 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); | |
| 104 | 106 | const d = new Date(val); |
| 105 | 107 | if (isNaN(d.valueOf())) { |
| 106 | 108 | return invalidValue(l("Date"), val, key, parent); |
| 107 | 109 | } |
| 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); | |
| 108 | 113 | return d; |
| 109 | 114 | } |
Test case
3 generated files · +15 −0test/inputs/schema/uuid.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -107,10 +107,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 107 | 107 | if (val === null) { |
| 108 | 108 | return null; |
| 109 | 109 | } |
| 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); | |
| 110 | 112 | const d = new Date(val); |
| 111 | 113 | if (isNaN(d.valueOf())) { |
| 112 | 114 | return invalidValue(l("Date"), val, key, parent); |
| 113 | 115 | } |
| 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); | |
| 114 | 119 | return d; |
| 115 | 120 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -106,10 +106,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 106 | 106 | if (val === null) { |
| 107 | 107 | return null; |
| 108 | 108 | } |
| 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); | |
| 109 | 111 | const d = new Date(val); |
| 110 | 112 | if (isNaN(d.valueOf())) { |
| 111 | 113 | return invalidValue(l("Date"), val, key, parent); |
| 112 | 114 | } |
| 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); | |
| 113 | 118 | return d; |
| 114 | 119 | } |
Test case
3 generated files · +15 −0test/inputs/schema/vega-lite.schema
Mschema-flowdefault / TopLevel.js+5 −0
| @@ -6188,10 +6188,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 6188 | 6188 | if (val === null) { |
| 6189 | 6189 | return null; |
| 6190 | 6190 | } |
| 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); | |
| 6191 | 6193 | const d = new Date(val); |
| 6192 | 6194 | if (isNaN(d.valueOf())) { |
| 6193 | 6195 | return invalidValue(l("Date"), val, key, parent); |
| 6194 | 6196 | } |
| 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); | |
| 6195 | 6200 | return d; |
| 6196 | 6201 | } |
Mschema-javascriptdefault / TopLevel.js+5 −0
| @@ -90,10 +90,15 @@ function transform(val, typ, getProps, key = '', parent = '') { | ||
| 90 | 90 | if (val === null) { |
| 91 | 91 | return null; |
| 92 | 92 | } |
| 93 | + if (!(val instanceof Date) && (typeof val !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])-(?:[0-2][0-9]|3[01])(?:T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9]))?$/i.test(val))) | |
| 94 | + return invalidValue(l("Date"), val, key, parent); | |
| 93 | 95 | const d = new Date(val); |
| 94 | 96 | if (isNaN(d.valueOf())) { |
| 95 | 97 | return invalidValue(l("Date"), val, key, parent); |
| 96 | 98 | } |
| 99 | + const date = typeof val === "string" ? val.slice(0, 10) : null; | |
| 100 | + if (date !== null && new Date(date + "T00:00:00Z").toISOString().slice(0, 10) !== date) | |
| 101 | + return invalidValue(l("Date"), val, key, parent); | |
| 97 | 102 | return d; |
| 98 | 103 | } |
Mschema-typescriptdefault / TopLevel.ts+5 −0
| @@ -5945,10 +5945,15 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any | ||
| 5945 | 5945 | if (val === null) { |
| 5946 | 5946 | return null; |
| 5947 | 5947 | } |
| 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); | |
| 5948 | 5950 | const d = new Date(val); |
| 5949 | 5951 | if (isNaN(d.valueOf())) { |
| 5950 | 5952 | return invalidValue(l("Date"), val, key, parent); |
| 5951 | 5953 | } |
| 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); | |
| 5952 | 5957 | return d; |
| 5953 | 5958 | } |
No generated files match these filters.