feelin 4.3.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +14 -1
  4. data/README.md +29 -0
  5. data/feelin.gemspec +8 -2
  6. data/lib/feelin/js/dist/feelin.js +13630 -0
  7. data/lib/feelin/js/entry.js +1 -0
  8. data/lib/feelin/js/package-lock.json +526 -31
  9. data/lib/feelin/js/package.json +8 -1
  10. data/lib/feelin/version.rb +1 -1
  11. data/lib/feelin.rb +36 -35
  12. data/spec/feelin/feelin_spec.rb +14 -0
  13. metadata +12 -106
  14. data/lib/feelin/js/node_modules/.package-lock.json +0 -67
  15. data/lib/feelin/js/node_modules/@lezer/common/LICENSE +0 -21
  16. data/lib/feelin/js/node_modules/@lezer/common/README.md +0 -14
  17. data/lib/feelin/js/node_modules/@lezer/common/dist/index.cjs +0 -2181
  18. data/lib/feelin/js/node_modules/@lezer/common/dist/index.d.cts +0 -1137
  19. data/lib/feelin/js/node_modules/@lezer/common/dist/index.d.ts +0 -1137
  20. data/lib/feelin/js/node_modules/@lezer/common/dist/index.js +0 -2168
  21. data/lib/feelin/js/node_modules/@lezer/common/package.json +0 -32
  22. data/lib/feelin/js/node_modules/@lezer/highlight/LICENSE +0 -21
  23. data/lib/feelin/js/node_modules/@lezer/highlight/README.md +0 -14
  24. data/lib/feelin/js/node_modules/@lezer/highlight/dist/index.cjs +0 -915
  25. data/lib/feelin/js/node_modules/@lezer/highlight/dist/index.d.cts +0 -621
  26. data/lib/feelin/js/node_modules/@lezer/highlight/dist/index.d.ts +0 -623
  27. data/lib/feelin/js/node_modules/@lezer/highlight/dist/index.js +0 -904
  28. data/lib/feelin/js/node_modules/@lezer/highlight/package.json +0 -31
  29. data/lib/feelin/js/node_modules/@lezer/lr/LICENSE +0 -21
  30. data/lib/feelin/js/node_modules/@lezer/lr/README.md +0 -25
  31. data/lib/feelin/js/node_modules/@lezer/lr/dist/constants.d.ts +0 -45
  32. data/lib/feelin/js/node_modules/@lezer/lr/dist/constants.js +0 -5
  33. data/lib/feelin/js/node_modules/@lezer/lr/dist/index.cjs +0 -1890
  34. data/lib/feelin/js/node_modules/@lezer/lr/dist/index.d.cts +0 -303
  35. data/lib/feelin/js/node_modules/@lezer/lr/dist/index.d.ts +0 -303
  36. data/lib/feelin/js/node_modules/@lezer/lr/dist/index.js +0 -1883
  37. data/lib/feelin/js/node_modules/@lezer/lr/package.json +0 -32
  38. data/lib/feelin/js/node_modules/feelin/LICENSE +0 -21
  39. data/lib/feelin/js/node_modules/feelin/README.md +0 -65
  40. data/lib/feelin/js/node_modules/feelin/dist/builtins.d.ts +0 -355
  41. data/lib/feelin/js/node_modules/feelin/dist/index.cjs +0 -2072
  42. data/lib/feelin/js/node_modules/feelin/dist/index.cjs.map +0 -1
  43. data/lib/feelin/js/node_modules/feelin/dist/index.d.ts +0 -3
  44. data/lib/feelin/js/node_modules/feelin/dist/index.esm.js +0 -2063
  45. data/lib/feelin/js/node_modules/feelin/dist/index.esm.js.map +0 -1
  46. data/lib/feelin/js/node_modules/feelin/dist/interpreter.d.ts +0 -26
  47. data/lib/feelin/js/node_modules/feelin/dist/parser.d.ts +0 -4
  48. data/lib/feelin/js/node_modules/feelin/dist/temporal.d.ts +0 -6
  49. data/lib/feelin/js/node_modules/feelin/dist/types.d.ts +0 -35
  50. data/lib/feelin/js/node_modules/feelin/dist/utils.d.ts +0 -12
  51. data/lib/feelin/js/node_modules/feelin/package.json +0 -63
  52. data/lib/feelin/js/node_modules/lezer-feel/LICENSE +0 -21
  53. data/lib/feelin/js/node_modules/lezer-feel/README.md +0 -94
  54. data/lib/feelin/js/node_modules/lezer-feel/dist/index.cjs +0 -1328
  55. data/lib/feelin/js/node_modules/lezer-feel/dist/index.cjs.map +0 -1
  56. data/lib/feelin/js/node_modules/lezer-feel/dist/index.d.ts +0 -32
  57. data/lib/feelin/js/node_modules/lezer-feel/dist/index.js +0 -1323
  58. data/lib/feelin/js/node_modules/lezer-feel/dist/index.js.map +0 -1
  59. data/lib/feelin/js/node_modules/lezer-feel/package.json +0 -61
  60. data/lib/feelin/js/node_modules/luxon/LICENSE.md +0 -7
  61. data/lib/feelin/js/node_modules/luxon/README.md +0 -55
  62. data/lib/feelin/js/node_modules/luxon/build/amd/luxon.js +0 -8623
  63. data/lib/feelin/js/node_modules/luxon/build/amd/luxon.js.map +0 -1
  64. data/lib/feelin/js/node_modules/luxon/build/cjs-browser/luxon.js +0 -8621
  65. data/lib/feelin/js/node_modules/luxon/build/cjs-browser/luxon.js.map +0 -1
  66. data/lib/feelin/js/node_modules/luxon/build/es6/luxon.js +0 -8011
  67. data/lib/feelin/js/node_modules/luxon/build/es6/luxon.js.map +0 -1
  68. data/lib/feelin/js/node_modules/luxon/build/global/luxon.js +0 -8626
  69. data/lib/feelin/js/node_modules/luxon/build/global/luxon.js.map +0 -1
  70. data/lib/feelin/js/node_modules/luxon/build/global/luxon.min.js +0 -1
  71. data/lib/feelin/js/node_modules/luxon/build/global/luxon.min.js.map +0 -1
  72. data/lib/feelin/js/node_modules/luxon/build/node/luxon.js +0 -7679
  73. data/lib/feelin/js/node_modules/luxon/build/node/luxon.js.map +0 -1
  74. data/lib/feelin/js/node_modules/luxon/package.json +0 -87
  75. data/lib/feelin/js/node_modules/luxon/src/datetime.js +0 -2566
  76. data/lib/feelin/js/node_modules/luxon/src/duration.js +0 -990
  77. data/lib/feelin/js/node_modules/luxon/src/errors.js +0 -61
  78. data/lib/feelin/js/node_modules/luxon/src/impl/conversions.js +0 -206
  79. data/lib/feelin/js/node_modules/luxon/src/impl/diff.js +0 -95
  80. data/lib/feelin/js/node_modules/luxon/src/impl/digits.js +0 -90
  81. data/lib/feelin/js/node_modules/luxon/src/impl/english.js +0 -233
  82. data/lib/feelin/js/node_modules/luxon/src/impl/formats.js +0 -176
  83. data/lib/feelin/js/node_modules/luxon/src/impl/formatter.js +0 -409
  84. data/lib/feelin/js/node_modules/luxon/src/impl/invalid.js +0 -14
  85. data/lib/feelin/js/node_modules/luxon/src/impl/locale.js +0 -554
  86. data/lib/feelin/js/node_modules/luxon/src/impl/regexParser.js +0 -335
  87. data/lib/feelin/js/node_modules/luxon/src/impl/tokenParser.js +0 -505
  88. data/lib/feelin/js/node_modules/luxon/src/impl/util.js +0 -316
  89. data/lib/feelin/js/node_modules/luxon/src/impl/zoneUtil.js +0 -34
  90. data/lib/feelin/js/node_modules/luxon/src/info.js +0 -205
  91. data/lib/feelin/js/node_modules/luxon/src/interval.js +0 -665
  92. data/lib/feelin/js/node_modules/luxon/src/luxon.js +0 -26
  93. data/lib/feelin/js/node_modules/luxon/src/package.json +0 -4
  94. data/lib/feelin/js/node_modules/luxon/src/settings.js +0 -180
  95. data/lib/feelin/js/node_modules/luxon/src/zone.js +0 -97
  96. data/lib/feelin/js/node_modules/luxon/src/zones/IANAZone.js +0 -231
  97. data/lib/feelin/js/node_modules/luxon/src/zones/fixedOffsetZone.js +0 -150
  98. data/lib/feelin/js/node_modules/luxon/src/zones/invalidZone.js +0 -53
  99. data/lib/feelin/js/node_modules/luxon/src/zones/systemZone.js +0 -61
  100. data/lib/feelin/js/node_modules/min-dash/LICENSE +0 -21
  101. data/lib/feelin/js/node_modules/min-dash/README.md +0 -38
  102. data/lib/feelin/js/node_modules/min-dash/dist/array.d.ts +0 -12
  103. data/lib/feelin/js/node_modules/min-dash/dist/collection.d.ts +0 -174
  104. data/lib/feelin/js/node_modules/min-dash/dist/fn.d.ts +0 -37
  105. data/lib/feelin/js/node_modules/min-dash/dist/index.cjs +0 -910
  106. data/lib/feelin/js/node_modules/min-dash/dist/index.d.ts +0 -5
  107. data/lib/feelin/js/node_modules/min-dash/dist/index.esm.js +0 -872
  108. data/lib/feelin/js/node_modules/min-dash/dist/lang.d.ts +0 -29
  109. data/lib/feelin/js/node_modules/min-dash/dist/min-dash.js +0 -916
  110. data/lib/feelin/js/node_modules/min-dash/dist/min-dash.min.js +0 -1
  111. data/lib/feelin/js/node_modules/min-dash/dist/object.d.ts +0 -112
  112. data/lib/feelin/js/node_modules/min-dash/package.json +0 -72
