date-and-time 1.0.0 → 2.1.0

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 (136) hide show
  1. package/EXTEND.md +28 -10
  2. package/LOCALE.md +1 -0
  3. package/PLUGINS.md +185 -63
  4. package/README.md +91 -76
  5. package/date-and-time.js +140 -102
  6. package/date-and-time.min.js +12 -12
  7. package/esm/date-and-time.es.js +138 -100
  8. package/esm/date-and-time.es.min.js +13 -12
  9. package/esm/date-and-time.mjs +138 -100
  10. package/esm/locale/ar.es.js +1 -1
  11. package/esm/locale/ar.mjs +1 -1
  12. package/esm/locale/az.es.js +1 -1
  13. package/esm/locale/az.mjs +1 -1
  14. package/esm/locale/bn.es.js +1 -1
  15. package/esm/locale/bn.mjs +1 -1
  16. package/esm/locale/cs.es.js +1 -1
  17. package/esm/locale/cs.mjs +1 -1
  18. package/esm/locale/de.es.js +1 -1
  19. package/esm/locale/de.mjs +1 -1
  20. package/esm/locale/dk.es.js +1 -1
  21. package/esm/locale/dk.mjs +1 -1
  22. package/esm/locale/el.es.js +7 -5
  23. package/esm/locale/el.mjs +7 -5
  24. package/esm/locale/en.es.js +3 -2
  25. package/esm/locale/en.mjs +3 -2
  26. package/esm/locale/es.es.js +1 -1
  27. package/esm/locale/es.mjs +1 -1
  28. package/esm/locale/fa.es.js +1 -1
  29. package/esm/locale/fa.mjs +1 -1
  30. package/esm/locale/fr.es.js +1 -1
  31. package/esm/locale/fr.mjs +1 -1
  32. package/esm/locale/hi.es.js +1 -1
  33. package/esm/locale/hi.mjs +1 -1
  34. package/esm/locale/hu.es.js +1 -1
  35. package/esm/locale/hu.mjs +1 -1
  36. package/esm/locale/id.es.js +1 -1
  37. package/esm/locale/id.mjs +1 -1
  38. package/esm/locale/it.es.js +1 -1
  39. package/esm/locale/it.mjs +1 -1
  40. package/esm/locale/ja.es.js +1 -1
  41. package/esm/locale/ja.mjs +1 -1
  42. package/esm/locale/jv.es.js +1 -1
  43. package/esm/locale/jv.mjs +1 -1
  44. package/esm/locale/ko.es.js +1 -1
  45. package/esm/locale/ko.mjs +1 -1
  46. package/esm/locale/my.es.js +1 -1
  47. package/esm/locale/my.mjs +1 -1
  48. package/esm/locale/nl.es.js +7 -5
  49. package/esm/locale/nl.mjs +7 -5
  50. package/esm/locale/pa-in.es.js +1 -1
  51. package/esm/locale/pa-in.mjs +1 -1
  52. package/esm/locale/pl.es.js +7 -5
  53. package/esm/locale/pl.mjs +7 -5
  54. package/esm/locale/pt.es.js +1 -1
  55. package/esm/locale/pt.mjs +1 -1
  56. package/esm/locale/ro.es.js +1 -1
  57. package/esm/locale/ro.mjs +1 -1
  58. package/esm/locale/ru.es.js +1 -1
  59. package/esm/locale/ru.mjs +1 -1
  60. package/esm/locale/rw.es.js +1 -1
  61. package/esm/locale/rw.mjs +1 -1
  62. package/esm/locale/sr.es.js +1 -1
  63. package/esm/locale/sr.mjs +1 -1
  64. package/esm/locale/sv.es.js +22 -0
  65. package/esm/locale/sv.mjs +22 -0
  66. package/esm/locale/th.es.js +1 -1
  67. package/esm/locale/th.mjs +1 -1
  68. package/esm/locale/tr.es.js +1 -1
  69. package/esm/locale/tr.mjs +1 -1
  70. package/esm/locale/uk.es.js +10 -8
  71. package/esm/locale/uk.mjs +10 -8
  72. package/esm/locale/uz.es.js +1 -1
  73. package/esm/locale/uz.mjs +1 -1
  74. package/esm/locale/vi.es.js +1 -1
  75. package/esm/locale/vi.mjs +1 -1
  76. package/esm/locale/zh-cn.es.js +1 -1
  77. package/esm/locale/zh-cn.mjs +1 -1
  78. package/esm/locale/zh-tw.es.js +1 -1
  79. package/esm/locale/zh-tw.mjs +1 -1
  80. package/esm/plugin/day-of-week.es.js +1 -1
  81. package/esm/plugin/day-of-week.mjs +1 -1
  82. package/esm/plugin/meridiem.es.js +20 -11
  83. package/esm/plugin/meridiem.mjs +20 -11
  84. package/esm/plugin/microsecond.es.js +1 -1
  85. package/esm/plugin/microsecond.mjs +1 -1
  86. package/esm/plugin/ordinal.es.js +1 -1
  87. package/esm/plugin/ordinal.mjs +1 -1
  88. package/esm/plugin/timespan.es.js +1 -1
  89. package/esm/plugin/timespan.mjs +1 -1
  90. package/esm/plugin/timezone.es.js +73 -0
  91. package/esm/plugin/timezone.mjs +73 -0
  92. package/esm/plugin/two-digit-year.es.js +1 -6
  93. package/esm/plugin/two-digit-year.mjs +1 -6
  94. package/locale/ar.js +2 -2
  95. package/locale/az.js +2 -2
  96. package/locale/bn.js +2 -2
  97. package/locale/cs.js +2 -2
  98. package/locale/de.js +2 -2
  99. package/locale/dk.js +2 -2
  100. package/locale/el.js +8 -6
  101. package/locale/en.js +4 -3
  102. package/locale/es.js +2 -2
  103. package/locale/fa.js +2 -2
  104. package/locale/fr.js +2 -2
  105. package/locale/hi.js +2 -2
  106. package/locale/hu.js +2 -2
  107. package/locale/id.js +2 -2
  108. package/locale/it.js +2 -2
  109. package/locale/ja.js +2 -2
  110. package/locale/jv.js +2 -2
  111. package/locale/ko.js +2 -2
  112. package/locale/my.js +2 -2
  113. package/locale/nl.js +8 -6
  114. package/locale/pa-in.js +3 -3
  115. package/locale/pl.js +8 -6
  116. package/locale/pt.js +2 -2
  117. package/locale/ro.js +2 -2
  118. package/locale/ru.js +2 -2
  119. package/locale/rw.js +2 -2
  120. package/locale/sr.js +2 -2
  121. package/locale/sv.js +30 -0
  122. package/locale/th.js +2 -2
  123. package/locale/tr.js +2 -2
  124. package/locale/uk.js +11 -9
  125. package/locale/uz.js +2 -2
  126. package/locale/vi.js +2 -2
  127. package/locale/zh-cn.js +3 -3
  128. package/locale/zh-tw.js +3 -3
  129. package/package.json +4 -4
  130. package/plugin/day-of-week.js +3 -3
  131. package/plugin/meridiem.js +21 -12
  132. package/plugin/microsecond.js +2 -2
  133. package/plugin/ordinal.js +2 -2
  134. package/plugin/timespan.js +2 -2
  135. package/plugin/timezone.js +81 -0
  136. package/plugin/two-digit-year.js +3 -8
