From d55b767039605256c736166a942a9138e3eacfd7 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Sun, 29 Jun 2025 11:49:28 -0700 Subject: remove dev node_modules (oops) --- node_modules/date-fns/docs/.eslintrc.js | 5 - node_modules/date-fns/docs/Day.js | 15 - node_modules/date-fns/docs/Duration.js | 19 - node_modules/date-fns/docs/Interval.js | 16 - node_modules/date-fns/docs/Locale.js | 88 -- node_modules/date-fns/docs/constants.md | 47 -- node_modules/date-fns/docs/esm.md | 24 - node_modules/date-fns/docs/fp.md | 70 -- node_modules/date-fns/docs/gettingStarted.md | 87 -- node_modules/date-fns/docs/i18n.md | 92 -- .../date-fns/docs/i18nContributionGuide.md | 921 --------------------- node_modules/date-fns/docs/index.js | 147 ---- node_modules/date-fns/docs/logo.svg | 26 - node_modules/date-fns/docs/logotype.svg | 1 - node_modules/date-fns/docs/release.md | 19 - node_modules/date-fns/docs/timeZones.md | 63 -- node_modules/date-fns/docs/unicodeTokens.md | 54 -- node_modules/date-fns/docs/upgradeGuide.md | 118 --- node_modules/date-fns/docs/webpack.md | 48 -- 19 files changed, 1860 deletions(-) delete mode 100644 node_modules/date-fns/docs/.eslintrc.js delete mode 100644 node_modules/date-fns/docs/Day.js delete mode 100644 node_modules/date-fns/docs/Duration.js delete mode 100644 node_modules/date-fns/docs/Interval.js delete mode 100644 node_modules/date-fns/docs/Locale.js delete mode 100644 node_modules/date-fns/docs/constants.md delete mode 100644 node_modules/date-fns/docs/esm.md delete mode 100644 node_modules/date-fns/docs/fp.md delete mode 100644 node_modules/date-fns/docs/gettingStarted.md delete mode 100644 node_modules/date-fns/docs/i18n.md delete mode 100644 node_modules/date-fns/docs/i18nContributionGuide.md delete mode 100644 node_modules/date-fns/docs/index.js delete mode 100644 node_modules/date-fns/docs/logo.svg delete mode 100644 node_modules/date-fns/docs/logotype.svg delete mode 100644 node_modules/date-fns/docs/release.md delete mode 100644 node_modules/date-fns/docs/timeZones.md delete mode 100644 node_modules/date-fns/docs/unicodeTokens.md delete mode 100644 node_modules/date-fns/docs/upgradeGuide.md delete mode 100644 node_modules/date-fns/docs/webpack.md (limited to 'node_modules/date-fns/docs') diff --git a/node_modules/date-fns/docs/.eslintrc.js b/node_modules/date-fns/docs/.eslintrc.js deleted file mode 100644 index a40aaa8..0000000 --- a/node_modules/date-fns/docs/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - 'no-console': 'off' - } -} diff --git a/node_modules/date-fns/docs/Day.js b/node_modules/date-fns/docs/Day.js deleted file mode 100644 index 42df02d..0000000 --- a/node_modules/date-fns/docs/Day.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @category Types - * @summary Day type - * - * @description - * The day of the week type alias (`0 | 1 | 2 | 3 | 4 | 5 | 6`). Unlike the date - * (the number of days since the beginningof the month), which starts with 1 - * and is dynamic (can go up to 28, 30, or 31), the day starts with 0 and static - * (always ends at 6). Look at it as an index in an array where Sunday is - * the first element, and Saturday is the last. - * - * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6} Day - */ -const Day = 0 -module.exports = Day diff --git a/node_modules/date-fns/docs/Duration.js b/node_modules/date-fns/docs/Duration.js deleted file mode 100644 index 95702b3..0000000 --- a/node_modules/date-fns/docs/Duration.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @category Types - * @summary Duration object - * - * @description - * Duration object. - * - * @typedef {Object} Duration - * - * @property {number} [years] - * @property {number} [months] - * @property {number} [weeks] - * @property {number} [days] - * @property {number} [hours] - * @property {number} [minutes] - * @property {number} [seconds] - */ -const Duration = {} -module.exports = Duration diff --git a/node_modules/date-fns/docs/Interval.js b/node_modules/date-fns/docs/Interval.js deleted file mode 100644 index 15347b6..0000000 --- a/node_modules/date-fns/docs/Interval.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @category Types - * @summary An object that combines two dates to represent the time interval. - * - * @description - * An object that combines two dates to represent the time interval. - * - * @typedef {Object} Interval - * @property {Date|Number} start - the start of the interval - * @property {Date|Number} end - the end of the interval - * @throws {RangeError} The start of an interval cannot be after its end - * @throws {RangeError} Date in interval cannot be `Invalid Date` - */ -var Interval = {} - -module.exports = Interval diff --git a/node_modules/date-fns/docs/Locale.js b/node_modules/date-fns/docs/Locale.js deleted file mode 100644 index 9c7b4c1..0000000 --- a/node_modules/date-fns/docs/Locale.js +++ /dev/null @@ -1,88 +0,0 @@ -/** - * @category Types - * @summary A locale object. Default locale is `en-US`. - * - * @description - * A locale object. Default locale is `en-US`. - * - * If you're using any of these date-fns, consider specifying a locale in options: - * - * - `differenceInCalendarWeeks` - * - `eachWeekOfInterval` - * - `endOfWeek` - * - `format` - * - `formatDistance` - * - `formatDistanceStrict` - * - `formatRelative` - * - `getWeek` - * - `getWeekOfMonth` - * - `getWeeksInMonth` - * - `getWeekYear` - * - `isMatch` - * - `isSameWeek` - * - `isThisWeek` - * - `lastDayOfWeek` - * - `parse` - * - `setDay` - * - `setWeek` - * - `setWeekYear` - * - `startOfWeek` - * - `startOfWeekYear` - * - * Read the Properties section below for more details. - * - * @typedef {Object} Locale - * - * @property {string} [code] - the locale code (ISO 639-1 + optional country code) - * @property {Function} [formatDistance] - the function that takes a token - * passed by `formatDistance` or `formatDistanceStrict` and payload, - * and returns localized distance in words. - * Required by `formatDistance` and `formatDistanceStrict` - * - * @property {Function} [formatRelative] - the function that takes a token - * passed by `formatRelative` and two dates and returns the localized relative date format. - * Required by `formatRelative` - * - * @property {Object} [localize] - the object with functions used to localize various values. - * Required by `format` and `formatRelative` - * @property {Function} localize.ordinalNumber - the function that localizes an ordinal number - * @property {Function} localize.era - the function that takes 0 or 1 and returns localized era - * @property {Function} localize.quarter - the function that localizes a quarter - * @property {Function} localize.month - the function that localizes a month - * @property {Function} localize.day - the function that localizes a day of the week - * @property {Function} localize.dayPeriod - the function that takes one of the strings - * 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening' or 'night' - * and returns localized time of the day - * - * @property {Object} [formatLong] - the object with functions that return localized formats - * @property {Function} formatLong.date - the function that returns a localized long date format - * @property {Function} formatLong.time - the function that returns a localized long time format - * @property {Function} formatLong.dateTime - the function that returns a localized format of date and time combined - * - * @property {Object} [match] — the object with functions used to match and parse various localized values. - * Required by `parse` - * @property {Function} match.ordinalNumber - the function that parses a localized ordinal number - * @property {Function} match.era - the function that parses a localized era - * @property {Function} match.quarter - the function that parses a localized quarter - * @property {Function} match.month - the function that parses a localized month - * @property {Function} match.day - the function that parses a localized day of the week - * @property {Function} match.dayPeriod - the function that parses a localized time of the day - * - * @property {Object} [options] - an object with locale options. - * @property {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday). - * Used by `differenceInCalendarWeeks`, `eachWeekOfInterval`, `endOfWeek`, `format`, `formatRelative`, `getWeek`, `getWeekOfMonth`, - * `getWeeksInMonth`, `getWeekYear`, `isMatch`, `isSameWeek`, `isThisWeek`, `lastDayOfWeek`, `parse`, `setDay`, - * `setWeek`, `setWeekYear`, `startOfWeek` and `startOfWeekYear` - * @property {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, - * which is always in the first week of the year. - * Used by `format`, `getWeek`, `getWeekYear`, `isMatch`, `parse`, `setWeek`, `setWeekYear` and `startOfWeekYear`. - * - * @throws {RangeError} `locale` must contain `localize` property. Thrown by `format` and `formatRelative` - * @throws {RangeError} `locale` must contain `formatLong` property. Thrown by `format` and `formatRelative` - * @throws {RangeError} `locale` must contain `formatRelative` property. Thrown by `formatRelative` - * @throws {RangeError} `locale` must contain `formatDistance` property. Thrown by `formatDistance` and `formatDistanceStrict` - * @throws {RangeError} `locale` must contain `match` property. Thrown by `parse` - */ -var Locale = {} - -module.exports = Locale diff --git a/node_modules/date-fns/docs/constants.md b/node_modules/date-fns/docs/constants.md deleted file mode 100644 index b792fd7..0000000 --- a/node_modules/date-fns/docs/constants.md +++ /dev/null @@ -1,47 +0,0 @@ -# Constants - -date-fns provides with a number of useful constants. - -## Usage - -The constants could be imported from `date-fns/constants` or directly -from `date-fns`: - -```js -import { maxTime } from 'date-fns/constants' -import { minTime } from 'date-fns' - -function isAllowedTime(time) { - return time <= maxTime && time >= minTime -} -``` - -## Constants - -### `maxTime` - -Maximum allowed time: - -```js -import { maxTime } from 'date-fns' - -const isValid = 8640000000000001 <= maxTime -//=> false - -new Date(8640000000000001) -//=> Invalid Date -``` - -### `minTime` - -Minimum allowed time: - -```js -import { minTime } from 'date-fns' - -const isValid = -8640000000000001 >= minTime -//=> false - -new Date(-8640000000000001) -//=> Invalid Date -``` diff --git a/node_modules/date-fns/docs/esm.md b/node_modules/date-fns/docs/esm.md deleted file mode 100644 index a3fcfa8..0000000 --- a/node_modules/date-fns/docs/esm.md +++ /dev/null @@ -1,24 +0,0 @@ -# ECMAScript Modules - -**date-fns** v2.x provides support for -[ECMAScript Modules](http://www.ecma-international.org/ecma-262/6.0/#sec-modules) -that enables tree-shaking for bundlers, like [rollup.js](http://rollupjs.org) -and [webpack](https://webpack.js.org). - -If you have tree-shaking enabled in your bundler, just import functions normally: - -```javascript -import { format, parse } from 'date-fns' -import { enUS, eo } from 'date-fns/locale' -import { addDays, addHours } from 'date-fns/fp' -``` - -In TypeScript, now you can import individual functions in more idiomatic way: - -```typescript -// Before -import * as format from 'date-fns/format' - -// Now -import format from 'date-fns/format' -``` diff --git a/node_modules/date-fns/docs/fp.md b/node_modules/date-fns/docs/fp.md deleted file mode 100644 index fc7ca56..0000000 --- a/node_modules/date-fns/docs/fp.md +++ /dev/null @@ -1,70 +0,0 @@ -# FP Guide - -**date-fns** v2.x provides [functional programming](https://en.wikipedia.org/wiki/Functional_programming) (FP) -friendly functions, like those in [lodash](https://github.com/lodash/lodash/wiki/FP-Guide), -that support [currying](https://en.wikipedia.org/wiki/Currying). - -## Table of Contents - -- [Usage](#usage) - -- [Using Function Composition](#using-function-composition) - -## Usage - -FP functions are provided via `'date-fns/fp'` submodule. - -Functions with options (`format`, `parse`, etc.) have two FP counterparts: -one that has the options object as its first argument and one that hasn't. -The name of the former has `WithOptions` added to the end of its name. - -In **date-fns'** FP functions, the order of arguments is reversed. - -```javascript -import { addYears, formatWithOptions } from 'date-fns/fp' -import { eo } from 'date-fns/locale' -import toUpper from 'lodash/fp/toUpper' // 'date-fns/fp' is compatible with 'lodash/fp'! - -// If FP function has not received enough arguments, it returns another function -const addFiveYears = addYears(5) - -// Several arguments can be curried at once -const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy') - -const dates = [ - new Date(2017, 0 /* Jan */, 1), - new Date(2017, 1 /* Feb */, 11), - new Date(2017, 6 /* Jul */, 2) -] - -const formattedDates = dates.map(addFiveYears).map(dateToString).map(toUpper) -//=> ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022'] -``` - -## Using Function Composition - -The main advantage of FP functions is support of functional-style -[function composing](https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba). - -In the example above, you can compose `addFiveYears`, `dateToString` and `toUpper` into a single function: - -```javascript -const formattedDates = dates.map((date) => toUpper(dateToString(addFiveYears(date)))) -``` - -Or you can use `compose` function provided by [lodash](https://lodash.com) to do the same in more idiomatic way: - -```javascript -import compose from 'lodash/fp/compose' - -const formattedDates = dates.map(compose(toUpper, dateToString, addFiveYears)) -``` - -Or if you prefer natural direction of composing (as opposed to the computationally correct order), -you can use lodash' `flow` instead: - -```javascript -import flow from 'lodash/fp/flow' - -const formattedDates = dates.map(flow(addFiveYears, dateToString, toUpper)) -``` \ No newline at end of file diff --git a/node_modules/date-fns/docs/gettingStarted.md b/node_modules/date-fns/docs/gettingStarted.md deleted file mode 100644 index 6d8bb35..0000000 --- a/node_modules/date-fns/docs/gettingStarted.md +++ /dev/null @@ -1,87 +0,0 @@ -# Getting Started - -## Table of Contents - -- [Introduction](#introduction) - -- [Submodules](#submodules) - -- [Installation](#installation) - -## Introduction - -**date-fns** provides the most comprehensive, yet simple and consistent toolset -for manipulating **JavaScript dates** in **a browser** & **Node.js**. - -**date-fns** is like [lodash](https://lodash.com) for dates. It has -[**200+ functions** for all occasions](https://date-fns.org/docs/). - -```js -import { format, compareAsc } from 'date-fns' - -format(new Date(2014, 1, 11), 'MM/dd/yyyy') -//=> '02/11/2014' - -const dates = [ - new Date(1995, 6, 2), - new Date(1987, 1, 11), - new Date(1989, 6, 10), -] -dates.sort(compareAsc) -//=> [ -// Wed Feb 11 1987 00:00:00, -// Mon Jul 10 1989 00:00:00, -// Sun Jul 02 1995 00:00:00 -// ] -``` - -## Submodules - -**date-fns** includes some optional features as submodules in the npm package. -Here is the list of them, in order of nesting: - -- FP — functional programming-friendly variations of the functions. See [FP Guide](https://date-fns.org/docs/FP-Guide); - -- UTC (in development) — variations of the functions which calculate dates in UTC±00:00 timezone. - -The later submodules are also included inside the former if you want to use multiple features from the list. - -To use submodule features, [install the npm package](#npm) and then import a function from a submodule: - -```js -// The main submodule: -import addDays from 'date-fns/addDays' - -// FP variation: -import addDays from 'date-fns/fp/addDays' - -// UTC variation: -import addDays from 'date-fns/utc/addDays' - -// Both FP and UTC: -import addDays from 'date-fns/fp/utc/addDays' - -// With tree-shaking enabled: -import { addDays, format } from 'date-fns/fp' -``` - -## Installation - -The library is available as an [npm package](https://www.npmjs.com/package/date-fns). - -To install the package, run: - -```bash -npm install date-fns --save -# or -yarn add date-fns -``` - -Start using: - -```js -import { formatDistance, subDays } from 'date-fns' - -formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true }) -//=> "3 days ago" -``` diff --git a/node_modules/date-fns/docs/i18n.md b/node_modules/date-fns/docs/i18n.md deleted file mode 100644 index 4986e62..0000000 --- a/node_modules/date-fns/docs/i18n.md +++ /dev/null @@ -1,92 +0,0 @@ -# Internationalization - -## Table of Contents - -- [Usage](#usage) - -- [Adding New Language](#adding-new-language) - -## Usage - -There are just a few functions that support I18n: - -- [`format`](https://date-fns.org/docs/format) -- [`formatDistance`](https://date-fns.org/docs/formatDistance) -- [`formatDistanceStrict`](https://date-fns.org/docs/formatDistanceStrict) -- [`formatRelative`](https://date-fns.org/docs/formatRelative) - -To use a locale, you need to require it and then pass -as an option to a function: - -```js -import { formatDistance } from 'date-fns' -// Require Esperanto locale -import { eo } from 'date-fns/locale' - -const result = formatDistance( - new Date(2016, 7, 1), - new Date(2015, 0, 1), - {locale: eo} // Pass the locale as an option -) -//=> 'pli ol 1 jaro' -``` - -It might seem complicated to require and pass locales as options, -but unlike Moment.js which bloats your build with all the locales -by default date-fns forces developer to manually require locales when needed. -To make API simple, we encourage you to write tiny wrappers and use those -instead of original functions: - -```js -// app/_lib/format.js - -import { format } from 'date-fns' -import { enGB, eo, ru } from 'date-fns/locale' - -const locales = {enGB, eo, ru} - -// by providing a default string of 'PP' or any of its variants for `formatStr` -// it will format dates in whichever way is appropriate to the locale -export default function (date, formatStr = 'PP') { - return format(date, formatStr, { - locale: locales[window.__localeId__] // or global.__localeId__ - }) -} - -// Later: - -import format from 'app/_lib/format' - -window.__localeId__ = 'enGB' -format(friday13, 'EEEE d') -//=> 'Friday 13' - -window.__localeId__ = 'eo' -format(friday13, 'EEEE d') -//=> 'vendredo 13' - -// If the format string is omitted, it will take the default for the locale. -window.__localeId__ = 'enGB' -format(friday13) -//=> Jul 13, 2019 - -window.__localeId__ = 'eo' -format(friday13) -//=> 2019-jul-13 - -``` - -## Adding New Language - -At the moment there is no definitive guide, so if you feel brave enough, -use this quick guide: - -- First of all, [create an issue](https://github.com/date-fns/date-fns/issues/new?title=XXX%20language%20support) - so you won't overlap with others. -- A detailed explanation of how to [add a new locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#adding-a-new-locale). -- Use [English locale](https://github.com/date-fns/date-fns/tree/master/src/locale/en-US) - as the basis and then incrementally adjust the tests and the code. -- Directions on [adding a locale with the same language as another locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#creating-a-locale-with-the-same-language-as-another-locale). -- If you have questions or need guidance, leave a comment in the issue. - -Thank you for your support! diff --git a/node_modules/date-fns/docs/i18nContributionGuide.md b/node_modules/date-fns/docs/i18nContributionGuide.md deleted file mode 100644 index ac520a7..0000000 --- a/node_modules/date-fns/docs/i18nContributionGuide.md +++ /dev/null @@ -1,921 +0,0 @@ -# I18n Contribution Guide - -## Table of Contents - -- [Adding a new locale](#adding-a-new-locale) - - - [Choosing a directory name for a locale](#choosing-a-directory-name-for-a-locale) - - - [index.js](#index.js) - - - [localize](#localize) - - - [localize.ordinalNumber](#localize.ordinalnumber) - - - [localize.era and using buildLocalizeFn function](#localize.era-and-using-buildlocalizefn-function) - - - [Formatting localizers](#formatting-localizers) - - - [localize.quarter](#localize.quarter) - - - [localize.month](#localize.month) - - - [localize.day](#localize.day) - - - [localize.dayPeriod](#localize.dayperiod) - - - [formatLong](#formatlong) - - - [formatLong.dateFormats](#formatlong.dateformats) - - - [formatLong.timeFormats](#formatlong.timeformats) - - - [formatLong.dateTimeFormats](#formatlong.datetimeformats) - - - [formatRelative](#formatrelative) - - - [match](#match) - - - [formatDistance](#formatdistance) - - - [Tests](#tests) - -- [Creating a locale with the same language as another locale](#creating-a-locale-with-the-same-language-as-another-locale) - -## Adding a new locale - -To add a new locale: - -- [Choose a directory name for it](#choosing-a-directory-name-for-a-locale). - -- Copy the content of an existing locale (e.g. `en-US`) into the newly created directory. - -- Replace the values in the content with yours file-by-file. - Use [CLDR data](https://www.unicode.org/cldr/charts/32/summary/root.html) - as a point of reference which values to choose. - -All locales contain a number of properties: - -- [`formatDistance`](#formatdistance) — distance localizer function used by `formatDistance` and `formatDistanceStrict`. -- [`formatLong`](#formatlong) — contains long date localizer functions used by `format` and `formatRelative`. -- [`formatRelative`](#formatrelative) — relative date localizer function used by `formatRelative`. -- [`localize`](#localize) — contains functions, which localize the various date values. Required by `format` and `formatRelative`. -- [`match`](#match) — contains functions to parse date values. Required by `parse`. -- [`options`](#indexjs) — contains the index of the first day of the week for functions such as `startOfWeek`, - and the value which determines the first week of the year - for functions like `setWeek`. - -### Choosing a directory name for a locale - -Use the four letter code for the directory name (e.g. `en-GB`), - -Use the two/three letter code: - -- if the language code and the country code are the same (e.g. `pt` instead of `pt-PT`). - -- if the language is used in only one country (e.g. `fil` instead of `fil-PH`). - -- if all countries who use the language -also use the same regional standards: the first day of the week, -the week numbering (see: https://en.wikipedia.org/wiki/Week#Week_numbering), -calendar date format (see: https://en.wikipedia.org/wiki/Calendar_date) -and date representation (see: https://en.wikipedia.org/wiki/Date_and_time_representation_by_country -and: https://en.wikipedia.org/wiki/Date_format_by_country) -(e.g. `ca` instead of `ca-ES` and `ca-AD`). - -### index.js - -Locale's `index.js` is where all the properties of the locale are combined in a single file, -documented in JSDoc format. - -```javascript -import formatDistance from './_lib/formatDistance/index.js' -import formatLong from './_lib/formatLong/index.js' -import formatRelative from './_lib/formatRelative/index.js' -import localize from './_lib/localize/index.js' -import match from './_lib/match/index.js' - -/** - * @type {Locale} - * @category Locales - * - * // Name of the locale. - * // Inside the parentheses - name of the country - if the locale uses the four letter code, e.g. en-US, fr-CA or pt-BR. - * @summary English locale (United States). - * - * // Name of the language (used by https://date-fns.org/ website) - * @language English - * - * // ISO 639-2 code. See the list here: - * // https://www.loc.gov/standards/iso639-2/php/code_list.php - * // Used by https://date-fns.org/ to detect the list of the countries that uses the language. - * @iso-639-2 eng - * - * // Authors of the locale (including anyone who corrected or fixed the locale) - * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp} - * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss} - */ -var locale = { - code: 'en', - formatDistance: formatDistance, - formatLong: formatLong, - formatRelative: formatRelative, - localize: localize, - match: match, - options: { - // Index of the first day of the week. - // Sunday is 0, Monday is 1, Saturday is 6. - weekStartsOn: 0, - - // Nth of January which is always in the first week of the year. See: - // https://en.wikipedia.org/wiki/Week#Week_numbering - // http://www.pjh2.de/datetime/weeknumber/wnd.php?l=en - firstWeekContainsDate: 1 - } -} - -export default locale -``` - -### localize - -Put this object in `_lib/localize/index.js` inside your locale directory. -Contains a number of functions for used by `format`: - -```js -var localize = { - ordinalNumber, - era, - quarter, - month, - day, - dayPeriod -} - -export default localize -``` - -#### localize.ordinalNumber - -Function that takes a numeric argument and returns a string with ordinal number: - -```js -// In `en-US` locale: -function ordinalNumber (dirtyNumber, dirtyOptions) { - var number = Number(dirtyNumber) - - var rem100 = number % 100 - if (rem100 > 20 || rem100 < 10) { - switch (rem100 % 10) { - case 1: - return number + 'st' - case 2: - return number + 'nd' - case 3: - return number + 'rd' - } - } - return number + 'th' -} - -var localize = { - ordinalNumber: ordinalNumber, - // ... -} -``` - -If the form of the ordinal number depends on the grammatical case (or other grammatical structures), -use `options.unit` argument which could be one of the values 'year', 'quarter', 'month', 'week', -'date', 'dayOfYear', 'day', 'hour', 'minute' or 'second': - -```js -// In `ru` locale: -function ordinalNumber (dirtyNumber, dirtyOptions) { - var options = dirtyOptions || {} - var unit = String(options.unit) - var suffix - - if (unit === 'date') { - suffix = '-е' - } else if (unit === 'week' || unit === 'minute' || unit === 'second') { - suffix = '-я' - } else { - suffix = '-й' - } - - return dirtyNumber + suffix -} -``` - -#### localize.era and using buildLocalizeFn function - -Localizes a numeric era. Takes either 0 or 1 as the first argument. -As with many of the `localize` functions, they can be generated by built-in -`buildLocalizeFn` function. - -From the CLDR chart, use ['Date & Time'/'Gregorian'/'Eras'](https://www.unicode.org/cldr/charts/32/summary/en.html#1771) values. - -```js -// In `en-US` locale: -import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js' - -var eraValues = { - narrow: ['B', 'A'], - abbreviated: ['BC', 'AD'], - wide: ['Before Christ', 'Anno Domini'] -} - -var localize = { - // ... - era: buildLocalizeFn({ - values: eraValues, - defaultWidth: 'wide' - }), - // ... -} - -export default localize -``` - -General usage of the function: - -```js -var result = locale.localize.era(1, {width: 'abbreviated'}) -//=> 'AD' -``` - -If `width` is not provided or the `values` object does not contain values for the provided width, -`defaultWidth` will be used. `defaultWidth` should indicate the longest form of the localized value. -The same is true for all other `localize` functions. -`width` for `localize.era` function could be either 'narrow', 'abbreviated' or 'wide'. - -```js -var result = locale.localize.era(1, {width: 'foobar'}) -//=> 'Anno Domini' -``` - -#### Formatting localizers - -For some languages, there is a difference between "stand-alone" localizers and "formatting" localizers. -"Stand-alone" means that the resulting value should make grammatical sense without context. -"Formatting" means that the resulting value should be declined using the grammar rules of the language -as if the value was a part of a date. -For example, for languages with grammatical cases, the stand-alone month could be in the nominative case ("January"), -and the formatting month could decline as a part of the phrase "1st of January". -In this case, use parameters `formattingValues` and `defaultFormattingWidth` of `buildLocalizeFn` function. - -Any localizer could be stand-alone and formatting. -Check the CLDR chart for the unit to see if stand-alone and formatting values are different for a certain unit. -If there's no difference (usually it happens in languages without grammatical cases), -parameters `formattingValues` and `defaultFormattingWidth` are not needed. - -In this example, in Russian language a stand-alone month is in the nominative case ("январь"), -and formatting month is in the genitive case ("января" as in "1-е января"). Notice the different endings: - -```js -// In `ru` locale: -var monthValues = { - narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'], - abbreviated: ['янв.', 'фев.', 'март', 'апр.', 'май', 'июнь', 'июль', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'], - wide: ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'] -} -var formattingMonthValues = { - narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'], - abbreviated: ['янв.', 'фев.', 'мар.', 'апр.', 'мая', 'июн.', 'июл.', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'], - wide: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'] -} - -var localize = { - // ... - month: buildLocalizeFn({ - values: monthValues, - defaultWidth: 'wide', - formattingValues: formattingMonthValues, - defaultFormattingWidth: 'wide' - }), - // ... -} - -export default localize -``` - -#### localize.quarter - -Localizes a quarter. Takes 1, 2, 3 or 4 as the first argument. -`width` could be either 'narrow', 'abbreviated' or 'wide'. -From the CLDR chart, use ['Date & Time'/'Gregorian'/'Quarters'](https://www.unicode.org/cldr/charts/32/summary/en.html#1781) values. - -```js -// In `en-US` locale: -import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js' - -var quarterValues = { - narrow: ['1', '2', '3', '4'], - abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], - wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter'] -} - -var localize = { - // ... - quarter: buildLocalizeFn({ - values: quarterValues, - defaultWidth: 'wide', - argumentCallback: function (quarter) { - return Number(quarter) - 1 - } - }), - // ... -} - -export default localize -``` - -Note the usage of `argumentCallback` here. It converts the value passed into `localize.quarter` function -(one of 1, 2, 3 or 4) into the index of the values array inside `quarterValues` (one of 0, 1, 2 or 3). - -#### localize.month - -Localizes a month. Takes numbers between 0 (for January) and 11 (for December). -`width` could be either 'narrow', 'abbreviated' or 'wide'. -From the CLDR chart, use ['Date & Time'/'Gregorian'/'Months'](https://www.unicode.org/cldr/charts/32/summary/en.html#1793) values. - -```js -// In `en-US` locale: -import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js' - -var monthValues = { - narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], - abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] -} - -var localize = { - // ... - month: buildLocalizeFn({ - values: monthValues, - defaultWidth: 'wide' - }), - // ... -} - -export default localize -``` - -**NOTE**: in English, the names of days of the week and months are capitalized. -Check if the same is true for the language you're working on. -Generally, formatted dates should look like they are in the middle of a sentence, -e.g. in Spanish language the weekdays and months should be in the lowercase: - -```js -// In `es` locale: -var monthValues = { - narrow: ['E', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], - abbreviated: ['ene.', 'feb.', 'mar.', 'abr.', 'may.', 'jun.', 'jul.', 'ago.', 'sep.', 'oct.', 'nov.', 'dic.'], - wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'] -} -``` - -`monthValues.narrow` are usually capitalized in every language. Check the CLDR chart for your language. - -#### localize.day - -Localizes a week day. Takes numbers between 0 (for Sunday) and 6 (for Saturday). -`width` could be either 'narrow', 'short', 'abbreviated' or 'wide'. -From the CLDR chart, use ['Date & Time'/'Gregorian'/'Days'](https://www.unicode.org/cldr/charts/32/summary/en.html#1829) values. - -```js -// In `en-US` locale: -import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js' - -var dayValues = { - narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], - abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] -} - -var localize = { - // ... - day: buildLocalizeFn({ - values: dayValues, - defaultWidth: 'wide' - }), - // ... -} - -export default localize -``` - -**NOTE**: the rules of capitalization from `localize.month` are also true for `localize.day`. - -#### localize.dayPeriod - -Localizes a certain day period. -Could take one of these strings as the argument: 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening', 'night'. -`width` could be either 'narrow', 'abbreviated' or 'wide'. -From the CLDR chart, use ['Date & Time'/'Gregorian'/'Day periods'](https://www.unicode.org/cldr/charts/32/summary/en.html#1857) values. - -```js -// In `en-US` locale: -import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js' - -var dayPeriodValues = { - narrow: { - am: 'a', - pm: 'p', - midnight: 'mi', - noon: 'n', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - }, - abbreviated: { - am: 'AM', - pm: 'PM', - midnight: 'midnight', - noon: 'noon', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - }, - wide: { - am: 'a.m.', - pm: 'p.m.', - midnight: 'midnight', - noon: 'noon', - morning: 'in the morning', - afternoon: 'in the afternoon', - evening: 'in the evening', - night: 'at night' - } -} - -var localize = { - // ... - dayPeriod: buildLocalizeFn({ - values: dayPeriodValues, - defaultWidth: 'wide' - }) -} - -export default localize -``` - -### formatLong - -Put this object in `_lib/formatLong/index.js` inside your locale directory. -Locale date formats written in `format` token string format. -See the list of tokens: https://date-fns.org/docs/format -Use https://en.wikipedia.org/wiki/Date_format_by_country and CLDR chart as the reference. - -#### formatLong.dateFormats - -Use ['Date & Time'/'Gregorian'/'Formats - Standard - Date Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1901) values -from the CLDR chart as a reference. - -```js -// In `en-US` locale -import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js' - -var dateFormats = { - full: 'EEEE, MMMM do, y', - long: 'MMMM do, y', - medium: 'MMM d, y', - short: 'MM/dd/yyyy' -} - -var formatLong = { - date: buildFormatLongFn({ - formats: dateFormats, - defaultWidth: 'full' - }), - // ... -} - -export default formatLong -``` - -`dateFormats.long` usually contains the longest form of writing the year, the month, and the day of the month. -Use ordinal day of the month ('do' token) where applicable (date-fns, unlike CLDR supports ordinal numbers). - -`dateFormats.full` contains the same but with the day of the week. - -`dateFormats.medium` contains the same values as `dateFormats.long`, but with short form of month and non-ordinal day. - -`dateFormats.short` usually contains a strictly numerical form of the date. -Pay attention to the order of units (big-, little- or middle-endian) - -#### formatLong.timeFormats - -Use ['Date & Time'/'Gregorian'/'Formats - Standard - Time Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1906) values -from the CLDR chart as a reference. - -Use some variation of 'h:mm aa' for 12-hour clock locales or 'H:mm' for 24-hour clock locales. Use the local time separator. - -```js -// In `en-US` locale -import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js' - -var timeFormats = { - full: 'h:mm:ss a zzzz', - long: 'h:mm:ss a z', - medium: 'h:mm:ss a', - short: 'h:mm a' -} - -var formatLong = { - // ... - time: buildFormatLongFn({ - formats: timeFormats, - defaultWidth: 'full' - }), - // ... -} - -export default formatLong -``` - -#### formatLong.dateTimeFormats - -Use -['Date & Time'/'Gregorian'/'Formats - Standard - Date & Time Combination Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1910) -values from the CLDR chart. - -```js -// In `en-US` locale -import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js' - -var dateTimeFormats = { - full: "{{date}} 'at' {{time}}", - long: "{{date}} 'at' {{time}}", - medium: '{{date}}, {{time}}', - short: '{{date}}, {{time}}' -} - -var formatLong = { - // ... - dateTime: buildFormatLongFn({ - formats: dateTimeFormats, - defaultWidth: 'full' - }) -} - -export default formatLong -``` - -'{{date}}' and '{{time}}' from the strings will be replaced with the date and time respectively. - -### formatRelative - -Put this function in `_lib/formatRelative/index.js` inside your locale directory. -Relative date formats written in `format` token string format. -See the list of tokens: https://date-fns.org/docs/format. -Has to process `lastWeek`, `yesterday`, `today`, `tomorrow`, `nextWeek` and `other` tokens. - -```javascript -// In `en-US` locale -var formatRelativeLocale = { - lastWeek: "'last' eeee 'at' p", - yesterday: "'yesterday at' p", - today: "'today at' p", - tomorrow: "'tomorrow at' p", - nextWeek: "eeee 'at' p", - other: 'P' -} - -export default function formatRelative (token, date, baseDate, options) { - return formatRelativeLocale[token] -} -``` - -You can use `date` and `baseDate` supplied to the function for the difficult situations -(e.g. grammatical genders and cases of the days of the week) -Both `date` and `baseDate` are converted to UTC timezone, which means -that you should use UTC methods to take the date values (i.e. `date.getUTCDay()` instead of `date.getDay()`). -You can use UTC functions from `src/_lib` in date-fns root directory if they are available. -Don't forget to pass `options` object to them! -Example is below. Note the different grammatical case for weekdays (accusative instead of nominative) -and declension of word "прошлый" which depends on the grammatical gender of the weekday: - -```javascript -// In `ru` locale -import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index.js' - -var accusativeWeekdays = ['воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу'] - -function lastWeek (day) { - var weekday = accusativeWeekdays[day] - - switch (day) { - case 0: - return "'в прошлое " + weekday + " в' p" - case 1: - case 2: - case 4: - return "'в прошлый " + weekday + " в' p" - case 3: - case 5: - case 6: - return "'в прошлую " + weekday + " в' p" - } -} - -function thisWeek (day) { - // ... -} - -function nextWeek (day) { - // ... -} - -var formatRelativeLocale = { - lastWeek: function (date, baseDate, options) { - var day = date.getUTCDay() - if (isSameUTCWeek(date, baseDate, options)) { - return thisWeek(day) - } else { - return lastWeek(day) - } - }, - yesterday: "'вчера в' p", - today: "'сегодня в' p", - tomorrow: "'завтра в' p", - nextWeek: function (date, baseDate, options) { - var day = date.getUTCDay() - if (isSameUTCWeek(date, baseDate, options)) { - return thisWeek(day) - } else { - return nextWeek(day) - } - }, - other: 'P' -} - -export default function formatRelative (token, date, baseDate, options) { - var format = formatRelativeLocale[token] - - if (typeof format === 'function') { - return format(date, baseDate, options) - } - - return format -} -``` - -### match - -Put this object in `_lib/match/index.js` inside your locale directory. -Contains the functions used by `parse` to parse a localized value: - -```js -// In `en-US` locale: -import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js' -import buildMatchFn from '../../../_lib/buildMatchFn/index.js' - -var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i -var parseOrdinalNumberPattern = /\d+/i - -var matchEraPatterns = { - narrow: /^(b|a)/i, - abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, - wide: /^(before christ|before common era|anno domini|common era)/i -} -var parseEraPatterns = { - any: [/^b/i, /^(a|c)/i] -} - -var matchQuarterPatterns = { - narrow: /^[1234]/i, - abbreviated: /^q[1234]/i, - wide: /^[1234](th|st|nd|rd)? quarter/i -} -var parseQuarterPatterns = { - any: [/1/i, /2/i, /3/i, /4/i] -} - -var matchMonthPatterns = { - narrow: /^[jfmasond]/i, - abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, - wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i -} -var parseMonthPatterns = { - narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], - any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] -} - -var matchDayPatterns = { - narrow: /^[smtwf]/i, - short: /^(su|mo|tu|we|th|fr|sa)/i, - abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, - wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i -} -var parseDayPatterns = { - narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], - any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] -} - -var matchDayPeriodPatterns = { - narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, - any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i -} -var parseDayPeriodPatterns = { - any: { - am: /^a/i, - pm: /^p/i, - midnight: /^mi/i, - noon: /^no/i, - morning: /morning/i, - afternoon: /afternoon/i, - evening: /evening/i, - night: /night/i - } -} - -var match = { - ordinalNumber: buildMatchPatternFn({ - matchPattern: matchOrdinalNumberPattern, - parsePattern: parseOrdinalNumberPattern, - valueCallback: function (value) { - return parseInt(value, 10) - } - }), - - era: buildMatchFn({ - matchPatterns: matchEraPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseEraPatterns, - defaultParseWidth: 'any' - }), - - quarter: buildMatchFn({ - matchPatterns: matchQuarterPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseQuarterPatterns, - defaultParseWidth: 'any', - valueCallback: function (index) { - return index + 1 - } - }), - - month: buildMatchFn({ - matchPatterns: matchMonthPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseMonthPatterns, - defaultParseWidth: 'any' - }), - - day: buildMatchFn({ - matchPatterns: matchDayPatterns, - defaultMatchWidth: 'wide', - parsePatterns: parseDayPatterns, - defaultParseWidth: 'any' - }), - - dayPeriod: buildMatchFn({ - matchPatterns: matchDayPeriodPatterns, - defaultMatchWidth: 'any', - parsePatterns: parseDayPeriodPatterns, - defaultParseWidth: 'any' - }) -} - -export default match -``` - -These functions mirror those in `localize`. - -For `matchPatterns` the patterns should match the whole meaningful word for the parsed value -(which will be cut from the string in the process of parsing). -`parsePatterns` contains patterns to detect one of the values from the result of `matchPatterns` -Note that the patterns for `parsePatterns` don't necessary contain the whole word: - -```javascript -// In `en-US` locale: -var parseDayPatterns = { - narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], - any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] -} -``` - -but only the bare minimum to parse the value. - -Also note that all patterns have "case-insensitive" flags -to match as much arbitrary user input as possible. For the same reason, try to match -any variation of diacritical marks: - -```javascript -// In `eo` locale: -var matchDayPatterns = { - narrow: /^[dlmĵjvs]/i, - short: /^(di|lu|ma|me|(ĵ|jx|jh|j)a|ve|sa)/i, - abbreviated: /^(dim|lun|mar|mer|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)|ven|sab)/i, - wide: /^(diman(ĉ|cx|ch|c)o|lundo|mardo|merkredo|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)do|vendredo|sabato)/i -} -var parseDayPatterns = { - narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^(j|ĵ)/i, /^v/i, /^s/i], - any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^(j|ĵ)/i, /^v/i, /^s/i] -} -``` - -Here, for the word "dimanĉo" the functions will match also "dimancxo", "dimancho" -and even grammatically incorrect "dimanco". - -Try to match any possible way of writing the word. Don't forget the grammatical cases: - -```javascript -// In `ru` locale: -var matchMonthPatterns = { - narrow: /^[яфмаисонд]/i, - abbreviated: /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)/i, - wide: /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i -} -``` - -and variations of short weekdays and months: - -```javascript -// In `ru` locale: -var matchDayPatterns = { - narrow: /^[впсч]/i, - short: /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i, - abbreviated: /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i, - wide: /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i -} -``` - -(here, the `abbreviated` pattern will match both `вск` and `вос` as the short of `воскресенье` {Sunday}) - -In `match.ordinalNumber` match ordinal numbers as well as non-ordinal numbers: - -```javascript -// In `en-US` locale: -var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i -``` - -Don't forget the grammatical genders: - -```javascript -// In `ru` locale: -var matchOrdinalNumberPattern = /^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i -``` - -### formatDistance - -`formatDistance` property of locale is a function which takes three arguments: -token passed by date-fns' `formatDistance` function (e.g. 'lessThanXMinutes'), -a number of units to be displayed by the function -(e.g. `locale.formatDistance('lessThanXMinutes', 5)` would display localized 'less than 5 minutes') -and object with options. - -Your best guess is to copy `formatDistance` property from another locale and change the values. - -### Tests - -To test locales we use snapshots. See [`en-US` snapshot](https://github.com/date-fns/date-fns/blob/master/src/locale/en-US/snapshot.md) for an example. - -To generate snapshots, run `yarn locale-snapshots`. The snapshot for the locale -you're working on will appear in the root locale directory (e.g. `src/locales/ru/snapshot.md`). - -Once you are done with the locale, generate the snapshot and review the output values. - -## Creating a locale with the same language as another locale - -Import the locale properties already implemented for the language, -but replace unique properties. - -```javascript -// Same as en-US -import formatDistance from '../en-US/_lib/formatDistance/index.js' -import formatRelative from '../en-US/_lib/formatRelative/index.js' -import localize from '../en-US/_lib/localize/index.js' -import match from '../en-US/_lib/match/index.js' - -// Unique for en-GB -import formatLong from './_lib/formatLong/index.js' - -/** - * @type {Locale} - * @category Locales - * @summary English locale (United Kingdom). - * @language English - * @iso-639-2 eng - * @author John Doe [@example]{@link https://github.com/example} - */ -var locale = { - formatDistance: formatDistance, - formatLong: formatLong, - formatRelative: formatRelative, - localize: localize, - match: match, - - // Unique for en-GB - options: { - weekStartsOn: 1, - firstWeekContainsDate: 4 - } -} - -export default locale -``` diff --git a/node_modules/date-fns/docs/index.js b/node_modules/date-fns/docs/index.js deleted file mode 100644 index bd8ee26..0000000 --- a/node_modules/date-fns/docs/index.js +++ /dev/null @@ -1,147 +0,0 @@ -const path = require('path') - -module.exports = { - groups: [ - 'General', - 'Types', - 'Common Helpers', - 'Conversion Helpers', - 'Interval Helpers', - 'Timestamp Helpers', - 'Millisecond Helpers', - 'Second Helpers', - 'Minute Helpers', - 'Hour Helpers', - 'Day Helpers', - 'Weekday Helpers', - 'Week Helpers', - 'ISO Week Helpers', - 'Month Helpers', - 'Quarter Helpers', - 'Year Helpers', - 'ISO Week-Numbering Year Helpers', - 'Decade Helpers', - ], - - staticDocs: [ - { - type: 'markdown', - urlId: 'Getting-Started', - category: 'General', - title: 'Getting Started', - description: 'Introduction & installation instructions', - path: path.join(__dirname, 'gettingStarted.md'), - }, - { - type: 'markdown', - urlId: 'Change-Log', - category: 'General', - title: 'Change Log', - description: 'Changes for each version of the library', - path: path.join(__dirname, '..', 'CHANGELOG.md'), - }, - { - type: 'markdown', - urlId: 'Contributing', - category: 'General', - title: 'Contributing', - description: 'Contribution manual', - path: path.join(__dirname, '..', 'CONTRIBUTING.md'), - }, - { - type: 'markdown', - urlId: 'Constants', - category: 'General', - title: 'Constants', - description: 'Useful constants', - path: path.join(__dirname, 'constants.md'), - }, - { - type: 'markdown', - urlId: 'I18n', - category: 'General', - title: 'I18n', - description: 'Internationalization', - path: path.join(__dirname, 'i18n.md'), - }, - { - type: 'markdown', - urlId: 'I18n-Contribution-Guide', - category: 'General', - title: 'I18n Contribution Guide', - description: 'Locales manual', - path: path.join(__dirname, 'i18nContributionGuide.md'), - }, - { - type: 'markdown', - urlId: 'Time-Zones', - category: 'General', - title: 'Time Zones', - description: 'Time zone functions', - path: path.join(__dirname, 'timeZones.md'), - }, - { - type: 'markdown', - urlId: 'ECMAScript-Modules', - category: 'General', - title: 'ECMAScript Modules', - description: 'Tree-shaking guide', - path: path.join(__dirname, 'esm.md'), - }, - { - type: 'markdown', - urlId: 'webpack', - category: 'General', - title: 'webpack', - description: 'Using date-fns with webpack', - path: path.join(__dirname, 'webpack.md'), - }, - { - type: 'markdown', - urlId: 'FP-Guide', - category: 'General', - title: 'FP Guide', - description: 'Curried functions', - path: path.join(__dirname, 'fp.md'), - }, - { - type: 'markdown', - urlId: 'Unicode-Tokens', - category: 'General', - title: 'Unicode Tokens', - description: 'Usage of the Unicode tokens in parse and format', - path: path.join(__dirname, 'unicodeTokens.md'), - }, - { - type: 'markdown', - urlId: 'Upgrade-Guide', - category: 'General', - title: 'Upgrade guide', - description: 'Changes from v1 to v2', - path: path.join(__dirname, 'upgradeGuide.md'), - }, - { - type: 'markdown', - urlId: 'License', - category: 'General', - title: 'License', - description: 'MIT © Sasha Koss', - path: path.join(__dirname, '..', 'LICENSE.md'), - }, - ], - - sharedDocs: [ - { - fullPath: path.join(__dirname, 'Interval.js'), - }, - { - fullPath: path.join(__dirname, 'Locale.js'), - }, - { - fullPath: path.join(__dirname, 'Duration.js'), - }, - { - fullPath: path.join(__dirname, 'Day.js'), - }, - ], -} diff --git a/node_modules/date-fns/docs/logo.svg b/node_modules/date-fns/docs/logo.svg deleted file mode 100644 index 212e227..0000000 --- a/node_modules/date-fns/docs/logo.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/node_modules/date-fns/docs/logotype.svg b/node_modules/date-fns/docs/logotype.svg deleted file mode 100644 index 8b2a3a4..0000000 --- a/node_modules/date-fns/docs/logotype.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/node_modules/date-fns/docs/release.md b/node_modules/date-fns/docs/release.md deleted file mode 100644 index e0639fb..0000000 --- a/node_modules/date-fns/docs/release.md +++ /dev/null @@ -1,19 +0,0 @@ -# Releasing date-fns - -1. First, make sure that the library is built by running `./scripts/build/build.sh` and committing and pushing any change you would have. - -2. Then add the changelog entry generated by `yarn ts-node scripts/release/buildChangelog.ts` to [CHANGELOG.md](../CHANGELOG.md). Make sure that the output is valid Markdown and fix if there're any errors. Commit and push the file. - -3. Using the version that the changelog script generated, run the command: - - ```bash - env VERSION="vX.XX.X" APP_ENV="production" GOOGLE_APPLICATION_CREDENTIALS="secrets/production/key.json" ./scripts/release/release.sh - ``` - - The script will change `package.json`. **Do not commit the change, and reset it instead**. - -4. Now when the package is published, go to [GitHub Releases](https://github.com/date-fns/date-fns/releases) and draft a new version using the changelog entry you generated earlier. - -5. Finally, write an announce tweet using the created GitHub release as the tweet link. - -You're done, great job! diff --git a/node_modules/date-fns/docs/timeZones.md b/node_modules/date-fns/docs/timeZones.md deleted file mode 100644 index 54eb90b..0000000 --- a/node_modules/date-fns/docs/timeZones.md +++ /dev/null @@ -1,63 +0,0 @@ -# Time Zones - -## Table of Contents - -- [Overview](#overview) - -- [`date-fns-tz`](#date-fns-tz) - -## Overview - -Working with UTC or ISO date strings is easy, and so is working with JS dates when all times -are displayed in a user's local time in the browser. The difficulty comes when working with another -time zone's local time, other than the current system's, like showing the local time of an event in LA -at 8pm PST on a Node server in Europe or a user's machine set to EST. - -In this case there are two relevant pieces of information: - -- a fixed moment in time in the form of a timestamp, UTC or ISO date string, and -- the time zone descriptor, usually an offset or IANA time zone name (e.g. `America/Los_Angeles`). - -Libraries like Moment and Luxon, which provide their own date time classes, manage these timestamp and time -zone values internally. Since `date-fns` always returns a plain JS Date, which implicitly has the current -system's time zone, helper functions are needed for handling common time zone related use cases. - -## [`date-fns-tz`](https://www.npmjs.com/package/date-fns-tz) - -Dependency free IANA time zone support is implemented via the -[Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) to keep -actual time zone data out of code bundles. Modern browsers all support the -[necessary features](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#Browser_compatibility), -and for those that don't a [polyfill](https://github.com/yahoo/date-time-format-timezone) can be used. - -Functions are provided for converting to and from a Date instance which will have the internal UTC time -adjusted so it prints to the correct time value in the associated time zone, regardless of the current -system time zone. The `date-fns` `format` function is extended with support for the `z...zzzz` tokens to -format long and short time zone names. - -Compatible with `date-fns` version 2 - -License: MIT - -### Synopsis - -```js -const { zonedTimeToUtc, utcToZonedTime, format } = require('date-fns-tz') - -// Set the date to "2018-09-01T16:01:36.386Z" -const utcDate = zonedTimeToUtc('2018-09-01 18:01:36.386', 'Europe/Berlin') - -// Obtain a Date instance that will render the equivalent Berlin time for the UTC date -const date = new Date('2018-09-01T16:01:36.386Z') -const timeZone = 'Europe/Berlin' -const zonedDate = utcToZonedTime(date, timeZone) -// zonedDate could be used to initialize a date picker or display the formatted local date/time - -// Set the output to "1.9.2018 18:01:36.386 GMT+02:00 (CEST)" -const pattern = 'd.M.yyyy HH:mm:ss.SSS \'GMT\' XXX (z)' -const output = format(zonedDate, pattern, { timeZone: 'Europe/Berlin' }) -``` - -### Links - -- [API / Usage Scenarios](https://github.com/marnusw/date-fns-tz#time-zone-helpers) diff --git a/node_modules/date-fns/docs/unicodeTokens.md b/node_modules/date-fns/docs/unicodeTokens.md deleted file mode 100644 index 5daf282..0000000 --- a/node_modules/date-fns/docs/unicodeTokens.md +++ /dev/null @@ -1,54 +0,0 @@ -# Unicode Tokens - -Starting with v2, `format` and `parse` use [Unicode tokens]. - -The tokens are different from Moment.js and other libraries that opted to use -custom formatting rules. While usage of a standard ensures compatibility and -the future of the library, it causes confusion that this document intends -to resolve. - -## Popular mistakes - -There are 4 tokens that cause most of the confusion: - -- `D` and `DD` that represent the day of a year (1, 2, ..., 365, 366) - are often confused with `d` and `dd` that represent the day of a month - (1, 2, ..., 31). - -- `YY` and `YYYY` that represent the local week-numbering year (44, 01, 00, 17) - are often confused with `yy` and `yyyy` that represent the calendar year. - -```js -// ❌ Wrong! -format(new Date(), 'YYYY-MM-DD') -//=> 2018-10-283 - -// ✅ Correct -format(new Date(), 'yyyy-MM-dd') -//=> 2018-10-10 - -// ❌ Wrong! -parse('11.02.87', 'D.MM.YY', new Date()).toString() -//=> 'Sat Jan 11 1986 00:00:00 GMT+0200 (EET)' - -// ✅ Correct -parse('11.02.87', 'd.MM.yy', new Date()).toString() -//=> 'Wed Feb 11 1987 00:00:00 GMT+0200 (EET)' -``` - -To help with the issue, `format` and `parse` functions won't accept -these tokens without `useAdditionalDayOfYearTokens` option for `D` and `DD` and -`useAdditionalWeekYearTokens` options for `YY` and `YYYY`: - -```js -format(new Date(), 'D', { useAdditionalDayOfYearTokens: true }) -//=> '283' - -parse('365+1987', 'DD+YYYY', new Date(), { - useAdditionalDayOfYearTokens: true, - useAdditionalWeekYearTokens: true -}).toString() -//=> 'Wed Dec 31 1986 00:00:00 GMT+0200 (EET)' -``` - -[Unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table diff --git a/node_modules/date-fns/docs/upgradeGuide.md b/node_modules/date-fns/docs/upgradeGuide.md deleted file mode 100644 index 08e0337..0000000 --- a/node_modules/date-fns/docs/upgradeGuide.md +++ /dev/null @@ -1,118 +0,0 @@ -# v2 Upgrade Guide - -## Common changes - -This page covers a few of the most common problems people face when updating from v1 to v2. For a more detailed list of changes, look at the [change log for version 2.0.0](https://date-fns.org/docs/Change-Log). - -### Camel case naming schema - -Function submodules now use camelCase naming schema: - -```javascript -// Before v2.0.0 -import differenceInCalendarISOYears from 'date-fns/difference_in_calendar_iso_years' - -// v2.0.0 onward -import differenceInCalendarISOYears from 'date-fns/differenceInCalendarISOYears' -``` - -### New formatting tokens - -Starting with v2 `format` and `parse` uses [Unicode tokens]. - -See [Unicode Tokens doc](https://date-fns.org/docs/Unicode-Tokens) for more details. - -### String arguments - -Functions now don't accept strings as date arguments. Strings should -be parsed using `parseISO` (ISO 8601) or `parse`. - -See [this post](https://blog.date-fns.org/post/we-cut-date-fns-v2-minimal-build-size-down-to-300-bytes-and-now-its-the-smallest-date-library-18f2nvh2z0yal) for more details. - -```javascript -// Before v2.0.0 -addDays('2016-01-01', 1) - -// v2.0.0 onward -addDays(parseISO('2016-01-01'), 1) -``` - -### Arguments conversion - -All functions now implicitly convert arguments by following rules: - -| | date | number | string | boolean | -| --------- | ------------ | ------ | ----------- | ------- | -| 0 | new Date(0) | 0 | '0' | false | -| '0' | Invalid Date | 0 | '0' | false | -| 1 | new Date(1) | 1 | '1' | true | -| '1' | Invalid Date | 1 | '1' | true | -| true | Invalid Date | NaN | 'true' | true | -| false | Invalid Date | NaN | 'false' | false | -| null | Invalid Date | NaN | 'null' | false | -| undefined | Invalid Date | NaN | 'undefined' | false | -| NaN | Invalid Date | NaN | 'NaN' | false | - -Notes: - -- as before, arguments expected to be `Date` are converted to `Date` using _date-fns'_ `toDate` function; -- arguments expected to be numbers are converted to integer numbers using our custom `toInteger` implementation - (see [#765](https://github.com/date-fns/date-fns/pull/765)); -- arguments expected to be strings are converted to strings using JavaScript's `String` function; -- arguments expected to be booleans are converted to boolean using JavaScript's `Boolean` function. - -`null` and `undefined` passed to optional arguments (i.e. properties of `options` argument) -are ignored as if no argument was passed. - -If any argument is invalid (i.e. `NaN` for numbers and `Invalid Date` for dates), -an invalid value will be returned: - -- `false` for functions that return booleans (expect `isValid`); -- `Invalid Date` for functions that return dates; -- `NaN` for functions that return numbers; -- and `String('Invalid Date')` for functions that return strings. - -See tests and PRs [#460](https://github.com/date-fns/date-fns/pull/460) and -[#765](https://github.com/date-fns/date-fns/pull/765) for exact behavior. - -### `null` - -`null` now is not a valid date. `isValid(null)` returns `false`; -`toDate(null)` returns an invalid date. Since `toDate` is used internally -by all the functions, operations over `null` will also return an invalid date. -[See #537](https://github.com/date-fns/date-fns/issues/537) for the reasoning. - -### `RangeError` - -Functions now throw `RangeError` if optional values passed to `options` -are not `undefined` or have expected values. -This change is introduced for consistency with ECMAScript standard library which does the same. - -### `TypeError` - -All functions now check if the passed number of arguments is less -than the number of required arguments and throw `TypeError` exception if so. - -### UMD/CDN - -The Bower & UMD/CDN package versions are no longer supported. - -### New locale format - -See [docs/Locale](https://date-fns.org/docs/Locale). - -Locales renamed: - -- `en` → `en-US` -- `zh_cn` → `zh-CN` -- `zh_tw` → `zh-TW` - -```javascript -// Before v2.0.0 -import locale from 'date-fns/locale/zh_cn' - -// v2.0.0 onward -import locale from 'date-fns/locale/zh-CN' -``` - -[unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table diff --git a/node_modules/date-fns/docs/webpack.md b/node_modules/date-fns/docs/webpack.md deleted file mode 100644 index 37b043d..0000000 --- a/node_modules/date-fns/docs/webpack.md +++ /dev/null @@ -1,48 +0,0 @@ -# webpack - -## Removing unused languages from dynamic import - -If a locale is imported dynamically, then all locales from date-fns are loaded by webpack into a bundle (~160kb) or split across the chunks. This prolongs the build process and increases the amount of space taken. However, it is possible to use webpack to trim down languages using [ContextReplacementPlugin]. - -Let's assume that we have a single point in which supported locales are present: - -`config.js`: - -```js -// `see date-fns/src/locale` for available locales -export const supportedLocales = ['en-US', 'de', 'pl', 'it'] -``` - -We could also have a function that formats the date: - -```js -const getLocale = (locale) => import(`date-fns/locale/${locale}/index.js`) // or require() if using CommonJS - -const formatDate = (date, formatStyle, locale) => { - return format(date, formatStyle, { - locale: getLocale(locale), - }) -} -``` - -In order to exclude unused languages we can use webpacks [ContextReplacementPlugin]. - -`webpack.config.js`: - -```js -import webpack from 'webpack' -import { supportedLocales } from './config.js' - -export default const config = { - plugins: [ - new webpack.ContextReplacementPlugin( - /^date-fns[/\\]locale$/, - new RegExp(`\\.[/\\\\](${supportedLocales.join('|')})[/\\\\]index\\.js$`) - ) - ] -} -``` - -This results in a language bundle of ~23kb . - -[contextreplacementplugin]: https://webpack.js.org/plugins/context-replacement-plugin/ -- cgit v1.2.3