@@ -1,176 +0,0 @@
1
- /**
2
- * @private
3
- */
4
-
5
- const n = "numeric",
6
- s = "short",
7
- l = "long";
8
-
9
- export const DATE_SHORT = {
10
- year: n,
11
- month: n,
12
- day: n,
13
- };
14
-
15
- export const DATE_MED = {
16
- year: n,
17
- month: s,
18
- day: n,
19
- };
20
-
21
- export const DATE_MED_WITH_WEEKDAY = {
22
- year: n,
23
- month: s,
24
- day: n,
25
- weekday: s,
26
- };
27
-
28
- export const DATE_FULL = {
29
- year: n,
30
- month: l,
31
- day: n,
32
- };
33
-
34
- export const DATE_HUGE = {
35
- year: n,
36
- month: l,
37
- day: n,
38
- weekday: l,
39
- };
40
-
41
- export const TIME_SIMPLE = {
42
- hour: n,
43
- minute: n,
44
- };
45
-
46
- export const TIME_WITH_SECONDS = {
47
- hour: n,
48
- minute: n,
49
- second: n,
50
- };
51
-
52
- export const TIME_WITH_SHORT_OFFSET = {
53
- hour: n,
54
- minute: n,
55
- second: n,
56
- timeZoneName: s,
57
- };
58
-
59
- export const TIME_WITH_LONG_OFFSET = {
60
- hour: n,
61
- minute: n,
62
- second: n,
63
- timeZoneName: l,
64
- };
65
-
66
- export const TIME_24_SIMPLE = {
67
- hour: n,
68
- minute: n,
69
- hourCycle: "h23",
70
- };
71
-
72
- export const TIME_24_WITH_SECONDS = {
73
- hour: n,
74
- minute: n,
75
- second: n,
76
- hourCycle: "h23",
77
- };
78
-
79
- export const TIME_24_WITH_SHORT_OFFSET = {
80
- hour: n,
81
- minute: n,
82
- second: n,
83
- hourCycle: "h23",
84
- timeZoneName: s,
85
- };
86
-
87
- export const TIME_24_WITH_LONG_OFFSET = {
88
- hour: n,
89
- minute: n,
90
- second: n,
91
- hourCycle: "h23",
92
- timeZoneName: l,
93
- };
94
-
95
- export const DATETIME_SHORT = {
96
- year: n,
97
- month: n,
98
- day: n,
99
- hour: n,
100
- minute: n,
101
- };
102
-
103
- export const DATETIME_SHORT_WITH_SECONDS = {
104
- year: n,
105
- month: n,
106
- day: n,
107
- hour: n,
108
- minute: n,
109
- second: n,
110
- };
111
-
112
- export const DATETIME_MED = {
113
- year: n,
114
- month: s,
115
- day: n,
116
- hour: n,
117
- minute: n,
118
- };
119
-
120
- export const DATETIME_MED_WITH_SECONDS = {
121
- year: n,
122
- month: s,
123
- day: n,
124
- hour: n,
125
- minute: n,
126
- second: n,
127
- };
128
-
129
- export const DATETIME_MED_WITH_WEEKDAY = {
130
- year: n,
131
- month: s,
132
- day: n,
133
- weekday: s,
134
- hour: n,
135
- minute: n,
136
- };
137
-
138
- export const DATETIME_FULL = {
139
- year: n,
140
- month: l,
141
- day: n,
142
- hour: n,
143
- minute: n,
144
- timeZoneName: s,
145
- };
146
-
147
- export const DATETIME_FULL_WITH_SECONDS = {
148
- year: n,
149
- month: l,
150
- day: n,
151
- hour: n,
152
- minute: n,
153
- second: n,
154
- timeZoneName: s,
155
- };
156
-
157
- export const DATETIME_HUGE = {
158
- year: n,
159
- month: l,
160
- day: n,
161
- weekday: l,
162
- hour: n,
163
- minute: n,
164
- timeZoneName: l,
165
- };
166
-
167
- export const DATETIME_HUGE_WITH_SECONDS = {
168
- year: n,
169
- month: l,
170
- day: n,
171
- weekday: l,
172
- hour: n,
173
- minute: n,
174
- second: n,
175
- timeZoneName: l,
176
- };
@@ -1,409 +0,0 @@
1
- import * as English from "./english.js";
2
- import * as Formats from "./formats.js";
3
- import { padStart } from "./util.js";
4
-
5
- function stringifyTokens(splits, tokenToString) {
6
- let s = "";
7
- for (const token of splits) {
8
- if (token.literal) {
9
- s += token.val;
10
- } else {
11
- s += tokenToString(token.val);
12
- }
13
- }
14
- return s;
15
- }
16
-
17
- const macroTokenToFormatOpts = {
18
- D: Formats.DATE_SHORT,
19
- DD: Formats.DATE_MED,
20
- DDD: Formats.DATE_FULL,
21
- DDDD: Formats.DATE_HUGE,
22
- t: Formats.TIME_SIMPLE,
23
- tt: Formats.TIME_WITH_SECONDS,
24
- ttt: Formats.TIME_WITH_SHORT_OFFSET,
25
- tttt: Formats.TIME_WITH_LONG_OFFSET,
26
- T: Formats.TIME_24_SIMPLE,
27
- TT: Formats.TIME_24_WITH_SECONDS,
28
- TTT: Formats.TIME_24_WITH_SHORT_OFFSET,
29
- TTTT: Formats.TIME_24_WITH_LONG_OFFSET,
30
- f: Formats.DATETIME_SHORT,
31
- ff: Formats.DATETIME_MED,
32
- fff: Formats.DATETIME_FULL,
33
- ffff: Formats.DATETIME_HUGE,
34
- F: Formats.DATETIME_SHORT_WITH_SECONDS,
35
- FF: Formats.DATETIME_MED_WITH_SECONDS,
36
- FFF: Formats.DATETIME_FULL_WITH_SECONDS,
37
- FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,
38
- };
39
-
40
- /**
41
- * @private
42
- */
43
-
44
- export default class Formatter {
45
- static create(locale, opts = {}) {
46
- return new Formatter(locale, opts);
47
- }
48
-
49
- static parseFormat(fmt) {
50
- // white-space is always considered a literal in user-provided formats
51
- // the " " token has a special meaning (see unitForToken)
52
-
53
- let current = null,
54
- currentFull = "",
55
- bracketed = false;
56
- const splits = [];
57
- for (let i = 0; i < fmt.length; i++) {
58
- const c = fmt.charAt(i);
59
- if (c === "'") {
60
- if (currentFull.length > 0) {
61
- splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull });
62
- }
63
- current = null;
64
- currentFull = "";
65
- bracketed = !bracketed;
66
- } else if (bracketed) {
67
- currentFull += c;
68
- } else if (c === current) {
69
- currentFull += c;
70
- } else {
71
- if (currentFull.length > 0) {
72
- splits.push({ literal: /^\s+$/.test(currentFull), val: currentFull });
73
- }
74
- currentFull = c;
75
- current = c;
76
- }
77
- }
78
-
79
- if (currentFull.length > 0) {
80
- splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull });
81
- }
82
-
83
- return splits;
84
- }
85
-
86
- static macroTokenToFormatOpts(token) {
87
- return macroTokenToFormatOpts[token];
88
- }
89
-
90
- constructor(locale, formatOpts) {
91
- this.opts = formatOpts;
92
- this.loc = locale;
93
- this.systemLoc = null;
94
- }
95
-
96
- formatWithSystemDefault(dt, opts) {
97
- if (this.systemLoc === null) {
98
- this.systemLoc = this.loc.redefaultToSystem();
99
- }
100
- const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });
101
- return df.format();
102
- }
103
-
104
- dtFormatter(dt, opts = {}) {
105
- return this.loc.dtFormatter(dt, { ...this.opts, ...opts });
106
- }
107
-
108
- formatDateTime(dt, opts) {
109
- return this.dtFormatter(dt, opts).format();
110
- }
111
-
112
- formatDateTimeParts(dt, opts) {
113
- return this.dtFormatter(dt, opts).formatToParts();
114
- }
115
-
116
- formatInterval(interval, opts) {
117
- const df = this.dtFormatter(interval.start, opts);
118
- return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());
119
- }
120
-
121
- resolvedOptions(dt, opts) {
122
- return this.dtFormatter(dt, opts).resolvedOptions();
123
- }
124
-
125
- num(n, p = 0) {
126
- // we get some perf out of doing this here, annoyingly
127
- if (this.opts.forceSimple) {
128
- return padStart(n, p);
129
- }
130
-
131
- const opts = { ...this.opts };
132
-
133
- if (p > 0) {
134
- opts.padTo = p;
135
- }
136
-
137
- return this.loc.numberFormatter(opts).format(n);
138
- }
139
-
140
- formatDateTimeFromString(dt, fmt) {
141
- const knownEnglish = this.loc.listingMode() === "en",
142
- useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory",
143
- string = (opts, extract) => this.loc.extract(dt, opts, extract),
144
- formatOffset = (opts) => {
145
- if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {
146
- return "Z";
147
- }
148
-
149
- return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : "";
150
- },
151
- meridiem = () =>
152
- knownEnglish
153
- ? English.meridiemForDateTime(dt)
154
- : string({ hour: "numeric", hourCycle: "h12" }, "dayperiod"),
155
- month = (length, standalone) =>
156
- knownEnglish
157
- ? English.monthForDateTime(dt, length)
158
- : string(standalone ? { month: length } : { month: length, day: "numeric" }, "month"),
159
- weekday = (length, standalone) =>
160
- knownEnglish
161
- ? English.weekdayForDateTime(dt, length)
162
- : string(
163
- standalone ? { weekday: length } : { weekday: length, month: "long", day: "numeric" },
164
- "weekday"
165
- ),
166
- maybeMacro = (token) => {
167
- const formatOpts = Formatter.macroTokenToFormatOpts(token);
168
- if (formatOpts) {
169
- return this.formatWithSystemDefault(dt, formatOpts);
170
- } else {
171
- return token;
172
- }
173
- },
174
- era = (length) =>
175
- knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, "era"),
176
- tokenToString = (token) => {
177
- // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols
178
- switch (token) {
179
- // ms
180
- case "S":
181
- return this.num(dt.millisecond);
182
- case "u":
183
- // falls through
184
- case "SSS":
185
- return this.num(dt.millisecond, 3);
186
- // seconds
187
- case "s":
188
- return this.num(dt.second);
189
- case "ss":
190
- return this.num(dt.second, 2);
191
- // fractional seconds
192
- case "uu":
193
- return this.num(Math.floor(dt.millisecond / 10), 2);
194
- case "uuu":
195
- return this.num(Math.floor(dt.millisecond / 100));
196
- // minutes
197
- case "m":
198
- return this.num(dt.minute);
199
- case "mm":
200
- return this.num(dt.minute, 2);
201
- // hours
202
- case "h":
203
- return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);
204
- case "hh":
205
- return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);
206
- case "H":
207
- return this.num(dt.hour);
208
- case "HH":
209
- return this.num(dt.hour, 2);
210
- // offset
211
- case "Z":
212
- // like +6
213
- return formatOffset({ format: "narrow", allowZ: this.opts.allowZ });
214
- case "ZZ":
215
- // like +06:00
216
- return formatOffset({ format: "short", allowZ: this.opts.allowZ });
217
- case "ZZZ":
218
- // like +0600
219
- return formatOffset({ format: "techie", allowZ: this.opts.allowZ });
220
- case "ZZZZ":
221
- // like EST
222
- return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale });
223
- case "ZZZZZ":
224
- // like Eastern Standard Time
225
- return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale });
226
- // zone
227
- case "z":
228
- // like America/New_York
229
- return dt.zoneName;
230
- // meridiems
231
- case "a":
232
- return meridiem();
233
- // dates
234
- case "d":
235
- return useDateTimeFormatter ? string({ day: "numeric" }, "day") : this.num(dt.day);
236
- case "dd":
237
- return useDateTimeFormatter ? string({ day: "2-digit" }, "day") : this.num(dt.day, 2);
238
- // weekdays - standalone
239
- case "c":
240
- // like 1
241
- return this.num(dt.weekday);
242
- case "ccc":
243
- // like 'Tues'
244
- return weekday("short", true);
245
- case "cccc":
246
- // like 'Tuesday'
247
- return weekday("long", true);
248
- case "ccccc":
249
- // like 'T'
250
- return weekday("narrow", true);
251
- // weekdays - format
252
- case "E":
253
- // like 1
254
- return this.num(dt.weekday);
255
- case "EEE":
256
- // like 'Tues'
257
- return weekday("short", false);
258
- case "EEEE":
259
- // like 'Tuesday'
260
- return weekday("long", false);
261
- case "EEEEE":
262
- // like 'T'
263
- return weekday("narrow", false);
264
- // months - standalone
265
- case "L":
266
- // like 1
267
- return useDateTimeFormatter
268
- ? string({ month: "numeric", day: "numeric" }, "month")
269
- : this.num(dt.month);
270
- case "LL":
271
- // like 01, doesn't seem to work
272
- return useDateTimeFormatter
273
- ? string({ month: "2-digit", day: "numeric" }, "month")
274
- : this.num(dt.month, 2);
275
- case "LLL":
276
- // like Jan
277
- return month("short", true);
278
- case "LLLL":
279
- // like January
280
- return month("long", true);
281
- case "LLLLL":
282
- // like J
283
- return month("narrow", true);
284
- // months - format
285
- case "M":
286
- // like 1
287
- return useDateTimeFormatter
288
- ? string({ month: "numeric" }, "month")
289
- : this.num(dt.month);
290
- case "MM":
291
- // like 01
292
- return useDateTimeFormatter
293
- ? string({ month: "2-digit" }, "month")
294
- : this.num(dt.month, 2);
295
- case "MMM":
296
- // like Jan
297
- return month("short", false);
298
- case "MMMM":
299
- // like January
300
- return month("long", false);
301
- case "MMMMM":
302
- // like J
303
- return month("narrow", false);
304
- // years
305
- case "y":
306
- // like 2014
307
- return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year);
308
- case "yy":
309
- // like 14
310
- return useDateTimeFormatter
311
- ? string({ year: "2-digit" }, "year")
312
- : this.num(dt.year.toString().slice(-2), 2);
313
- case "yyyy":
314
- // like 0012
315
- return useDateTimeFormatter
316
- ? string({ year: "numeric" }, "year")
317
- : this.num(dt.year, 4);
318
- case "yyyyyy":
319
- // like 000012
320
- return useDateTimeFormatter
321
- ? string({ year: "numeric" }, "year")
322
- : this.num(dt.year, 6);
323
- // eras
324
- case "G":
325
- // like AD
326
- return era("short");
327
- case "GG":
328
- // like Anno Domini
329
- return era("long");
330
- case "GGGGG":
331
- return era("narrow");
332
- case "kk":
333
- return this.num(dt.weekYear.toString().slice(-2), 2);
334
- case "kkkk":
335
- return this.num(dt.weekYear, 4);
336
- case "W":
337
- return this.num(dt.weekNumber);
338
- case "WW":
339
- return this.num(dt.weekNumber, 2);
340
- case "n":
341
- return this.num(dt.localWeekNumber);
342
- case "nn":
343
- return this.num(dt.localWeekNumber, 2);
344
- case "ii":
345
- return this.num(dt.localWeekYear.toString().slice(-2), 2);
346
- case "iiii":
347
- return this.num(dt.localWeekYear, 4);
348
- case "o":
349
- return this.num(dt.ordinal);
350
- case "ooo":
351
- return this.num(dt.ordinal, 3);
352
- case "q":
353
- // like 1
354
- return this.num(dt.quarter);
355
- case "qq":
356
- // like 01
357
- return this.num(dt.quarter, 2);
358
- case "X":
359
- return this.num(Math.floor(dt.ts / 1000));
360
- case "x":
361
- return this.num(dt.ts);
362
- default:
363
- return maybeMacro(token);
364
- }
365
- };
366
-
367
- return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);
368
- }
369
-
370
- formatDurationFromString(dur, fmt) {
371
- const tokenToField = (token) => {
372
- switch (token[0]) {
373
- case "S":
374
- return "millisecond";
375
- case "s":
376
- return "second";
377
- case "m":
378
- return "minute";
379
- case "h":
380
- return "hour";
381
- case "d":
382
- return "day";
383
- case "w":
384
- return "week";
385
- case "M":
386
- return "month";
387
- case "y":
388
- return "year";
389
- default:
390
- return null;
391
- }
392
- },
393
- tokenToString = (lildur) => (token) => {
394
- const mapped = tokenToField(token);
395
- if (mapped) {
396
- return this.num(lildur.get(mapped), token.length);
397
- } else {
398
- return token;
399
- }
400
- },
401
- tokens = Formatter.parseFormat(fmt),
402
- realTokens = tokens.reduce(
403
- (found, { literal, val }) => (literal ? found : found.concat(val)),
404
- []
405
- ),
406
- collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));
407
- return stringifyTokens(tokens, tokenToString(collapsed));
408
- }
409
- }
@@ -1,14 +0,0 @@
1
- export default class Invalid {
2
- constructor(reason, explanation) {
3
- this.reason = reason;
4
- this.explanation = explanation;
5
- }
6
-
7
- toMessage() {
8
- if (this.explanation) {
9
- return `${this.reason}: ${this.explanation}`;
10
- } else {
11
- return this.reason;
12
- }
13
- }
14
- }