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 · +23 −1test/inputs/json/misc/016af.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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 · +23 −1test/inputs/json/misc/033b1.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +24 −2test/inputs/json/misc/0a358.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -77,10 +77,10 @@ class Result { | ||
| 77 | 77 | |
| 78 | 78 | factory Result.fromJson(Map<String, dynamic> json) => Result( |
| 79 | 79 | code: json["code"], |
| 80 | - createdAt: DateTime.parse(json["created_at"]), | |
| 80 | + createdAt: _parseDateTime(json["created_at"]), | |
| 81 | 81 | id: json["id"], |
| 82 | 82 | name: json["name"], |
| 83 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 83 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 84 | 84 | uri: json["uri"], |
| 85 | 85 | ); |
| 86 | 86 | |
| @@ -93,3 +93,10 @@ class Result { | ||
| 93 | 93 | "uri": uri, |
| 94 | 94 | }; |
| 95 | 95 | } |
| 96 | + | |
| 97 | +DateTime _parseDateTime(String value) { | |
| 98 | + final date = value.substring(0, 10); | |
| 99 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 100 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 101 | + return DateTime.parse(value.toUpperCase()); | |
| 102 | +} |
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 | } |
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 · +30 −8test/inputs/json/misc/0a91a.json
Mdartdefault / TopLevel.dart+15 −8
| @@ -31,7 +31,7 @@ class TopLevel { | ||
| 31 | 31 | |
| 32 | 32 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 33 | 33 | actor: Actor.fromJson(json["actor"]), |
| 34 | - createdAt: DateTime.parse(json["created_at"]), | |
| 34 | + createdAt: _parseDateTime(json["created_at"]), | |
| 35 | 35 | id: json["id"], |
| 36 | 36 | org: json["org"] == null ? null : Actor.fromJson(json["org"]), |
| 37 | 37 | payload: Payload.fromJson(json["payload"]), |
| @@ -302,12 +302,12 @@ class PullRequest { | ||
| 302 | 302 | base: Base.fromJson(json["base"]), |
| 303 | 303 | body: json["body"], |
| 304 | 304 | changedFiles: json["changed_files"], |
| 305 | - closedAt: DateTime.parse(json["closed_at"]), | |
| 305 | + closedAt: _parseDateTime(json["closed_at"]), | |
| 306 | 306 | comments: json["comments"], |
| 307 | 307 | commentsUrl: json["comments_url"], |
| 308 | 308 | commits: json["commits"], |
| 309 | 309 | commitsUrl: json["commits_url"], |
| 310 | - createdAt: DateTime.parse(json["created_at"]), | |
| 310 | + createdAt: _parseDateTime(json["created_at"]), | |
| 311 | 311 | deletions: json["deletions"], |
| 312 | 312 | diffUrl: json["diff_url"], |
| 313 | 313 | head: Base.fromJson(json["head"]), |
| @@ -321,7 +321,7 @@ class PullRequest { | ||
| 321 | 321 | mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')), |
| 322 | 322 | mergeableState: json["mergeable_state"], |
| 323 | 323 | merged: json["merged"], |
| 324 | - mergedAt: DateTime.parse(json["merged_at"]), | |
| 324 | + mergedAt: _parseDateTime(json["merged_at"]), | |
| 325 | 325 | mergedBy: MergedBy.fromJson(json["merged_by"]), |
| 326 | 326 | milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')), |
| 327 | 327 | number: json["number"], |
| @@ -334,7 +334,7 @@ class PullRequest { | ||
| 334 | 334 | state: json["state"], |
| 335 | 335 | statusesUrl: json["statuses_url"], |
| 336 | 336 | title: json["title"], |
| 337 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 337 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 338 | 338 | url: json["url"], |
| 339 | 339 | user: MergedBy.fromJson(json["user"]), |
| 340 | 340 | ); |
| @@ -571,7 +571,7 @@ class BaseRepo { | ||
| 571 | 571 | compareUrl: json["compare_url"], |
| 572 | 572 | contentsUrl: json["contents_url"], |
| 573 | 573 | contributorsUrl: json["contributors_url"], |
| 574 | - createdAt: DateTime.parse(json["created_at"]), | |
| 574 | + createdAt: _parseDateTime(json["created_at"]), | |
| 575 | 575 | defaultBranch: json["default_branch"], |
| 576 | 576 | deploymentsUrl: json["deployments_url"], |
| 577 | 577 | description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')), |
| @@ -612,7 +612,7 @@ class BaseRepo { | ||
| 612 | 612 | owner: MergedBy.fromJson(json["owner"]), |
| 613 | 613 | private: json["private"], |
| 614 | 614 | pullsUrl: json["pulls_url"], |
| 615 | - pushedAt: DateTime.parse(json["pushed_at"]), | |
| 615 | + pushedAt: _parseDateTime(json["pushed_at"]), | |
| 616 | 616 | releasesUrl: json["releases_url"], |
| 617 | 617 | size: json["size"], |
| 618 | 618 | sshUrl: json["ssh_url"], |
| @@ -625,7 +625,7 @@ class BaseRepo { | ||
| 625 | 625 | tagsUrl: json["tags_url"], |
| 626 | 626 | teamsUrl: json["teams_url"], |
| 627 | 627 | treesUrl: json["trees_url"], |
| 628 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 628 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 629 | 629 | url: json["url"], |
| 630 | 630 | watchers: json["watchers"], |
| 631 | 631 | watchersCount: json["watchers_count"], |
| @@ -895,3 +895,10 @@ class EnumValues<T> { | ||
| 895 | 895 | return reverseMap; |
| 896 | 896 | } |
| 897 | 897 | } |
| 898 | + | |
| 899 | +DateTime _parseDateTime(String value) { | |
| 900 | + final date = value.substring(0, 10); | |
| 901 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 902 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 903 | + return DateTime.parse(value.toUpperCase()); | |
| 904 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/0e0c2.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -80,7 +80,7 @@ class Result { | ||
| 80 | 80 | id: json["id"], |
| 81 | 81 | images: List<Image>.from(json["images"].map((x) => Image.fromJson(x))), |
| 82 | 82 | language: resultLanguageValues.map[json["language"]]!, |
| 83 | - releaseDate: DateTime.parse(json["release_date"]), | |
| 83 | + releaseDate: _parseDateTime(json["release_date"]), | |
| 84 | 84 | stars: json["stars"], |
| 85 | 85 | tags: (json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property')) == null ? null : List<dynamic>.from((json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property'))!.map((x) => x)), |
| 86 | 86 | title: json["title"], |
| @@ -325,3 +325,10 @@ class EnumValues<T> { | ||
| 325 | 325 | return reverseMap; |
| 326 | 326 | } |
| 327 | 327 | } |
| 328 | + | |
| 329 | +DateTime _parseDateTime(String value) { | |
| 330 | + final date = value.substring(0, 10); | |
| 331 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 332 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 333 | + return DateTime.parse(value.toUpperCase()); | |
| 334 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/167d6.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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
4 generated files · +23 −1test/inputs/json/misc/16bc5.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/1b28c.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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 · +25 −3test/inputs/json/misc/1b409.json
Mdartdefault / TopLevel.dart+10 −3
| @@ -105,7 +105,7 @@ class Object { | ||
| 105 | 105 | current: json["current"], |
| 106 | 106 | description: json["description"], |
| 107 | 107 | district: json["district"], |
| 108 | - enddate: DateTime.parse(json["enddate"]), | |
| 108 | + enddate: _parseDateTime(json["enddate"]), | |
| 109 | 109 | extra: Extra.fromJson(json["extra"]), |
| 110 | 110 | id: json["id"], |
| 111 | 111 | leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')), |
| @@ -116,7 +116,7 @@ class Object { | ||
| 116 | 116 | roleTypeLabel: roleTypeLabelValues.map[json["role_type_label"]]!, |
| 117 | 117 | senatorClass: (json.containsKey("senator_class") ? json["senator_class"] : throw FormatException('Missing required property')), |
| 118 | 118 | senatorRank: (json.containsKey("senator_rank") ? json["senator_rank"] : throw FormatException('Missing required property')), |
| 119 | - startdate: DateTime.parse(json["startdate"]), | |
| 119 | + startdate: _parseDateTime(json["startdate"]), | |
| 120 | 120 | state: json["state"], |
| 121 | 121 | title: titleValues.map[json["title"]]!, |
| 122 | 122 | titleLong: roleTypeLabelValues.map[json["title_long"]]!, |
| @@ -233,7 +233,7 @@ class Person { | ||
| 233 | 233 | |
| 234 | 234 | factory Person.fromJson(Map<String, dynamic> json) => Person( |
| 235 | 235 | bioguideid: json["bioguideid"], |
| 236 | - birthday: DateTime.parse(json["birthday"]), | |
| 236 | + birthday: _parseDateTime(json["birthday"]), | |
| 237 | 237 | cspanid: json["cspanid"], |
| 238 | 238 | firstname: json["firstname"], |
| 239 | 239 | gender: genderValues.map[json["gender"]]!, |
| @@ -351,3 +351,10 @@ class EnumValues<T> { | ||
| 351 | 351 | return reverseMap; |
| 352 | 352 | } |
| 353 | 353 | } |
| 354 | + | |
| 355 | +DateTime _parseDateTime(String value) { | |
| 356 | + final date = value.substring(0, 10); | |
| 357 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 358 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 359 | + return DateTime.parse(value.toUpperCase()); | |
| 360 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/262f0.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -439,3 +439,10 @@ class EnumValues<T> { | ||
| 439 | 439 | return reverseMap; |
| 440 | 440 | } |
| 441 | 441 | } |
| 442 | + | |
| 443 | +DateTime _parseDateTime(String value) { | |
| 444 | + final date = value.substring(0, 10); | |
| 445 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 446 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 447 | + return DateTime.parse(value.toUpperCase()); | |
| 448 | +} |
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 | } |
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 · +25 −3test/inputs/json/misc/2d4e2.json
Mdartdefault / TopLevel.dart+10 −3
| @@ -109,7 +109,7 @@ class Object { | ||
| 109 | 109 | current: json["current"], |
| 110 | 110 | description: json["description"], |
| 111 | 111 | district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')), |
| 112 | - enddate: DateTime.parse(json["enddate"]), | |
| 112 | + enddate: _parseDateTime(json["enddate"]), | |
| 113 | 113 | extra: Extra.fromJson(json["extra"]), |
| 114 | 114 | id: json["id"], |
| 115 | 115 | leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')), |
| @@ -122,7 +122,7 @@ class Object { | ||
| 122 | 122 | senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!, |
| 123 | 123 | senatorRank: senatorRankValues.map[json["senator_rank"]]!, |
| 124 | 124 | senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!, |
| 125 | - startdate: DateTime.parse(json["startdate"]), | |
| 125 | + startdate: _parseDateTime(json["startdate"]), | |
| 126 | 126 | state: json["state"], |
| 127 | 127 | title: titleValues.map[json["title"]]!, |
| 128 | 128 | titleLong: roleTypeLabelValues.map[json["title_long"]]!, |
| @@ -243,7 +243,7 @@ class Person { | ||
| 243 | 243 | |
| 244 | 244 | factory Person.fromJson(Map<String, dynamic> json) => Person( |
| 245 | 245 | bioguideid: json["bioguideid"], |
| 246 | - birthday: DateTime.parse(json["birthday"]), | |
| 246 | + birthday: _parseDateTime(json["birthday"]), | |
| 247 | 247 | cspanid: json["cspanid"], |
| 248 | 248 | firstname: json["firstname"], |
| 249 | 249 | gender: genderValues.map[json["gender"]]!, |
| @@ -395,3 +395,10 @@ class EnumValues<T> { | ||
| 395 | 395 | return reverseMap; |
| 396 | 396 | } |
| 397 | 397 | } |
| 398 | + | |
| 399 | +DateTime _parseDateTime(String value) { | |
| 400 | + final date = value.substring(0, 10); | |
| 401 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 402 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 403 | + return DateTime.parse(value.toUpperCase()); | |
| 404 | +} |
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 | } |
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
3 generated files · +15 −0test/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 | } |
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 · +23 −1test/inputs/json/misc/32d5c.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -30,7 +30,7 @@ class TopLevel { | ||
| 30 | 30 | }); |
| 31 | 31 | |
| 32 | 32 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 33 | - birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))), | |
| 33 | + birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))), | |
| 34 | 34 | birthDateIsProtected: json["BirthDateIsProtected"], |
| 35 | 35 | genderTypeId: json["GenderTypeID"], |
| 36 | 36 | notes: json["Notes"], |
| @@ -51,3 +51,10 @@ class TopLevel { | ||
| 51 | 51 | "PreferredName": preferredName, |
| 52 | 52 | }; |
| 53 | 53 | } |
| 54 | + | |
| 55 | +DateTime _parseDateTime(String value) { | |
| 56 | + final date = value.substring(0, 10); | |
| 57 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 58 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 59 | + return DateTime.parse(value.toUpperCase()); | |
| 60 | +} |
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 · +28 −6test/inputs/json/misc/337ed.json
Mdartdefault / TopLevel.dart+13 −6
| @@ -131,11 +131,11 @@ class Result { | ||
| 131 | 131 | costAbsolute: (json.containsKey("cost_absolute") ? json["cost_absolute"] : throw FormatException('Missing required property')), |
| 132 | 132 | costMax: (json.containsKey("cost_max") ? json["cost_max"] : throw FormatException('Missing required property')), |
| 133 | 133 | costMin: (json.containsKey("cost_min") ? json["cost_min"] : throw FormatException('Missing required property')), |
| 134 | - createdAt: DateTime.parse(json["created_at"]), | |
| 134 | + createdAt: _parseDateTime(json["created_at"]), | |
| 135 | 135 | customIncomes: List<CustomIncome>.from(json["customIncomes"].map((x) => CustomIncome.fromJson(x))), |
| 136 | 136 | directRepCostsMax: (json.containsKey("direct_rep_costs_max") ? json["direct_rep_costs_max"] : throw FormatException('Missing required property')), |
| 137 | 137 | directRepCostsMin: (json.containsKey("direct_rep_costs_min") ? json["direct_rep_costs_min"] : throw FormatException('Missing required property')), |
| 138 | - endDate: DateTime.parse(json["end_date"]), | |
| 138 | + endDate: _parseDateTime(json["end_date"]), | |
| 139 | 139 | eurSourcesGrants: json["eur_sources_grants"], |
| 140 | 140 | eurSourcesGrantsSrc: (json.containsKey("eur_sources_grants_src") ? json["eur_sources_grants_src"] : throw FormatException('Missing required property')), |
| 141 | 141 | eurSourcesProcurement: json["eur_sources_procurement"], |
| @@ -151,14 +151,14 @@ class Result { | ||
| 151 | 151 | publicFinancingNational: (json.containsKey("public_financing_national") ? json["public_financing_national"] : throw FormatException('Missing required property')), |
| 152 | 152 | publicFinancingTotal: (json.containsKey("public_financing_total") ? json["public_financing_total"] : throw FormatException('Missing required property')), |
| 153 | 153 | representative: json["representative"], |
| 154 | - startDate: DateTime.parse(json["start_date"]), | |
| 154 | + startDate: _parseDateTime(json["start_date"]), | |
| 155 | 155 | status: statusValues.map[json["status"]]!, |
| 156 | 156 | totalBudget: (json.containsKey("total_budget") ? json["total_budget"] : throw FormatException('Missing required property')), |
| 157 | 157 | turnoverAbsolute: (json.containsKey("turnover_absolute") ? json["turnover_absolute"] : throw FormatException('Missing required property')), |
| 158 | 158 | turnoverMax: (json.containsKey("turnover_max") ? json["turnover_max"] : throw FormatException('Missing required property')), |
| 159 | 159 | turnoverMin: (json.containsKey("turnover_min") ? json["turnover_min"] : throw FormatException('Missing required property')), |
| 160 | 160 | type: resultTypeValues.map[json["type"]]!, |
| 161 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 161 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 162 | 162 | uri: json["uri"], |
| 163 | 163 | ); |
| 164 | 164 | |
| @@ -221,12 +221,12 @@ class CustomIncome { | ||
| 221 | 221 | |
| 222 | 222 | factory CustomIncome.fromJson(Map<String, dynamic> json) => CustomIncome( |
| 223 | 223 | amount: json["amount"], |
| 224 | - createdAt: DateTime.parse(json["created_at"]), | |
| 224 | + createdAt: _parseDateTime(json["created_at"]), | |
| 225 | 225 | id: json["id"], |
| 226 | 226 | name: json["name"], |
| 227 | 227 | status: statusValues.map[json["status"]]!, |
| 228 | 228 | type: customIncomeTypeValues.map[json["type"]]!, |
| 229 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 229 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 230 | 230 | uri: json["uri"], |
| 231 | 231 | ); |
| 232 | 232 | |
| @@ -285,3 +285,10 @@ class EnumValues<T> { | ||
| 285 | 285 | return reverseMap; |
| 286 | 286 | } |
| 287 | 287 | } |
| 288 | + | |
| 289 | +DateTime _parseDateTime(String value) { | |
| 290 | + final date = value.substring(0, 10); | |
| 291 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 292 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 293 | + return DateTime.parse(value.toUpperCase()); | |
| 294 | +} |
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 | } |
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
3 generated files · +15 −0test/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 | } |
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 · +23 −1test/inputs/json/misc/3659d.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +23 −1test/inputs/json/misc/3f1ce.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -435,3 +435,10 @@ class EnumValues<T> { | ||
| 435 | 435 | return reverseMap; |
| 436 | 436 | } |
| 437 | 437 | } |
| 438 | + | |
| 439 | +DateTime _parseDateTime(String value) { | |
| 440 | + final date = value.substring(0, 10); | |
| 441 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 442 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 443 | + return DateTime.parse(value.toUpperCase()); | |
| 444 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/43eaf.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/4961a.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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 · +23 −1test/inputs/json/misc/4a0d7.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +23 −1test/inputs/json/misc/4c547.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/4e336.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +24 −2test/inputs/json/misc/54d32.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -76,12 +76,12 @@ class Result { | ||
| 76 | 76 | }); |
| 77 | 77 | |
| 78 | 78 | factory Result.fromJson(Map<String, dynamic> json) => Result( |
| 79 | - createdAt: DateTime.parse(json["created_at"]), | |
| 79 | + createdAt: _parseDateTime(json["created_at"]), | |
| 80 | 80 | id: json["id"], |
| 81 | 81 | personId: json["person_id"], |
| 82 | 82 | representativeId: json["representative_id"], |
| 83 | 83 | status: statusValues.map[json["status"]]!, |
| 84 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 84 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 85 | 85 | ); |
| 86 | 86 | |
| 87 | 87 | Map<String, dynamic> toJson() => { |
| @@ -115,3 +115,10 @@ class EnumValues<T> { | ||
| 115 | 115 | return reverseMap; |
| 116 | 116 | } |
| 117 | 117 | } |
| 118 | + | |
| 119 | +DateTime _parseDateTime(String value) { | |
| 120 | + final date = value.substring(0, 10); | |
| 121 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 122 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 123 | + return DateTime.parse(value.toUpperCase()); | |
| 124 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/5eae5.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -22,7 +22,7 @@ class TopLevel { | ||
| 22 | 22 | }); |
| 23 | 23 | |
| 24 | 24 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 25 | - date: DateTime.parse(json["Date"]), | |
| 25 | + date: _parseDateTime(json["Date"]), | |
| 26 | 26 | id: json["ID"], |
| 27 | 27 | sponsor: json["Sponsor"], |
| 28 | 28 | title: json["Title"], |
| @@ -35,3 +35,10 @@ class TopLevel { | ||
| 35 | 35 | "Title": title, |
| 36 | 36 | }; |
| 37 | 37 | } |
| 38 | + | |
| 39 | +DateTime _parseDateTime(String value) { | |
| 40 | + final date = value.substring(0, 10); | |
| 41 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 42 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 43 | + return DateTime.parse(value.toUpperCase()); | |
| 44 | +} |
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/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 · +23 −1test/inputs/json/misc/5f3a1.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/6260a.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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
4 generated files · +24 −2test/inputs/json/misc/65dec.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -45,7 +45,7 @@ class TopLevel { | ||
| 45 | 45 | mkmId: json["mkm_id"], |
| 46 | 46 | mkmName: json["mkm_name"], |
| 47 | 47 | name: json["name"], |
| 48 | - releaseDate: DateTime.parse(json["releaseDate"]), | |
| 48 | + releaseDate: _parseDateTime(json["releaseDate"]), | |
| 49 | 49 | type: json["type"], |
| 50 | 50 | ); |
| 51 | 51 | |
| @@ -284,7 +284,7 @@ class Ruling { | ||
| 284 | 284 | }); |
| 285 | 285 | |
| 286 | 286 | factory Ruling.fromJson(Map<String, dynamic> json) => Ruling( |
| 287 | - date: DateTime.parse(json["date"]), | |
| 287 | + date: _parseDateTime(json["date"]), | |
| 288 | 288 | text: json["text"], |
| 289 | 289 | ); |
| 290 | 290 | |
| @@ -323,3 +323,10 @@ class EnumValues<T> { | ||
| 323 | 323 | return reverseMap; |
| 324 | 324 | } |
| 325 | 325 | } |
| 326 | + | |
| 327 | +DateTime _parseDateTime(String value) { | |
| 328 | + final date = value.substring(0, 10); | |
| 329 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 330 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 331 | + return DateTime.parse(value.toUpperCase()); | |
| 332 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/6dec6.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -439,3 +439,10 @@ class EnumValues<T> { | ||
| 439 | 439 | return reverseMap; |
| 440 | 440 | } |
| 441 | 441 | } |
| 442 | + | |
| 443 | +DateTime _parseDateTime(String value) { | |
| 444 | + final date = value.substring(0, 10); | |
| 445 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 446 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 447 | + return DateTime.parse(value.toUpperCase()); | |
| 448 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/70c77.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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
4 generated files · +26 −4test/inputs/json/misc/734ad.json
Mdartdefault / TopLevel.dart+11 −4
| @@ -199,7 +199,7 @@ class Result { | ||
| 199 | 199 | beOfficeTown: json["be_office_town"], |
| 200 | 200 | codeOfConduct: json["code_of_conduct"], |
| 201 | 201 | contactCountry: json["contact_country"], |
| 202 | - createdAt: DateTime.parse(json["created_at"]), | |
| 202 | + createdAt: _parseDateTime(json["created_at"]), | |
| 203 | 203 | entity: json["entity"], |
| 204 | 204 | goals: json["goals"], |
| 205 | 205 | head: json["head"], |
| @@ -214,7 +214,7 @@ class Result { | ||
| 214 | 214 | id: json["id"], |
| 215 | 215 | identificationCode: json["identification_code"], |
| 216 | 216 | infoMembers: json["info_members"], |
| 217 | - lastUpdateDate: DateTime.parse(json["last_update_date"]), | |
| 217 | + lastUpdateDate: _parseDateTime(json["last_update_date"]), | |
| 218 | 218 | legal: json["legal"], |
| 219 | 219 | legalStatus: json["legal_status"], |
| 220 | 220 | mainCategory: json["main_category"], |
| @@ -230,12 +230,12 @@ class Result { | ||
| 230 | 230 | networking: (json.containsKey("networking") ? json["networking"] : throw FormatException('Missing required property')), |
| 231 | 231 | numberOfNaturalPersons: (json.containsKey("number_of_natural_persons") ? json["number_of_natural_persons"] : throw FormatException('Missing required property')), |
| 232 | 232 | otherCodeOfConduct: (json.containsKey("other_code_of_conduct") ? json["other_code_of_conduct"] : throw FormatException('Missing required property')), |
| 233 | - registrationDate: DateTime.parse(json["registration_date"]), | |
| 233 | + registrationDate: _parseDateTime(json["registration_date"]), | |
| 234 | 234 | status: statusValues.map[json["status"]]!, |
| 235 | 235 | structureMembers: json["structure_members"], |
| 236 | 236 | subCategory: json["sub_category"], |
| 237 | 237 | subCategoryTitle: json["sub_category_title"], |
| 238 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 238 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 239 | 239 | uri: json["uri"], |
| 240 | 240 | webSiteUrl: (json.containsKey("web_site_url") ? json["web_site_url"] : throw FormatException('Missing required property')), |
| 241 | 241 | ); |
| @@ -323,3 +323,10 @@ class EnumValues<T> { | ||
| 323 | 323 | return reverseMap; |
| 324 | 324 | } |
| 325 | 325 | } |
| 326 | + | |
| 327 | +DateTime _parseDateTime(String value) { | |
| 328 | + final date = value.substring(0, 10); | |
| 329 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 330 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 331 | + return DateTime.parse(value.toUpperCase()); | |
| 332 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/75912.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/77392.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -35,7 +35,7 @@ class TopLevel { | ||
| 35 | 35 | |
| 36 | 36 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 37 | 37 | designation: json["designation"], |
| 38 | - discoveryDate: DateTime.parse(json["discovery_date"]), | |
| 38 | + discoveryDate: _parseDateTime(json["discovery_date"]), | |
| 39 | 39 | hMag: json["h_mag"], |
| 40 | 40 | iDeg: json["i_deg"], |
| 41 | 41 | moidAu: json["moid_au"], |
| @@ -107,3 +107,10 @@ class EnumValues<T> { | ||
| 107 | 107 | return reverseMap; |
| 108 | 108 | } |
| 109 | 109 | } |
| 110 | + | |
| 111 | +DateTime _parseDateTime(String value) { | |
| 112 | + final date = value.substring(0, 10); | |
| 113 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 114 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 115 | + return DateTime.parse(value.toUpperCase()); | |
| 116 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/7dfa6.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +24 −2test/inputs/json/misc/7f568.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -49,7 +49,7 @@ class TopLevel { | ||
| 49 | 49 | comments: json["comments"], |
| 50 | 50 | commentsUrl: json["comments_url"], |
| 51 | 51 | commitsUrl: json["commits_url"], |
| 52 | - createdAt: DateTime.parse(json["created_at"]), | |
| 52 | + createdAt: _parseDateTime(json["created_at"]), | |
| 53 | 53 | description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')), |
| 54 | 54 | files: Map.from(json["files"]).map((k, v) => MapEntry<String, FileValue>(k, FileValue.fromJson(v))), |
| 55 | 55 | forksUrl: json["forks_url"], |
| @@ -59,7 +59,7 @@ class TopLevel { | ||
| 59 | 59 | id: json["id"], |
| 60 | 60 | public: json["public"], |
| 61 | 61 | truncated: json["truncated"], |
| 62 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 62 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 63 | 63 | url: json["url"], |
| 64 | 64 | user: (json.containsKey("user") ? json["user"] : throw FormatException('Missing required property')), |
| 65 | 65 | ); |
| @@ -143,3 +143,10 @@ class EnumValues<T> { | ||
| 143 | 143 | return reverseMap; |
| 144 | 144 | } |
| 145 | 145 | } |
| 146 | + | |
| 147 | +DateTime _parseDateTime(String value) { | |
| 148 | + final date = value.substring(0, 10); | |
| 149 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 150 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 151 | + return DateTime.parse(value.toUpperCase()); | |
| 152 | +} |
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
| @@ -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 · +24 −2test/inputs/json/misc/80aff.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -78,12 +78,12 @@ class Result { | ||
| 78 | 78 | }); |
| 79 | 79 | |
| 80 | 80 | factory Result.fromJson(Map<String, dynamic> json) => Result( |
| 81 | - createdAt: DateTime.parse(json["created_at"]), | |
| 81 | + createdAt: _parseDateTime(json["created_at"]), | |
| 82 | 82 | id: json["id"], |
| 83 | 83 | items: json["items"], |
| 84 | 84 | name: json["name"], |
| 85 | 85 | parent: (json.containsKey("parent") ? json["parent"] : throw FormatException('Missing required property')), |
| 86 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 86 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 87 | 87 | uri: json["uri"], |
| 88 | 88 | ); |
| 89 | 89 | |
| @@ -97,3 +97,10 @@ class Result { | ||
| 97 | 97 | "uri": uri, |
| 98 | 98 | }; |
| 99 | 99 | } |
| 100 | + | |
| 101 | +DateTime _parseDateTime(String value) { | |
| 102 | + final date = value.substring(0, 10); | |
| 103 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 104 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 105 | + return DateTime.parse(value.toUpperCase()); | |
| 106 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/88130.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/8a62c.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +23 −1test/inputs/json/misc/9617f.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/9929c.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +24 −2test/inputs/json/misc/9ac3b.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -86,7 +86,7 @@ class Result { | ||
| 86 | 86 | }); |
| 87 | 87 | |
| 88 | 88 | factory Result.fromJson(Map<String, dynamic> json) => Result( |
| 89 | - createdAt: DateTime.parse(json["created_at"]), | |
| 89 | + createdAt: _parseDateTime(json["created_at"]), | |
| 90 | 90 | entity: json["entity"], |
| 91 | 91 | firstName: json["first_name"], |
| 92 | 92 | id: json["id"], |
| @@ -95,7 +95,7 @@ class Result { | ||
| 95 | 95 | position: (json.containsKey("position") ? json["position"] : throw FormatException('Missing required property')), |
| 96 | 96 | status: statusValues.map[json["status"]]!, |
| 97 | 97 | title: (json.containsKey("title") ? json["title"] : throw FormatException('Missing required property')) == null ? null : titleValues.map[(json.containsKey("title") ? json["title"] : throw FormatException('Missing required property'))]!, |
| 98 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 98 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 99 | 99 | uri: json["uri"], |
| 100 | 100 | ); |
| 101 | 101 | |
| @@ -145,3 +145,10 @@ class EnumValues<T> { | ||
| 145 | 145 | return reverseMap; |
| 146 | 146 | } |
| 147 | 147 | } |
| 148 | + | |
| 149 | +DateTime _parseDateTime(String value) { | |
| 150 | + final date = value.substring(0, 10); | |
| 151 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 152 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 153 | + return DateTime.parse(value.toUpperCase()); | |
| 154 | +} |
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
| @@ -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 · +25 −3test/inputs/json/misc/a0496.json
Mdartdefault / TopLevel.dart+10 −3
| @@ -55,15 +55,15 @@ class TopLevel { | ||
| 55 | 55 | displayUrl: json["display_url"], |
| 56 | 56 | errors: Errors.fromJson(json["errors"]), |
| 57 | 57 | frequency: json["frequency"], |
| 58 | - fromDate: DateTime.parse(json["from_date"]), | |
| 58 | + fromDate: _parseDateTime(json["from_date"]), | |
| 59 | 59 | id: json["id"], |
| 60 | 60 | name: json["name"], |
| 61 | 61 | premium: json["premium"], |
| 62 | 62 | sourceCode: json["source_code"], |
| 63 | 63 | sourceName: json["source_name"], |
| 64 | - toDate: DateTime.parse(json["to_date"]), | |
| 64 | + toDate: _parseDateTime(json["to_date"]), | |
| 65 | 65 | type: json["type"], |
| 66 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 66 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 67 | 67 | urlizeName: json["urlize_name"], |
| 68 | 68 | ); |
| 69 | 69 | |
| @@ -97,3 +97,10 @@ class Errors { | ||
| 97 | 97 | Map<String, dynamic> toJson() => { |
| 98 | 98 | }; |
| 99 | 99 | } |
| 100 | + | |
| 101 | +DateTime _parseDateTime(String value) { | |
| 102 | + final date = value.substring(0, 10); | |
| 103 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 104 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 105 | + return DateTime.parse(value.toUpperCase()); | |
| 106 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/a1eca.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/a9691.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/abb4b.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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 · +23 −1test/inputs/json/misc/ac944.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/b4865.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -49,7 +49,7 @@ class TopLevel { | ||
| 49 | 49 | recclass: json["recclass"], |
| 50 | 50 | reclat: json["reclat"], |
| 51 | 51 | reclong: json["reclong"], |
| 52 | - year: json["year"] == null ? null : DateTime.parse(json["year"]), | |
| 52 | + year: json["year"] == null ? null : _parseDateTime(json["year"]), | |
| 53 | 53 | ); |
| 54 | 54 | |
| 55 | 55 | Map<String, dynamic> toJson() => { |
| @@ -125,3 +125,10 @@ class EnumValues<T> { | ||
| 125 | 125 | return reverseMap; |
| 126 | 126 | } |
| 127 | 127 | } |
| 128 | + | |
| 129 | +DateTime _parseDateTime(String value) { | |
| 130 | + final date = value.substring(0, 10); | |
| 131 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 132 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 133 | + return DateTime.parse(value.toUpperCase()); | |
| 134 | +} |
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 · +23 −1test/inputs/json/misc/b6f2c.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +23 −1test/inputs/json/misc/bb1ec.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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 · +23 −1test/inputs/json/misc/cd463.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +23 −1test/inputs/json/misc/cf0d8.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/cfbce.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -21,7 +21,7 @@ class TopLevel { | ||
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | 23 | base: json["base"], |
| 24 | - date: DateTime.parse(json["date"]), | |
| 24 | + date: _parseDateTime(json["date"]), | |
| 25 | 25 | rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())), |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)), |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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
4 generated files · +23 −1test/inputs/json/misc/d0908.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -34,7 +34,7 @@ class TotalPopulation { | ||
| 34 | 34 | }); |
| 35 | 35 | |
| 36 | 36 | factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation( |
| 37 | - date: DateTime.parse(json["date"]), | |
| 37 | + date: _parseDateTime(json["date"]), | |
| 38 | 38 | population: json["population"], |
| 39 | 39 | ); |
| 40 | 40 | |
| @@ -43,3 +43,10 @@ class TotalPopulation { | ||
| 43 | 43 | "population": population, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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 · +24 −2test/inputs/json/misc/d23d5.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -77,10 +77,10 @@ class Result { | ||
| 77 | 77 | |
| 78 | 78 | factory Result.fromJson(Map<String, dynamic> json) => Result( |
| 79 | 79 | acronym: (json.containsKey("acronym") ? json["acronym"] : throw FormatException('Missing required property')), |
| 80 | - createdAt: DateTime.parse(json["created_at"]), | |
| 80 | + createdAt: _parseDateTime(json["created_at"]), | |
| 81 | 81 | id: json["id"], |
| 82 | 82 | name: json["name"], |
| 83 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 83 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 84 | 84 | uri: json["uri"], |
| 85 | 85 | ); |
| 86 | 86 | |
| @@ -93,3 +93,10 @@ class Result { | ||
| 93 | 93 | "uri": uri, |
| 94 | 94 | }; |
| 95 | 95 | } |
| 96 | + | |
| 97 | +DateTime _parseDateTime(String value) { | |
| 98 | + final date = value.substring(0, 10); | |
| 99 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 100 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 101 | + return DateTime.parse(value.toUpperCase()); | |
| 102 | +} |
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 | } |
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 −1test/inputs/json/misc/dbfb3.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -437,3 +437,10 @@ class EnumValues<T> { | ||
| 437 | 437 | return reverseMap; |
| 438 | 438 | } |
| 439 | 439 | } |
| 440 | + | |
| 441 | +DateTime _parseDateTime(String value) { | |
| 442 | + final date = value.substring(0, 10); | |
| 443 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 444 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 445 | + return DateTime.parse(value.toUpperCase()); | |
| 446 | +} |
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 | } |
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 · +24 −2test/inputs/json/misc/dc44f.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -45,7 +45,7 @@ class TopLevel { | ||
| 45 | 45 | mkmId: json["mkm_id"], |
| 46 | 46 | mkmName: json["mkm_name"], |
| 47 | 47 | name: json["name"], |
| 48 | - releaseDate: DateTime.parse(json["releaseDate"]), | |
| 48 | + releaseDate: _parseDateTime(json["releaseDate"]), | |
| 49 | 49 | type: json["type"], |
| 50 | 50 | ); |
| 51 | 51 | |
| @@ -358,7 +358,7 @@ class Ruling { | ||
| 358 | 358 | }); |
| 359 | 359 | |
| 360 | 360 | factory Ruling.fromJson(Map<String, dynamic> json) => Ruling( |
| 361 | - date: DateTime.parse(json["date"]), | |
| 361 | + date: _parseDateTime(json["date"]), | |
| 362 | 362 | text: json["text"], |
| 363 | 363 | ); |
| 364 | 364 | |
| @@ -405,3 +405,10 @@ class EnumValues<T> { | ||
| 405 | 405 | return reverseMap; |
| 406 | 406 | } |
| 407 | 407 | } |
| 408 | + | |
| 409 | +DateTime _parseDateTime(String value) { | |
| 410 | + final date = value.substring(0, 10); | |
| 411 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 412 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 413 | + return DateTime.parse(value.toUpperCase()); | |
| 414 | +} |
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 | } |
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 · +24 −2test/inputs/json/misc/dd1ce.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -45,7 +45,7 @@ class TopLevel { | ||
| 45 | 45 | mkmId: json["mkm_id"], |
| 46 | 46 | mkmName: json["mkm_name"], |
| 47 | 47 | name: json["name"], |
| 48 | - releaseDate: DateTime.parse(json["releaseDate"]), | |
| 48 | + releaseDate: _parseDateTime(json["releaseDate"]), | |
| 49 | 49 | type: json["type"], |
| 50 | 50 | ); |
| 51 | 51 | |
| @@ -358,7 +358,7 @@ class Ruling { | ||
| 358 | 358 | }); |
| 359 | 359 | |
| 360 | 360 | factory Ruling.fromJson(Map<String, dynamic> json) => Ruling( |
| 361 | - date: DateTime.parse(json["date"]), | |
| 361 | + date: _parseDateTime(json["date"]), | |
| 362 | 362 | text: json["text"], |
| 363 | 363 | ); |
| 364 | 364 | |
| @@ -405,3 +405,10 @@ class EnumValues<T> { | ||
| 405 | 405 | return reverseMap; |
| 406 | 406 | } |
| 407 | 407 | } |
| 408 | + | |
| 409 | +DateTime _parseDateTime(String value) { | |
| 410 | + final date = value.substring(0, 10); | |
| 411 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 412 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 413 | + return DateTime.parse(value.toUpperCase()); | |
| 414 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/df957.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -415,3 +415,10 @@ class Wind { | ||
| 415 | 415 | "speed": speed, |
| 416 | 416 | }; |
| 417 | 417 | } |
| 418 | + | |
| 419 | +DateTime _parseDateTime(String value) { | |
| 420 | + final date = value.substring(0, 10); | |
| 421 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 422 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 423 | + return DateTime.parse(value.toUpperCase()); | |
| 424 | +} |
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 | } |
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 · +23 −1test/inputs/json/misc/e2915.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Query { | ||
| 39 | 39 | |
| 40 | 40 | factory Query.fromJson(Map<String, dynamic> json) => Query( |
| 41 | 41 | count: json["count"], |
| 42 | - created: DateTime.parse(json["created"]), | |
| 42 | + created: _parseDateTime(json["created"]), | |
| 43 | 43 | lang: json["lang"], |
| 44 | 44 | results: Results.fromJson(json["results"]), |
| 45 | 45 | ); |
| @@ -435,3 +435,10 @@ class EnumValues<T> { | ||
| 435 | 435 | return reverseMap; |
| 436 | 436 | } |
| 437 | 437 | } |
| 438 | + | |
| 439 | +DateTime _parseDateTime(String value) { | |
| 440 | + final date = value.substring(0, 10); | |
| 441 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 442 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 443 | + return DateTime.parse(value.toUpperCase()); | |
| 444 | +} |
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 | } |
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 · +24 −2test/inputs/json/priority/bug2590.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -36,8 +36,8 @@ class Invoice { | ||
| 36 | 36 | }); |
| 37 | 37 | |
| 38 | 38 | factory Invoice.fromJson(Map<String, dynamic> json) => Invoice( |
| 39 | - createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))), | |
| 40 | - dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))), | |
| 39 | + createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))), | |
| 40 | + dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))), | |
| 41 | 41 | name: json["name"], |
| 42 | 42 | ); |
| 43 | 43 | |
| @@ -47,3 +47,10 @@ class Invoice { | ||
| 47 | 47 | "name": name, |
| 48 | 48 | }; |
| 49 | 49 | } |
| 50 | + | |
| 51 | +DateTime _parseDateTime(String value) { | |
| 52 | + final date = value.substring(0, 10); | |
| 53 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 54 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 55 | + return DateTime.parse(value.toUpperCase()); | |
| 56 | +} |
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
4 generated files · +24 −2test/inputs/json/priority/bug2663.json
Mdartdefault / TopLevel.dart+9 −2
| @@ -20,8 +20,8 @@ class TopLevel { | ||
| 20 | 20 | }); |
| 21 | 21 | |
| 22 | 22 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 23 | - birthday: DateTime.parse(json["birthday"]), | |
| 24 | - lastSeen: DateTime.parse(json["lastSeen"]), | |
| 23 | + birthday: _parseDateTime(json["birthday"]), | |
| 24 | + lastSeen: _parseDateTime(json["lastSeen"]), | |
| 25 | 25 | name: json["name"], |
| 26 | 26 | ); |
| 27 | 27 | |
| @@ -31,3 +31,10 @@ class TopLevel { | ||
| 31 | 31 | "name": name, |
| 32 | 32 | }; |
| 33 | 33 | } |
| 34 | + | |
| 35 | +DateTime _parseDateTime(String value) { | |
| 36 | + final date = value.substring(0, 10); | |
| 37 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 38 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 39 | + return DateTime.parse(value.toUpperCase()); | |
| 40 | +} |
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/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 · +28 −1test/inputs/json/priority/keywords.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -1688,7 +1688,7 @@ class DateTimeClass { | ||
| 1688 | 1688 | }); |
| 1689 | 1689 | |
| 1690 | 1690 | factory DateTimeClass.fromJson(Map<String, dynamic> json) => DateTimeClass( |
| 1691 | - dateTime: DateTime.parse(json["DateTime"]), | |
| 1691 | + dateTime: _parseDateTime(json["DateTime"]), | |
| 1692 | 1692 | ); |
| 1693 | 1693 | |
| 1694 | 1694 | Map<String, dynamic> toJson() => { |
| @@ -6805,3 +6805,10 @@ class EnumValues<T> { | ||
| 6805 | 6805 | return reverseMap; |
| 6806 | 6806 | } |
| 6807 | 6807 | } |
| 6808 | + | |
| 6809 | +DateTime _parseDateTime(String value) { | |
| 6810 | + final date = value.substring(0, 10); | |
| 6811 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 6812 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 6813 | + return DateTime.parse(value.toUpperCase()); | |
| 6814 | +} |
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 | } |
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 · +38 −16test/inputs/json/samples/github-events.json
Mdartdefault / TopLevel.dart+23 −16
| @@ -31,7 +31,7 @@ class TopLevel { | ||
| 31 | 31 | |
| 32 | 32 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 33 | 33 | actor: Actor.fromJson(json["actor"]), |
| 34 | - createdAt: DateTime.parse(json["created_at"]), | |
| 34 | + createdAt: _parseDateTime(json["created_at"]), | |
| 35 | 35 | id: json["id"], |
| 36 | 36 | org: json["org"] == null ? null : Actor.fromJson(json["org"]), |
| 37 | 37 | payload: Payload.fromJson(json["payload"]), |
| @@ -187,11 +187,11 @@ class Comment { | ||
| 187 | 187 | |
| 188 | 188 | factory Comment.fromJson(Map<String, dynamic> json) => Comment( |
| 189 | 189 | body: json["body"], |
| 190 | - createdAt: DateTime.parse(json["created_at"]), | |
| 190 | + createdAt: _parseDateTime(json["created_at"]), | |
| 191 | 191 | htmlUrl: json["html_url"], |
| 192 | 192 | id: json["id"], |
| 193 | 193 | issueUrl: json["issue_url"], |
| 194 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 194 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 195 | 195 | url: json["url"], |
| 196 | 196 | user: User.fromJson(json["user"]), |
| 197 | 197 | ); |
| @@ -403,10 +403,10 @@ class Issue { | ||
| 403 | 403 | assignee: (json.containsKey("assignee") ? json["assignee"] : throw FormatException('Missing required property')), |
| 404 | 404 | assignees: List<dynamic>.from(json["assignees"].map((x) => x)), |
| 405 | 405 | body: json["body"], |
| 406 | - closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))), | |
| 406 | + closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))), | |
| 407 | 407 | comments: json["comments"], |
| 408 | 408 | commentsUrl: json["comments_url"], |
| 409 | - createdAt: DateTime.parse(json["created_at"]), | |
| 409 | + createdAt: _parseDateTime(json["created_at"]), | |
| 410 | 410 | eventsUrl: json["events_url"], |
| 411 | 411 | htmlUrl: json["html_url"], |
| 412 | 412 | id: json["id"], |
| @@ -419,7 +419,7 @@ class Issue { | ||
| 419 | 419 | repositoryUrl: json["repository_url"], |
| 420 | 420 | state: json["state"], |
| 421 | 421 | title: json["title"], |
| 422 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 422 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 423 | 423 | url: json["url"], |
| 424 | 424 | user: User.fromJson(json["user"]), |
| 425 | 425 | ); |
| @@ -520,10 +520,10 @@ class Milestone { | ||
| 520 | 520 | factory Milestone.fromJson(Map<String, dynamic> json) => Milestone( |
| 521 | 521 | closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')), |
| 522 | 522 | closedIssues: json["closed_issues"], |
| 523 | - createdAt: DateTime.parse(json["created_at"]), | |
| 523 | + createdAt: _parseDateTime(json["created_at"]), | |
| 524 | 524 | creator: User.fromJson(json["creator"]), |
| 525 | 525 | description: json["description"], |
| 526 | - dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))), | |
| 526 | + dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))), | |
| 527 | 527 | htmlUrl: json["html_url"], |
| 528 | 528 | id: json["id"], |
| 529 | 529 | labelsUrl: json["labels_url"], |
| @@ -531,7 +531,7 @@ class Milestone { | ||
| 531 | 531 | openIssues: json["open_issues"], |
| 532 | 532 | state: json["state"], |
| 533 | 533 | title: json["title"], |
| 534 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 534 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 535 | 535 | url: json["url"], |
| 536 | 536 | ); |
| 537 | 537 | |
| @@ -676,12 +676,12 @@ class PayloadPullRequest { | ||
| 676 | 676 | base: Base.fromJson(json["base"]), |
| 677 | 677 | body: json["body"], |
| 678 | 678 | changedFiles: json["changed_files"], |
| 679 | - closedAt: DateTime.parse(json["closed_at"]), | |
| 679 | + closedAt: _parseDateTime(json["closed_at"]), | |
| 680 | 680 | comments: json["comments"], |
| 681 | 681 | commentsUrl: json["comments_url"], |
| 682 | 682 | commits: json["commits"], |
| 683 | 683 | commitsUrl: json["commits_url"], |
| 684 | - createdAt: DateTime.parse(json["created_at"]), | |
| 684 | + createdAt: _parseDateTime(json["created_at"]), | |
| 685 | 685 | deletions: json["deletions"], |
| 686 | 686 | diffUrl: json["diff_url"], |
| 687 | 687 | head: Base.fromJson(json["head"]), |
| @@ -695,7 +695,7 @@ class PayloadPullRequest { | ||
| 695 | 695 | mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')), |
| 696 | 696 | mergeableState: json["mergeable_state"], |
| 697 | 697 | merged: json["merged"], |
| 698 | - mergedAt: DateTime.parse(json["merged_at"]), | |
| 698 | + mergedAt: _parseDateTime(json["merged_at"]), | |
| 699 | 699 | mergedBy: User.fromJson(json["merged_by"]), |
| 700 | 700 | milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')), |
| 701 | 701 | number: json["number"], |
| @@ -708,7 +708,7 @@ class PayloadPullRequest { | ||
| 708 | 708 | state: json["state"], |
| 709 | 709 | statusesUrl: json["statuses_url"], |
| 710 | 710 | title: json["title"], |
| 711 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 711 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 712 | 712 | url: json["url"], |
| 713 | 713 | user: User.fromJson(json["user"]), |
| 714 | 714 | ); |
| @@ -945,7 +945,7 @@ class BaseRepo { | ||
| 945 | 945 | compareUrl: json["compare_url"], |
| 946 | 946 | contentsUrl: json["contents_url"], |
| 947 | 947 | contributorsUrl: json["contributors_url"], |
| 948 | - createdAt: DateTime.parse(json["created_at"]), | |
| 948 | + createdAt: _parseDateTime(json["created_at"]), | |
| 949 | 949 | defaultBranch: json["default_branch"], |
| 950 | 950 | deploymentsUrl: json["deployments_url"], |
| 951 | 951 | description: json["description"], |
| @@ -986,7 +986,7 @@ class BaseRepo { | ||
| 986 | 986 | owner: User.fromJson(json["owner"]), |
| 987 | 987 | private: json["private"], |
| 988 | 988 | pullsUrl: json["pulls_url"], |
| 989 | - pushedAt: DateTime.parse(json["pushed_at"]), | |
| 989 | + pushedAt: _parseDateTime(json["pushed_at"]), | |
| 990 | 990 | releasesUrl: json["releases_url"], |
| 991 | 991 | size: json["size"], |
| 992 | 992 | sshUrl: json["ssh_url"], |
| @@ -999,7 +999,7 @@ class BaseRepo { | ||
| 999 | 999 | tagsUrl: json["tags_url"], |
| 1000 | 1000 | teamsUrl: json["teams_url"], |
| 1001 | 1001 | treesUrl: json["trees_url"], |
| 1002 | - updatedAt: DateTime.parse(json["updated_at"]), | |
| 1002 | + updatedAt: _parseDateTime(json["updated_at"]), | |
| 1003 | 1003 | url: json["url"], |
| 1004 | 1004 | watchers: json["watchers"], |
| 1005 | 1005 | watchersCount: json["watchers_count"], |
| @@ -1173,3 +1173,10 @@ class EnumValues<T> { | ||
| 1173 | 1173 | return reverseMap; |
| 1174 | 1174 | } |
| 1175 | 1175 | } |
| 1176 | + | |
| 1177 | +DateTime _parseDateTime(String value) { | |
| 1178 | + final date = value.substring(0, 10); | |
| 1179 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 1180 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 1181 | + return DateTime.parse(value.toUpperCase()); | |
| 1182 | +} |
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 | } |
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 · +23 −1test/inputs/json/samples/null-safe.json
Mdartdefault / TopLevel.dart+8 −1
| @@ -39,7 +39,7 @@ class Item { | ||
| 39 | 39 | |
| 40 | 40 | factory Item.fromJson(Map<String, dynamic> json) => Item( |
| 41 | 41 | address: json["address"] == null ? null : Address.fromJson(json["address"]), |
| 42 | - createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), | |
| 42 | + createdAt: json["created_at"] == null ? null : _parseDateTime(json["created_at"]), | |
| 43 | 43 | name: json["name"], |
| 44 | 44 | sex: (json.containsKey("sex") ? json["sex"] : throw FormatException('Missing required property')), |
| 45 | 45 | ); |
| @@ -75,3 +75,10 @@ class Address { | ||
| 75 | 75 | "street": street, |
| 76 | 76 | }; |
| 77 | 77 | } |
| 78 | + | |
| 79 | +DateTime _parseDateTime(String value) { | |
| 80 | + final date = value.substring(0, 10); | |
| 81 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 82 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 83 | + return DateTime.parse(value.toUpperCase()); | |
| 84 | +} |
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/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 · +25 −3test/inputs/json/samples/us-senators.json
Mdartdefault / TopLevel.dart+10 −3
| @@ -107,7 +107,7 @@ class Object { | ||
| 107 | 107 | current: json["current"], |
| 108 | 108 | description: json["description"], |
| 109 | 109 | district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')), |
| 110 | - enddate: DateTime.parse(json["enddate"]), | |
| 110 | + enddate: _parseDateTime(json["enddate"]), | |
| 111 | 111 | extra: Extra.fromJson(json["extra"]), |
| 112 | 112 | leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')), |
| 113 | 113 | party: partyValues.map[json["party"]]!, |
| @@ -119,7 +119,7 @@ class Object { | ||
| 119 | 119 | senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!, |
| 120 | 120 | senatorRank: senatorRankValues.map[json["senator_rank"]]!, |
| 121 | 121 | senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!, |
| 122 | - startdate: DateTime.parse(json["startdate"]), | |
| 122 | + startdate: _parseDateTime(json["startdate"]), | |
| 123 | 123 | state: json["state"], |
| 124 | 124 | title: titleValues.map[json["title"]]!, |
| 125 | 125 | titleLong: roleTypeLabelValues.map[json["title_long"]]!, |
| @@ -237,7 +237,7 @@ class Person { | ||
| 237 | 237 | |
| 238 | 238 | factory Person.fromJson(Map<String, dynamic> json) => Person( |
| 239 | 239 | bioguideid: json["bioguideid"], |
| 240 | - birthday: DateTime.parse(json["birthday"]), | |
| 240 | + birthday: _parseDateTime(json["birthday"]), | |
| 241 | 241 | cspanid: json["cspanid"], |
| 242 | 242 | firstname: json["firstname"], |
| 243 | 243 | gender: genderValues.map[json["gender"]]!, |
| @@ -387,3 +387,10 @@ class EnumValues<T> { | ||
| 387 | 387 | return reverseMap; |
| 388 | 388 | } |
| 389 | 389 | } |
| 390 | + | |
| 391 | +DateTime _parseDateTime(String value) { | |
| 392 | + final date = value.substring(0, 10); | |
| 393 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 394 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 395 | + return DateTime.parse(value.toUpperCase()); | |
| 396 | +} |
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 | } |
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
3 generated files · +15 −0test/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-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 · +24 −2test/inputs/schema/date-time.schema
Mschema-dartdefault / TopLevel.dart+9 −2
| @@ -25,8 +25,8 @@ class TopLevel { | ||
| 25 | 25 | |
| 26 | 26 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 27 | 27 | complexUnionArray: List<dynamic>.from(json["complex-union-array"].map((x) => x)), |
| 28 | - date: DateTime.parse(json["date"]), | |
| 29 | - dateTime: DateTime.parse(json["date-time"]), | |
| 28 | + date: _parseDateTime(json["date"]), | |
| 29 | + dateTime: _parseDateTime(json["date-time"]), | |
| 30 | 30 | time: json["time"], |
| 31 | 31 | unionArray: List<String>.from(json["union-array"].map((x) => x)), |
| 32 | 32 | ); |
| @@ -61,3 +61,10 @@ class EnumValues<T> { | ||
| 61 | 61 | return reverseMap; |
| 62 | 62 | } |
| 63 | 63 | } |
| 64 | + | |
| 65 | +DateTime _parseDateTime(String value) { | |
| 66 | + final date = value.substring(0, 10); | |
| 67 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 68 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 69 | + return DateTime.parse(value.toUpperCase()); | |
| 70 | +} |
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
| @@ -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 · +26 −4test/inputs/schema/optional-date-time.schema
Mschema-dartdefault / TopLevel.dart+11 −4
| @@ -26,11 +26,11 @@ class TopLevel { | ||
| 26 | 26 | }); |
| 27 | 27 | |
| 28 | 28 | factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel( |
| 29 | - optionalDate: json["optional-date"] == null ? null : DateTime.parse(json["optional-date"]), | |
| 30 | - optionalDateTime: json["optional-date-time"] == null ? null : DateTime.parse(json["optional-date-time"]), | |
| 29 | + optionalDate: json["optional-date"] == null ? null : _parseDateTime(json["optional-date"]), | |
| 30 | + optionalDateTime: json["optional-date-time"] == null ? null : _parseDateTime(json["optional-date-time"]), | |
| 31 | 31 | optionalTime: json["optional-time"], |
| 32 | - requiredDate: DateTime.parse(json["required-date"]), | |
| 33 | - requiredDateTime: DateTime.parse(json["required-date-time"]), | |
| 32 | + requiredDate: _parseDateTime(json["required-date"]), | |
| 33 | + requiredDateTime: _parseDateTime(json["required-date-time"]), | |
| 34 | 34 | requiredTime: json["required-time"], |
| 35 | 35 | ); |
| 36 | 36 | |
| @@ -43,3 +43,10 @@ class TopLevel { | ||
| 43 | 43 | "required-time": requiredTime, |
| 44 | 44 | }; |
| 45 | 45 | } |
| 46 | + | |
| 47 | +DateTime _parseDateTime(String value) { | |
| 48 | + final date = value.substring(0, 10); | |
| 49 | + final parsedDate = DateTime.parse(date + 'T00:00:00Z'); | |
| 50 | + if (!parsedDate.toIso8601String().startsWith(date)) throw FormatException('Invalid date-time', value); | |
| 51 | + return DateTime.parse(value.toUpperCase()); | |
| 52 | +} |
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/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.