package/README.md CHANGED
@@ -24,16 +24,30 @@ npm i date-and-time
24
24
 
25
25
  ## Recent Changes
26
26
 
27
- - 1.0.0
28
- - **First stable release!**
29
- - ES Modules support.
30
- - Added Kinyarwanda support.
27
+ - 2.1.0
28
+ - Fixed an issue that the lib's functions assigned to variables using ES6 destructuring assignment cause an error.
31
29
 
32
- - 0.14.2
33
- - Fixed regular expression denial of service (ReDoS) vulnerability.
30
+ ```javascript
31
+ // Destructuring assignment
32
+ const { format, parse } = require('date-and-time');
34
33
 
35
- - 0.14.1
36
- - Fixed a bug characters inside square brackets `[]` are not validated.
34
+ // These used to be errors in 2.0.x.
35
+ format(new Date(), 'MMM DD YYYY');
36
+ parse('Jan 11 2022', 'MMM DD YYYY');
37
+ ```
38
+
39
+ - Added Swedish support.
40
+
41
+ - 2.0.1
42
+ - Fixed a bug that the timezone plugin does not support changing locales.
43
+
44
+ - 2.0.0
45
+ - Fixed a conflict when importing multiple plugins and locales.
46
+ - **Breaking Changes!** Due to the above fix, the specifications of plugin, locale, and extension have been changed. The `meridiem` plugin and the `two-digit-year` plugin are now partially incompatible with previous ones. See [here](./PLUGINS.md) for details. Also the `extend()` function has changed. If you are using it, check [here](./EXTEND.md) for any impact. The locales are still compatible.
47
+ - Added `timezone` plugin. You can now use the IANA timezone name to output a datetime string or input a date object. See [PLUGINS.md](./PLUGINS.md) for details.
48
+
49
+ - 1.0.1
50
+ - Updated dev dependencies to resolve vulnerability.
37
51
 
