1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | function parseDateTimeSkeleton(skeleton) {
|
16 | var result = {};
|
17 | skeleton.replace(DATE_TIME_REGEX, function (match) {
|
18 | var len = match.length;
|
19 | switch (match[0]) {
|
20 |
|
21 | case 'G':
|
22 | result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';
|
23 | break;
|
24 |
|
25 | case 'y':
|
26 | result.year = len === 2 ? '2-digit' : 'numeric';
|
27 | break;
|
28 | case 'Y':
|
29 | case 'u':
|
30 | case 'U':
|
31 | case 'r':
|
32 | throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');
|
33 |
|
34 | case 'q':
|
35 | case 'Q':
|
36 | throw new RangeError('`q/Q` (quarter) patterns are not supported');
|
37 |
|
38 | case 'M':
|
39 | case 'L':
|
40 | result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];
|
41 | break;
|
42 |
|
43 | case 'w':
|
44 | case 'W':
|
45 | throw new RangeError('`w/W` (week) patterns are not supported');
|
46 | case 'd':
|
47 | result.day = ['numeric', '2-digit'][len - 1];
|
48 | break;
|
49 | case 'D':
|
50 | case 'F':
|
51 | case 'g':
|
52 | throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');
|
53 |
|
54 | case 'E':
|
55 | result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';
|
56 | break;
|
57 | case 'e':
|
58 | if (len < 4) {
|
59 | throw new RangeError('`e..eee` (weekday) patterns are not supported');
|
60 | }
|
61 | result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
|
62 | break;
|
63 | case 'c':
|
64 | if (len < 4) {
|
65 | throw new RangeError('`c..ccc` (weekday) patterns are not supported');
|
66 | }
|
67 | result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];
|
68 | break;
|
69 |
|
70 | case 'a':
|
71 | result.hour12 = true;
|
72 | break;
|
73 | case 'b':
|
74 | case 'B':
|
75 | throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');
|
76 |
|
77 | case 'h':
|
78 | result.hourCycle = 'h12';
|
79 | result.hour = ['numeric', '2-digit'][len - 1];
|
80 | break;
|
81 | case 'H':
|
82 | result.hourCycle = 'h23';
|
83 | result.hour = ['numeric', '2-digit'][len - 1];
|
84 | break;
|
85 | case 'K':
|
86 | result.hourCycle = 'h11';
|
87 | result.hour = ['numeric', '2-digit'][len - 1];
|
88 | break;
|
89 | case 'k':
|
90 | result.hourCycle = 'h24';
|
91 | result.hour = ['numeric', '2-digit'][len - 1];
|
92 | break;
|
93 | case 'j':
|
94 | case 'J':
|
95 | case 'C':
|
96 | throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');
|
97 |
|
98 | case 'm':
|
99 | result.minute = ['numeric', '2-digit'][len - 1];
|
100 | break;
|
101 |
|
102 | case 's':
|
103 | result.second = ['numeric', '2-digit'][len - 1];
|
104 | break;
|
105 | case 'S':
|
106 | case 'A':
|
107 | throw new RangeError('`S/A` (second) pattenrs are not supported, use `s` instead');
|
108 |
|
109 | case 'z':
|
110 | result.timeZoneName = len < 4 ? 'short' : 'long';
|
111 | break;
|
112 | case 'Z':
|
113 | case 'O':
|
114 | case 'v':
|
115 | case 'V':
|
116 | case 'X':
|
117 | case 'x':
|
118 | throw new RangeError('`Z/O/v/V/X/x` (timeZone) pattenrs are not supported, use `z` instead');
|
119 | }
|
120 | return '';
|
121 | });
|
122 | return result;
|
123 | }
|
124 | exports.parseDateTimeSkeleton = parseDateTimeSkeleton;
|