{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/date-input/date-utils.tsx","sourceRoot":"","sources":["date-utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { padStart } from '@dojo/framework/shim/string';\n\nconst components = {\n\tday: '(\\\\d{1,2})',\n\tmonth: '(\\\\d{1,2})',\n\tyear: '(\\\\d{4})'\n};\n\nconst dateExpressions = () => {\n\tconst tokens: [RegExp, { month: number; day: number; year: number }][] = [\n\t\t[\n\t\t\t// standard 'YYYY-mm-dd' format\n\t\t\tnew RegExp(`^${components.year}-${components.month}-${components.day}$`),\n\t\t\t{ month: 2, day: 3, year: 1 }\n\t\t]\n\t];\n\n\tconst usCanary = Intl.DateTimeFormat().format(new Date(2018, 3, 3)); // April 3\n\tswitch (usCanary) {\n\t\tcase '4/3/2018':\n\t\tcase '04/03/2018':\n\t\t\t// US-only 'mm/dd/yyyy' format\n\t\t\ttokens.push([\n\t\t\t\tnew RegExp(`^${components.month}\\/${components.day}\\/${components.year}$`),\n\t\t\t\t{ month: 1, day: 2, year: 3 }\n\t\t\t]);\n\t\t\tbreak;\n\t\tcase '3/4/2018':\n\t\tcase '03/04/2018':\n\t\t\t// standard 'dd/mm/yyyy' format\n\t\t\ttokens.push([\n\t\t\t\tnew RegExp(`^${components.day}\\/${components.month}\\/${components.year}$`),\n\t\t\t\t{ month: 2, day: 1, year: 3 }\n\t\t\t]);\n\t\t\tbreak;\n\t\tcase '3.4.2018':\n\t\tcase '03.04.2018':\n\t\t\t// standard 'dd.mm.yyyy' format\n\t\t\ttokens.push([\n\t\t\t\tnew RegExp(`^${components.day}\\\\.${components.month}\\\\.${components.year}$`),\n\t\t\t\t{ month: 2, day: 1, year: 3 }\n\t\t\t]);\n\t\t\tbreak;\n\t\tcase '3-4-2018':\n\t\tcase '03-04-2018':\n\t\t\t// standard 'dd.mm.yyyy' format\n\t\t\ttokens.push([\n\t\t\t\tnew RegExp(`^${components.day}\\-${components.month}\\-${components.year}$`),\n\t\t\t\t{ month: 2, day: 1, year: 3 }\n\t\t\t]);\n\t\t\tbreak;\n\t\tcase '2018/4/3':\n\t\tcase '2018/04/03':\n\t\t\t// standard 'yyyy/mm/dd' format\n\t\t\ttokens.push([\n\t\t\t\tnew RegExp(`^${components.year}\\/${components.month}\\/${components.day}$`),\n\t\t\t\t{ month: 2, day: 3, year: 1 }\n\t\t\t]);\n\t\t\tbreak;\n\t}\n\n\treturn tokens;\n};\n\nexport function parseDate(value?: string): Date | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\n\tfor (let [exp, order] of dateExpressions()) {\n\t\tconst match = value.match(exp);\n\n\t\tif (match !== null) {\n\t\t\treturn new Date(\n\t\t\t\tparseInt(match[order.year], 10),\n\t\t\t\tparseInt(match[order.month], 10) - 1,\n\t\t\t\tparseInt(match[order.day], 10)\n\t\t\t);\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nexport function formatDateISO(date: Date | undefined) {\n\tif (!date) {\n\t\treturn '';\n\t}\n\n\tconst year = date.getFullYear();\n\tconst month = padStart((date.getMonth() + 1).toString(), 2, '0');\n\tconst day = padStart(date.getDate().toString(), 2, '0');\n\n\treturn `${year}-${month}-${day}`;\n}\n\nexport function formatDate(date: Date) {\n\tconst formattedDate = Intl.DateTimeFormat().format(date);\n\t// Check if is a supported date format\n\tconst parsedDate = parseDate(formattedDate);\n\tif (parsedDate && parsedDate.valueOf() === date.valueOf()) {\n\t\treturn formattedDate;\n\t}\n\treturn formatDateISO(date);\n}\n"]}