38
52
  ## Usage
39
53
 
@@ -63,58 +77,58 @@ import date from '/path/to/date-and-time.es.min.js';
63
77
  <script src="/path/to/date-and-time.min.js"></script>
64
78
  ```
65
79
 
66
- ### NOTE
80
+ ### Note
67
81
 
68
82
  - If you want to use ES Modules in Node.js without a transpiler, you need to add `"type": "module"` in your `package.json` or change your file extension from `.js` to `.mjs`.
69
83
 
70
84
  ## API
71
85
 
72
- - [format](#formatdateObj-formatString-utc)
86
+ - [format](#formatdateobj-arg-utc)
73
87
  - Formatting a Date and Time (Date -> String)
74
88
 
75
- - [parse](#parsedateString-arg-utc)
89
+ - [parse](#parsedatestring-arg-utc)
76
90
  - Parsing a Date and Time string (String -> Date)
77
91
 
78
- - [compile](#compileformatString)
92
+ - [compile](#compileformatstring)
79
93
  - Compiling a format string
80
94
 
81
- - [preparse](#preparsedateString-arg)
95
+ - [preparse](#preparsedatestring-arg)
82
96
  - Pre-parsing a Date and Time string
83
97
 
84
- - [isValid](#isValidarg1-arg2)
98
+ - [isValid](#isvalidarg1-arg2)
85
99
  - Validation
86
100
 
87
- - [transform](#transformdateString-arg1-arg2-utc)
101
+ - [transform](#transformdatestring-arg1-arg2-utc)
88
102
  - Transforming a Date and Time string (String -> String)
89
103
 
90
- - [addYears](#addYearsdateObj-years)
104
+ - [addYears](#addyearsdateobj-years)
91
105
  - Adding years
92
106
 
93
- - [addMonths](#addMonthsdateObj-months)
107
+ - [addMonths](#addmonthsdateobj-months)
94
108
  - Adding months
95
109
 
96
- - [addDays](#addDaysdateObj-days)
110
+ - [addDays](#adddaysdateobj-days)
97
111
  - Adding days
98
112
 
99
- - [addHours](#addHoursdateObj-hours)
113
+ - [addHours](#addhoursdateobj-hours)
100
114
  - Adding hours
101
115
 
102
- - [addMinutes](#addMinutesdateObj-minutes)
116
+ - [addMinutes](#addminutesdateobj-minutes)
103
117
  - Adding minutes
104
118
 
105
- - [addSeconds](#addSecondsdateObj-seconds)
119
+ - [addSeconds](#addsecondsdateobj-seconds)
106
120
  - Adding seconds
107
121
 
108
- - [addMilliseconds](#addMillisecondsdateObj-milliseconds)
122
+ - [addMilliseconds](#addmillisecondsdateobj-milliseconds)
109
123
  - Adding milliseconds
110
124
 
111
125
  - [subtract](#subtractdate1-date2)
112
126
  - Subtracting two dates
113
127
 
114
- - [isLeapYear](#isLeapYeary)
128
+ - [isLeapYear](#isleapyeary)
115
129
  - Whether year is leap year
116
130
 
117
- - [isSameDay](#isSameDaydate1-date2)
131
+ - [isSameDay](#issamedaydate1-date2)
118
132
  - Comparison of two dates
119
133
 
120
134
  - [locale](#localecode-locale)
@@ -126,7 +140,7 @@ import date from '/path/to/date-and-time.es.min.js';
126
140
  - [plugin](#pluginname-plugin)
127
141
  - Importing or defining plugins
128
142
 
129
- ### format(dateObj, formatString[, utc])
143
+ ### format(dateObj, arg[, utc])
130
144
 
131
145
  - @param {**Date**} dateObj - a Date object
132
146
  - @param {**string|Array.\<string\>**} arg - a format string or its compiled object
@@ -183,7 +197,7 @@ You can also use the following tokens by importing plugins. See [PLUGINS.md](./P
183
197
  | a | meridiem (lowercase) | am, pm |
184
198
  | aa | meridiem (lowercase with ellipsis) | a.m., p.m. |
185
199
 
186
- #### NOTE 1. Comments
200
+ #### Note 1. Comments
187
201
 
188
202
  String in parenthese `[...]` in the `formatString` will be ignored as comments:
189
203
 
@@ -192,7 +206,7 @@ date.format(new Date(), 'DD-[MM]-YYYY'); // => '02-MM-2015'
192
206
  date.format(new Date(), '[DD-[MM]-YYYY]'); // => 'DD-[MM]-YYYY'
193
207
  ```
194
208
 
195
- #### NOTE 2. Output as UTC
209
+ #### Note 2. Output as UTC
196
210
 
197
211
  This function usually outputs a local date-time string. Set to true the `utc` option (the 3rd parameter) if you would like to get a UTC date-time string.
198
212
 
@@ -201,13 +215,13 @@ date.format(new Date(), 'hh:mm A [GMT]Z'); // => '11:14 PM GMT-0800'
201
215
  date.format(new Date(), 'hh:mm A [GMT]Z', true); // => '07:14 AM GMT+0000'
202
216
  ```
203
217
 
204
- #### NOTE 3. More Tokens
218
+ #### Note 3. More Tokens
205
219
 
206
220
  You can also define your own tokens. See [EXTEND.md](./EXTEND.md) for details.
207
221
 
208
222
  ### parse(dateString, arg[, utc])
209
223
 
210
- - @param {string} dateString - a date string
224
+ - @param {**string**} dateString - a date string
211
225
  - @param {**string|Array.\<string\>**} arg - a format string or its compiled object
212
226
  - @param {**boolean**} [utc] - input as UTC
213
227
  - @returns {**Date**} a constructed date
@@ -224,45 +238,46 @@ date.parse('Feb 29 2017', 'MMM D YYYY'); // => Invalid Date
224
238
 
225
239
  Available tokens and their meanings are as follows:
226
240
 
227
- | token | meaning | examples of acceptable form |
228
- |:-------|:-------------------------------------|:---------------------------------------|
229
- | YYYY | four-digit year | 0999, 2015 |
230
- | Y | four-digit year without zero-padding | 2, 44, 88, 2015 |
231
- | MMMM | month name (long) | January, December |
232
- | MMM | month name (short) | Jan, Dec |
233
- | MM | month with zero-padding | 01, 12 |
234
- | M | month | 1, 12 |
235
- | DD | date with zero-padding | 02, 31 |
236
- | D | date | 2, 31 |
237
- | HH | 24-hour with zero-padding | 23, 08 |
238
- | H | 24-hour | 23, 8 |
239
- | hh | 12-hour with zero-padding | 11, 08 |
240
- | h | 12-hour | 11, 8 |
241
- | A | meridiem (uppercase) | AM, PM |
242
- | mm | minute with zero-padding | 14, 07 |
243
- | m | minute | 14, 7 |
244
- | ss | second with zero-padding | 05, 10 |
245
- | s | second | 5, 10 |
246
- | SSS | millisecond (high accuracy) | 753, 022 |
247
- | SS | millisecond (middle accuracy) | 75, 02 |
248
- | S | millisecond (low accuracy) | 7, 0 |
249
- | Z | timezone offset | +0100, -0800 |
241
+ | token | meaning | examples of acceptable form |
242
+ |:-------|:-------------------------------------|:----------------------------|
243
+ | YYYY | four-digit year | 0999, 2015 |
244
+ | Y | four-digit year without zero-padding | 2, 44, 88, 2015 |
245
+ | MMMM | month name (long) | January, December |
246
+ | MMM | month name (short) | Jan, Dec |
247
+ | MM | month with zero-padding | 01, 12 |
248
+ | M | month | 1, 12 |
249
+ | DD | date with zero-padding | 02, 31 |
250
+ | D | date | 2, 31 |
251
+ | HH | 24-hour with zero-padding | 23, 08 |
252
+ | H | 24-hour | 23, 8 |
253
+ | hh | 12-hour with zero-padding | 11, 08 |
254
+ | h | 12-hour | 11, 8 |
255
+ | A | meridiem (uppercase) | AM, PM |
256
+ | mm | minute with zero-padding | 14, 07 |
257
+ | m | minute | 14, 7 |
258
+ | ss | second with zero-padding | 05, 10 |
259
+ | s | second | 5, 10 |
260
+ | SSS | millisecond (high accuracy) | 753, 022 |
261
+ | SS | millisecond (middle accuracy) | 75, 02 |
262
+ | S | millisecond (low accuracy) | 7, 0 |
263
+ | Z | timezone offset | +0100, -0800 |
250
264
 
251
265
  You can also use the following tokens by importing plugins. See [PLUGINS.md](./PLUGINS.md) for details.
252
266
 
253
- | token | meaning | examples of acceptable form |
254
- |:-------|:-------------------------------------|:---------------------------------------|
255
- | YY | two-digit year | 90, 00, 08, 19 |
256
- | Y | two-digit year without zero-padding | 90, 0, 8, 19 |
257
- | A | meridiem | AM, PM, A.M., P.M., am, pm, a.m., p.m. |
258
- | dddd | day of week (long) | Friday, Sunday |
259
- | ddd | day of week (short) | Fri, Sun |
260
- | dd | day of week (very short) | Fr, Su |
261
- | SSSSSS | microsecond (high accuracy) | 123456, 000001 |
262
- | SSSSS | microsecond (middle accuracy) | 12345, 00001 |
263
- | SSSS | microsecond (low accuracy) | 1234, 0001 |
264
-
265
- #### NOTE 1. Invalid Date
267
+ | token | meaning | examples of acceptable form |
268
+ |:-------|:-------------------------------------|:----------------------------|
269
+ | YY | two-digit year | 90, 00, 08, 19 |
270
+ | AA | meridiem (uppercase with ellipsis) | A.M., P.M. |
271
+ | a | meridiem (lowercase) | am, pm |
272
+ | aa | meridiem (lowercase with ellipsis) | a.m., p.m. |
273
+ | dddd | day of week (long) | Friday, Sunday |
274
+ | ddd | day of week (short) | Fri, Sun |
275
+ | dd | day of week (very short) | Fr, Su |
276
+ | SSSSSS | microsecond (high accuracy) | 123456, 000001 |
277
+ | SSSSS | microsecond (middle accuracy) | 12345, 00001 |
278
+ | SSSS | microsecond (low accuracy) | 1234, 0001 |
279
+
280
+ #### Note 1. Invalid Date
266
281
 
267
282
  If the function fails to parse, it will return `Invalid Date`. Notice that the `Invalid Date` is a Date object, not `NaN` or `null`. You can tell whether the Date object is invalid as follows:
268
283
 
@@ -274,7 +289,7 @@ if (isNaN(today)) {
274
289
  }
275
290
  ```
276
291
 
277
- #### NOTE 2. Input as UTC
292
+ #### Note 2. Input as UTC
278
293
 
279
294
  This function usually assumes the `dateString` is a local date-time. Set to true the `utc` option (the 3rd parameter) if it is a UTC date-time.
280
295
 
@@ -283,7 +298,7 @@ date.parse('11:14:05 PM', 'hh:mm:ss A'); // => Jan 1 1970 23:14:05 GMT-
283
298
  date.parse('11:14:05 PM', 'hh:mm:ss A', true); // => Jan 1 1970 23:14:05 GMT+0000 (Jan 1 1970 15:14:05 GMT-0800)
284
299
  ```
285
300
 
286
- #### NOTE 3. Default Date Time
301
+ #### Note 3. Default Date Time
287
302
 
288
303
  Default date is `January 1, 1970`, time is `00:00:00.000`. Values not passed will be complemented with them:
289
304
 
@@ -292,7 +307,7 @@ date.parse('11:14:05 PM', 'hh:mm:ss A'); // => Jan 1 1970 23:14:05 GMT-0800
292
307
  date.parse('Feb 2000', 'MMM YYYY'); // => Feb 1 2000 00:00:00 GMT-0800
293
308
  ```
294
309
 
295
- #### NOTE 4. Max Date / Min Date
310
+ #### Note 4. Max Date / Min Date
296
311
 
297
312
  Parsable maximum date is `December 31, 9999`, minimum date is `January 1, 0001`.
298
313
 
@@ -304,7 +319,7 @@ date.parse('Jan 1 0001', 'MMM D YYYY'); // => Jan 1 0001 00:00:00 GMT-0800
304
319
  date.parse('Jan 1 0000', 'MMM D YYYY'); // => Invalid Date
305
320
  ```
306
321
 
307
- #### NOTE 5. 12-hour notation and Meridiem
322
+ #### Note 5. 12-hour notation and Meridiem
308
323
 
309
324
  If use `hh` or `h` (12-hour) token, use together `A` (meridiem) token to get the right value.
310
325
 
@@ -313,7 +328,7 @@ date.parse('11:14:05', 'hh:mm:ss'); // => Jan 1 1970 11:14:05 GMT-0800
313
328
  date.parse('11:14:05 PM', 'hh:mm:ss A'); // => Jan 1 1970 23:14:05 GMT-0800
314
329
  ```
315
330
 
316
- #### NOTE 6. Token disablement
331
+ #### Note 6. Token disablement
317
332
 
318
333
  Use square brackets `[]` if a date-time string includes some token characters. Tokens inside square brackets in the `formatString` will be interpreted as normal characters:
319
334
 
@@ -322,9 +337,9 @@ date.parse('12 hours 34 minutes', 'HH hours mm minutes'); // => Invalid Da
322
337
  date.parse('12 hours 34 minutes', 'HH [hours] mm [minutes]'); // => Jan 1 1970 12:34:00 GMT-0800
323
338
  ```
324
339
 
325
- #### NOTE 7. Wildcard
340
+ #### Note 7. Wildcard
326
341
 
327
- A white space works as a wildcard token. This token is not interpret into anything. This means it can be ignored a specific variable string. For example, when you would like to ignore a time part from a date string, you can write as follows:
342
+ A white space works as a wildcard token. This token is not interpreted into anything. This means it can be ignored a specific variable string. For example, when you would like to ignore a time part from a date string, you can write as follows:
328
343
 
329
344
  ```javascript
330
345
  // This will be an error.
@@ -333,9 +348,9 @@ date.parse('2015/01/02 11:14:05', 'YYYY/MM/DD'); // => Invalid Date
333
348
  date.parse('2015/01/02 11:14:05', 'YYYY/MM/DD '); // => Jan 2 2015 00:00:00 GMT-0800
334
349
  ```
335
350
 
336
- #### NOTE 8. Ellipsis
351
+ #### Note 8. Ellipsis
337
352
 
338
- The parser supports `...` (ellipse) token. The above example can be also written like this:
353
+ The parser supports `...` (ellipsis) token. The above example can be also written like this:
339
354
 
340
355
  ```javascript
341
356
  date.parse('2015/01/02 11:14:05', 'YYYY/MM/DD...'); // => Jan 2 2015 00:00:00 GMT-0800
@@ -569,7 +584,7 @@ See [LOCALE.md](./LOCALE.md) for details.
569
584
  - @param {**Object**} extension - extension object
570
585
  - @returns {**void**}
571
586
 
572
- It extends the formatter and the parser of the current locale. See [EXTEND.md](./EXTEND.md) for details.
587
+ It extends this library. See [EXTEND.md](./EXTEND.md) for details.
573
588
 
574
589
  ### plugin(name[, plugin])
575
590
 
@@ -577,7 +592,7 @@ It extends the formatter and the parser of the current locale. See [EXTEND.md](.
577
592
  - @param {**Object**} [plugin] - plugin object
578
593
  - @returns {**void**}
579
594
 
580
- Plugin is a named extension object. By installing predefined plugins, you can easily extend the formatter and the parser of the current locale. See [PLUGINS.md](./PLUGINS.md) for details.
595
+ Plugin is a named extension object. By installing predefined plugins, you can easily extend this library. See [PLUGINS.md](./PLUGINS.md) for details.
581
596
 
582
597
  ## Browser Support
583
598