[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_size = 2\n"
  },
  {
    "path": ".eslintrc.json",
    "content": "{\n  \"extends\": \"airbnb-base\",\n  \"plugins\": [\n    \"jest\"\n  ],\n  \"env\": {\n    \"jest/globals\": true\n  },\n  \"globals\": {\n    \"window\": true,\n    \"dayjs\": true\n  },\n  \"rules\": {\n    \"semi\": [\n      2,\n      \"never\"\n    ],\n    \"comma-dangle\": [\n      \"error\",\n      \"never\"\n    ],\n    \"no-param-reassign\": [\n      0\n    ],\n    \"func-names\": [\n      0\n    ],\n    \"import/no-extraneous-dependencies\": [\n      0\n    ],\n    \"import/no-unresolved\": [\n      2,\n      {\n        \"ignore\": [\n          \"dayjs\"\n        ]\n      }\n    ],\n    \"import/extensions\": [\n      2,\n      \"never\"\n    ]\n  }\n}\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [iamkun]\npatreon: # Replace with a single Patreon username\nopen_collective: dayjs\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/--bug-report.md",
    "content": "---\nname: \"\\U0001F4A9Bug report\"\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Information**\n - Day.js Version [e.g. v1.0.0]\n - OS: [e.g. iOS]\n - Browser [e.g. chrome 62]\n - Time zone: [e.g. GMT-07:00 DST (Pacific Daylight Time)]\n"
  },
  {
    "path": ".github/workflows/check.yml",
    "content": "name: Lint & Unit Test\non:\n  push:\n    branches: [dev]\n  pull_request:\n    branches: [dev]\n\njobs:\n  check:\n    uses: ./.github/workflows/lint-test.yml\n    secrets:\n      inherit\n"
  },
  {
    "path": ".github/workflows/lint-test.yml",
    "content": "on:\n  workflow_call:\n    secrets:\n      CODECOV_TOKEN:\n        required: false\n\njobs:\n  lint-and-test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: Setup Node\n        uses: actions/setup-node@v3\n        with:\n          node-version: 'lts/*'\n          cache: 'npm'\n      - name: Install dependencies\n        run: npm install\n      - name: Run Lint\n        run: npm run lint\n      - name: Run tests\n        run: npm test\n      - name: Upload coverage to Codecov\n        env:\n          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}\n        if: env.CODECOV_TOKEN != null\n        uses: codecov/codecov-action@v4\n        with:\n          token: ${{ env.CODECOV_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\non:\n  push:\n    branches: [master]\n\njobs:\n  lint-and-test:\n    uses: ./.github/workflows/lint-test.yml\n    secrets:\n      inherit\n  release:\n    needs: lint-and-test\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n      issues: write\n      pull-requests: write\n      id-token: write\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n      - name: Setup Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: 'lts/*'\n      - name: Install dependencies\n        run: npm clean-install\n      - name: Build\n        env:\n          NODE_OPTIONS: --openssl-legacy-provider\n        run: npm run build && npm run babel\n      - name: Verify provenance\n        run: npm audit signatures\n      - name: Release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: |\n          npm install @semantic-release/changelog @semantic-release/git semantic-release --no-save\n          npx patch-package\n          npx semantic-release\n"
  },
  {
    "path": ".gitignore",
    "content": "# OSX\n.DS_Store\n\n# IDE\n.idea\n.vscode\n\n# npm\nnode_modules\nyarn.lock\n\n# jest\ncoverage\n\n# build\n/locale\n/plugin\n/dayjs.min.js\n/esm\n/index.d.ts\nlocale.json\n\n#dev\ndemo.js\n"
  },
  {
    "path": ".npmignore",
    "content": "# OSX\n.DS_Store\n\n# IDE\n.idea\n\n# npm\nnode_modules\nyarn.lock\npackage-lock.json\n\n# jest\ncoverage\n\n# dev\nsrc\ntest\ntypes\nbuild\nbabel.config.js\nprettier.config.js\n.eslintrc.json\npatches\n\n#doc\nCONTRIBUTING.md\ndocs\n\n#other\n.travis.yml\nkarma.sauce.conf.js\n.github\n.releaserc\n"
  },
  {
    "path": ".releaserc",
    "content": "{\n  \"branches\": [\"master\"],\n  \"prepare\": [\n    {\n      \"path\": \"@semantic-release/changelog\"\n    },\n    [\n      \"@semantic-release/git\",\n      {\n        \"assets\": [\n          \"CHANGELOG.md\"\n        ]\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## [1.11.20](https://github.com/iamkun/dayjs/compare/v1.11.19...v1.11.20) (2026-03-12)\n\n\n### Bug Fixes\n\n* Update locale km.js to support meridiem ([#3017](https://github.com/iamkun/dayjs/issues/3017)) ([9d2b6a1](https://github.com/iamkun/dayjs/commit/9d2b6a1ec744ad5db13afd4d701f93349135dfec))\n* update updateLocale plugin to merge nested object properties instead of replacing ([#3012](https://github.com/iamkun/dayjs/issues/3012)) ([99691c5](https://github.com/iamkun/dayjs/commit/99691c5f3bd1371d3b763d5f9dfaed9a1945a477)), closes [#1118](https://github.com/iamkun/dayjs/issues/1118)\n\n## [1.11.19](https://github.com/iamkun/dayjs/compare/v1.11.18...v1.11.19) (2025-10-31)\n\n\n### Bug Fixes\n\n* added usage warnings for diff + updated unit tests ([#2948](https://github.com/iamkun/dayjs/issues/2948)) ([269a7a9](https://github.com/iamkun/dayjs/commit/269a7a9cf3649b7a4b328e771173701764a8480d))\n* dont instantiate regexes within ar locale functions to avoid performance overhead ([#2898](https://github.com/iamkun/dayjs/issues/2898)) ([af5e9f0](https://github.com/iamkun/dayjs/commit/af5e9f0e7649cbd1ecf707daab8303f2733f2563))\n* replace italian locale \"un' ora fa\" with \"un'ora fa\", add tests for it ([#2930](https://github.com/iamkun/dayjs/issues/2930)) ([9e9f76c](https://github.com/iamkun/dayjs/commit/9e9f76cf117fa834260b30193434bc4481b4b6be))\n* Updated Belarusian locale with relative time ([#2656](https://github.com/iamkun/dayjs/issues/2656)) ([1d8746c](https://github.com/iamkun/dayjs/commit/1d8746c23bd667bde80ee627a915301ebd69e1a2))\n\n## [1.11.18](https://github.com/iamkun/dayjs/compare/v1.11.17...v1.11.18) (2025-08-30)\n\n\n### Bug Fixes\n\n* error semantic-release dependency ([8cfb313](https://github.com/iamkun/dayjs/commit/8cfb31386d840d31e9655870f4d8c01592eb753a))\n\n## [1.11.17](https://github.com/iamkun/dayjs/compare/v1.11.16...v1.11.17) (2025-08-29)\n\n\n### Bug Fixes\n\n* [en-AU] locale use the same ordinal as moment ([#2878](https://github.com/iamkun/dayjs/issues/2878)) ([1b95ecd](https://github.com/iamkun/dayjs/commit/1b95ecd21d4feafe7ab113a2d48d7d8d93bb95c9))\n\n## [1.11.16](https://github.com/iamkun/dayjs/compare/v1.11.15...v1.11.16) (2025-08-29)\n\n\n### Bug Fixes\n\n* test release workflow (no code changes) ([c38c428](https://github.com/iamkun/dayjs/commit/c38c428a78c344699eff373adfc8c007bb3a514f))\n\n## [1.11.15](https://github.com/iamkun/dayjs/compare/v1.11.14...v1.11.15) (2025-08-28)\n\n\n### Bug Fixes\n\n* Fix misspellings in Irish or Irish Gaelic [ga] ([#2861](https://github.com/iamkun/dayjs/issues/2861)) ([9c14a42](https://github.com/iamkun/dayjs/commit/9c14a4245a8e764ee3260ff17a7ff48dfd09d279))\n\n## [1.11.14](https://github.com/iamkun/dayjs/compare/v1.11.13...v1.11.14) (2025-08-27)\n\n\n### Bug Fixes\n\n* .utcOffset(0, true) result and its clone are different bug ([#2505](https://github.com/iamkun/dayjs/issues/2505)) ([fefdcd4](https://github.com/iamkun/dayjs/commit/fefdcd4b6b807786f65139b6dd801e0014d7dc6f))\n\n## [1.11.13](https://github.com/iamkun/dayjs/compare/v1.11.12...v1.11.13) (2024-08-20)\n\n\n### Bug Fixes\n\n* customParseFormat supports Q quter / w ww weekOfYear ([#2705](https://github.com/iamkun/dayjs/issues/2705)) ([8ca74f1](https://github.com/iamkun/dayjs/commit/8ca74f178eff4bb4eb686676cf35fe7edb815536))\n\n## [1.11.12](https://github.com/iamkun/dayjs/compare/v1.11.11...v1.11.12) (2024-07-18)\n\n\n### Bug Fixes\n\n* Add NegativeYear Plugin support  ([#2640](https://github.com/iamkun/dayjs/issues/2640)) ([6a42e0d](https://github.com/iamkun/dayjs/commit/6a42e0d7398639238f575d51287daaf4d495a2a3))\n* add UTC support to negativeYear plugin ([#2692](https://github.com/iamkun/dayjs/issues/2692)) ([f3ef705](https://github.com/iamkun/dayjs/commit/f3ef705613af83333fe132b470896a65e12f31b0))\n* Fix zero offset issue when use tz with locale ([#2532](https://github.com/iamkun/dayjs/issues/2532)) ([d0e6738](https://github.com/iamkun/dayjs/commit/d0e6738a66e1b65d3706aad2f9168ebb43d4f887))\n* Improve typing for min/max plugin ([#2573](https://github.com/iamkun/dayjs/issues/2573)) ([4fbe94a](https://github.com/iamkun/dayjs/commit/4fbe94aaba8c815a42cf4d23dabac918ec50e68c))\n* timezone plugin correct parse UTC tz ([#2693](https://github.com/iamkun/dayjs/issues/2693)) ([b575c81](https://github.com/iamkun/dayjs/commit/b575c81a8c9c85c7a0baf6f608a12f9d3ba95bd1))\n\n## [1.11.11](https://github.com/iamkun/dayjs/compare/v1.11.10...v1.11.11) (2024-04-28)\n\n\n### Bug Fixes\n\n* day of week type literal ([#2630](https://github.com/iamkun/dayjs/issues/2630)) ([f68d73e](https://github.com/iamkun/dayjs/commit/f68d73efe562fdedd9e288ecb0ce6565e602f507))\n* improve locale \"zh-hk\" format and meridiem ([#2419](https://github.com/iamkun/dayjs/issues/2419)) ([a947a51](https://github.com/iamkun/dayjs/commit/a947a5171aad5695eaf593bc95fe073de0f0894a))\n* Update 'da' locale to match correct first week of year ([#2592](https://github.com/iamkun/dayjs/issues/2592)) ([44b0936](https://github.com/iamkun/dayjs/commit/44b0936ad709212b63e48672d8b9c225e2c3b830))\n* update locale Bulgarian monthsShort Jan ([#2538](https://github.com/iamkun/dayjs/issues/2538)) ([f0c9a41](https://github.com/iamkun/dayjs/commit/f0c9a41c6ec91528f3790e442b0c5dff15a4e640))\n\n## [1.11.10](https://github.com/iamkun/dayjs/compare/v1.11.9...v1.11.10) (2023-09-19)\n\n\n### Bug Fixes\n\n* Add Korean Day of Month with ordinal ([#2395](https://github.com/iamkun/dayjs/issues/2395)) ([dd55ee2](https://github.com/iamkun/dayjs/commit/dd55ee2aadd1009242235e47d558bbf028827896))\n* change back fa locale to the Gregorian calendar equivalent ([#2411](https://github.com/iamkun/dayjs/issues/2411)) ([95e9458](https://github.com/iamkun/dayjs/commit/95e9458b221fe35e59ee4a160a5db247313a68fb))\n* duration plugin - MILLISECONDS_A_MONTH const calculation ([#2362](https://github.com/iamkun/dayjs/issues/2362)) ([f0a0b54](https://github.com/iamkun/dayjs/commit/f0a0b546b074b3b511c2319a1ce83d412894b91f))\n* duration plugin getter get result  0 instead of undefined ([#2369](https://github.com/iamkun/dayjs/issues/2369)) ([061aa7e](https://github.com/iamkun/dayjs/commit/061aa7ed6c31696974665fc9b11a74d30841ebed))\n* fix isDayjs check logic ([#2383](https://github.com/iamkun/dayjs/issues/2383)) ([5f3f878](https://github.com/iamkun/dayjs/commit/5f3f8786c796cd432fe6bcb6966a810daea89203))\n* fix timezone plugin to get correct locale setting ([#2420](https://github.com/iamkun/dayjs/issues/2420)) ([4f45012](https://github.com/iamkun/dayjs/commit/4f4501256fa1bc72128aae1d841bbd782df86aed))\n* **locale:** add meridiem in `ar` locale ([#2418](https://github.com/iamkun/dayjs/issues/2418)) ([361be5c](https://github.com/iamkun/dayjs/commit/361be5c7c628614ee833d710acbe154a598b904d))\n* round durations to millisecond precision for ISO string ([#2367](https://github.com/iamkun/dayjs/issues/2367)) ([890a17a](https://github.com/iamkun/dayjs/commit/890a17a8d8ddd43c7c8b806e3afc7b27f3288d27))\n* sub-second precisions need to be rounded at the seconds field to avoid adding floats ([#2377](https://github.com/iamkun/dayjs/issues/2377)) ([a9d7d03](https://github.com/iamkun/dayjs/commit/a9d7d0398d22ebd4bfc3812ca0134a97606d54d9))\n* update $x logic to avoid plugin error ([#2429](https://github.com/iamkun/dayjs/issues/2429)) ([2254635](https://github.com/iamkun/dayjs/commit/22546357f30924fcff3b3ffa14fd04be21f97a5e))\n* Update Slovenian locale for relative time ([#2396](https://github.com/iamkun/dayjs/issues/2396)) ([5470a15](https://github.com/iamkun/dayjs/commit/5470a15e437fac803797363063b24f3ba3bd5299))\n* update uzbek language translation ([#2327](https://github.com/iamkun/dayjs/issues/2327)) ([0a91056](https://github.com/iamkun/dayjs/commit/0a910564d76dc7c128da8e0d85d8e11ebdb5660b))\n\n## [1.11.9](https://github.com/iamkun/dayjs/compare/v1.11.8...v1.11.9) (2023-07-01)\n\n\n### Bug Fixes\n\n* Add null to min and max plugin return type ([#2355](https://github.com/iamkun/dayjs/issues/2355)) ([62d9042](https://github.com/iamkun/dayjs/commit/62d9042eb84b78d78324694ccbeaad1679d37e68))\n* check if null passed to objectSupport parser ([#2175](https://github.com/iamkun/dayjs/issues/2175)) ([013968f](https://github.com/iamkun/dayjs/commit/013968f609c32e2269df69b4dd1feb2e8e1e035a))\n* dayjs.diff improve performance ([#2244](https://github.com/iamkun/dayjs/issues/2244)) ([33c80e1](https://github.com/iamkun/dayjs/commit/33c80e14cf14f70ceb4f54639e266cd70a3c3996))\n* dayjs(null) throws error, not return dayjs object as invalid date ([#2334](https://github.com/iamkun/dayjs/issues/2334)) ([c79e2f5](https://github.com/iamkun/dayjs/commit/c79e2f5d03eef5660b1f13385b69c0c9668d2f98))\n* objectSupport plugin causes an error when null is passed to dayjs function (closes [#2277](https://github.com/iamkun/dayjs/issues/2277)) ([#2342](https://github.com/iamkun/dayjs/issues/2342)) ([89bf31c](https://github.com/iamkun/dayjs/commit/89bf31ce0a36dcfc892029dc019d85d3654cf5fb))\n* Optimize format method ([#2313](https://github.com/iamkun/dayjs/issues/2313)) ([1fe1b1d](https://github.com/iamkun/dayjs/commit/1fe1b1d9a214d3b8c9f267b432801424a493f1c4))\n* update Duration plugin add/subtract take into account days in month ([#2337](https://github.com/iamkun/dayjs/issues/2337)) ([3b1060f](https://github.com/iamkun/dayjs/commit/3b1060f92183ab3a3c49289c2d87fbdd34c1eacc))\n* update MinMax plugin 1. ignore the 'null' in args 2. return the only one arg ([#2330](https://github.com/iamkun/dayjs/issues/2330)) ([3c2c6ee](https://github.com/iamkun/dayjs/commit/3c2c6ee4db00bbb43a7a3bb0b56bc0d0f03daddc))\n\n## [1.11.8](https://github.com/iamkun/dayjs/compare/v1.11.7...v1.11.8) (2023-06-02)\n\n\n### Bug Fixes\n\n* .format add padding to 'YYYY' ([#2231](https://github.com/iamkun/dayjs/issues/2231)) ([00c223b](https://github.com/iamkun/dayjs/commit/00c223b7e92970d07557133994fcb225a6d4c960))\n* Added .valueOf method to Duration class ([#2226](https://github.com/iamkun/dayjs/issues/2226)) ([9b4fcfd](https://github.com/iamkun/dayjs/commit/9b4fcfde35b39693894be1821b6c7222fac98657))\n* timezone type mark `date` parameter as optional ([#2222](https://github.com/iamkun/dayjs/issues/2222)) ([b87aa0e](https://github.com/iamkun/dayjs/commit/b87aa0ed9a748c478a66ef48230cd1d6350d7b8a))\n* type file first parameter date is optional in isSame(), isBefore(), isAfter() ([#2272](https://github.com/iamkun/dayjs/issues/2272)) ([4d56f3e](https://github.com/iamkun/dayjs/commit/4d56f3eb2b3770879d60f824590bf1b32f237d47))\n\n## [1.11.7](https://github.com/iamkun/dayjs/compare/v1.11.6...v1.11.7) (2022-12-06)\n\n\n### Bug Fixes\n\n* Add locale (zh-tw) meridiem ([#2149](https://github.com/iamkun/dayjs/issues/2149)) ([1e9ba76](https://github.com/iamkun/dayjs/commit/1e9ba761ff4e3f2759106dfe1aa9054d5826451c))\n* update fa locale ([#2151](https://github.com/iamkun/dayjs/issues/2151)) ([1c26732](https://github.com/iamkun/dayjs/commit/1c267321a1a01b4947e1482bac67d67ebc7c3dfa))\n\n## [1.11.6](https://github.com/iamkun/dayjs/compare/v1.11.5...v1.11.6) (2022-10-21)\n\n\n### Bug Fixes\n\n* add BigIntSupport plugin ([#2087](https://github.com/iamkun/dayjs/issues/2087)) ([f6dce48](https://github.com/iamkun/dayjs/commit/f6dce48a9e39677718b087867d9fd901d5078155))\n* Fix objectSupport collides with Duration plugin - issue [#2027](https://github.com/iamkun/dayjs/issues/2027) ([#2038](https://github.com/iamkun/dayjs/issues/2038)) ([c9370ea](https://github.com/iamkun/dayjs/commit/c9370ea96bf420439ee7eaa4146e8ed643160312))\n\n## [1.11.5](https://github.com/iamkun/dayjs/compare/v1.11.4...v1.11.5) (2022-08-12)\n\n\n### Bug Fixes\n\n* ordinal for nl not working ([#2011](https://github.com/iamkun/dayjs/issues/2011)) ([c93c85e](https://github.com/iamkun/dayjs/commit/c93c85eaa11564a1aae2d823480a417812c01bf4))\n* wrong ordinal for french locale ([#2010](https://github.com/iamkun/dayjs/issues/2010)) ([dd192a7](https://github.com/iamkun/dayjs/commit/dd192a72fc5d26ce56481e89b0c1ccf5f939be0c))\n\n## [1.11.4](https://github.com/iamkun/dayjs/compare/v1.11.3...v1.11.4) (2022-07-19)\n\n\n### Bug Fixes\n\n* correct past property in ku (kurdish) locale ([#1916](https://github.com/iamkun/dayjs/issues/1916)) ([74e82b9](https://github.com/iamkun/dayjs/commit/74e82b9da5ec8b90361fc27ac7c8b63faf354502))\n* fix French [fr] local ordinal ([#1932](https://github.com/iamkun/dayjs/issues/1932)) ([8f09834](https://github.com/iamkun/dayjs/commit/8f09834a88b8e7f8353c6e7473d4711596890a8c))\n* fix objectSupport plugin ConfigTypeMap type ([#1441](https://github.com/iamkun/dayjs/issues/1441)) ([#1990](https://github.com/iamkun/dayjs/issues/1990)) ([fd51fe4](https://github.com/iamkun/dayjs/commit/fd51fe4f7fa799d8c598343e71fa59299ec4cf93))\n* fix type error to add ordianl property in InstanceLocaleDataReturn and GlobalLocaleDataReturn types ([#1931](https://github.com/iamkun/dayjs/issues/1931)) ([526f0ae](https://github.com/iamkun/dayjs/commit/526f0ae549ffbeeb9ef1099ca23964791fc59743))\n* update locale ar-* meridiem function ([#1954](https://github.com/iamkun/dayjs/issues/1954)) ([3d31611](https://github.com/iamkun/dayjs/commit/3d316117f04362d31f4e8bd349620b8414ce5d0c))\n* zh-tw / zh-hk locale ordinal error ([#1976](https://github.com/iamkun/dayjs/issues/1976)) ([0a1bd08](https://github.com/iamkun/dayjs/commit/0a1bd08e736be7d4e378aaca280caa6543f8066d))\n\n## [1.11.3](https://github.com/iamkun/dayjs/compare/v1.11.2...v1.11.3) (2022-06-06)\n\n\n### Bug Fixes\n\n*  customParseFormat plugin to parse comma as a separator character ([#1913](https://github.com/iamkun/dayjs/issues/1913)) ([41b1405](https://github.com/iamkun/dayjs/commit/41b1405971e099431211ae6c2a100cd797da4427))\n* update Dutch [nl] locale ordinal ([#1908](https://github.com/iamkun/dayjs/issues/1908)) ([5da98f8](https://github.com/iamkun/dayjs/commit/5da98f8085d2d2847d79e38c795082703a14f24b))\n\n## [1.11.2](https://github.com/iamkun/dayjs/compare/v1.11.1...v1.11.2) (2022-05-06)\n\n\n### Bug Fixes\n\n* add OpUnitType (week) to quarterOfYear startOf/endOf types ([#1865](https://github.com/iamkun/dayjs/issues/1865)) ([400bc3e](https://github.com/iamkun/dayjs/commit/400bc3e8915e0c58e7abbfd3a1235364b1abaf3e))\n* Fix type issue with ManipulateType ([#1864](https://github.com/iamkun/dayjs/issues/1864)) ([d033dfc](https://github.com/iamkun/dayjs/commit/d033dfcfc1d2ced39b2733898e8d85ad5984c9e9))\n* fix UTC plugin .valueOf not taking DST into account  ([#1448](https://github.com/iamkun/dayjs/issues/1448)) ([27d1c50](https://github.com/iamkun/dayjs/commit/27d1c506100ae6624f258c21cc06b24768ced733))\n\n## [1.11.1](https://github.com/iamkun/dayjs/compare/v1.11.0...v1.11.1) (2022-04-15)\n\n\n### Bug Fixes\n\n* add Bengali (Bangladesh) [bn-bd] locale ([#1806](https://github.com/iamkun/dayjs/issues/1806)) ([840ed76](https://github.com/iamkun/dayjs/commit/840ed76eedc085afefc4dedd05f31d44196b63b0))\n* refactor replace deprecated String.prototype.substr() ([#1836](https://github.com/iamkun/dayjs/issues/1836)) ([627fa39](https://github.com/iamkun/dayjs/commit/627fa393e4daf83c92431162dbe18534b23fcbae))\n* Update German [de] locale, adds the abbreviations for month including a . in the end, as in September -> Sept. ([#1831](https://github.com/iamkun/dayjs/issues/1831)) ([4e2802c](https://github.com/iamkun/dayjs/commit/4e2802cc3bec2941ffb737a15fb531c90951eafe))\n* update Italian (Switzerland) [it-ch] locale relativeTime ([#1829](https://github.com/iamkun/dayjs/issues/1829)) ([8e6d11d](https://github.com/iamkun/dayjs/commit/8e6d11d053393d97bee1ba411adb2d82de1a58c4))\n* update Kurdish [ku] locale strings and formatted output contains non-standard kurdish characters ([#1848](https://github.com/iamkun/dayjs/issues/1848)) ([a597d0b](https://github.com/iamkun/dayjs/commit/a597d0b1b8dd28e626f8c59d326622088f7b51e7))\n* update locale bo [Tibetan]: corrected the orders in formats ([#1823](https://github.com/iamkun/dayjs/issues/1823)) ([e790516](https://github.com/iamkun/dayjs/commit/e79051617af6787358f6c9b5443d987b8b53a9e1))\n\n# [1.11.0](https://github.com/iamkun/dayjs/compare/v1.10.8...v1.11.0) (2022-03-14)\n\n\n### Bug Fixes\n\n* Add Kirundi (rn) locale ([#1793](https://github.com/iamkun/dayjs/issues/1793)) ([74e5247](https://github.com/iamkun/dayjs/commit/74e5247227a779fffde39bdfcd1ee19911496709))\n* add missing date shorthand D type definition ([#1752](https://github.com/iamkun/dayjs/issues/1752)) ([b045baf](https://github.com/iamkun/dayjs/commit/b045baf1646a81f7e4f446f355d02d5fb0ef4aa7))\n* Add relative time to Galician (gl) and fix ordinals ([#1800](https://github.com/iamkun/dayjs/issues/1800)) ([dcbf170](https://github.com/iamkun/dayjs/commit/dcbf1708400624addfbddbc71e0f6a9ac15fa961))\n* update German locales (de-at, de-ch) ([#1775](https://github.com/iamkun/dayjs/issues/1775)) ([f9055a7](https://github.com/iamkun/dayjs/commit/f9055a77bf3d84c575e5fcf99e21611138ba64d7))\n* update Icelandic [is] locale relativeTime config ([#1796](https://github.com/iamkun/dayjs/issues/1796)) ([76f9e17](https://github.com/iamkun/dayjs/commit/76f9e1756de7e99c01e471dab30ea074b9ec9629))\n* Update index.d.ts note ([#1716](https://github.com/iamkun/dayjs/issues/1716)) ([5a108ff](https://github.com/iamkun/dayjs/commit/5a108ff3159c53fd270ea7638f33c35c934d6457))\n* Update locale German [de] monthsShort ([#1746](https://github.com/iamkun/dayjs/issues/1746)) ([4a7b7d0](https://github.com/iamkun/dayjs/commit/4a7b7d07c885bb9338514c234dbb708e24e9863e))\n* update meridiem function to Kurdish (ku) locale ([#1725](https://github.com/iamkun/dayjs/issues/1725)) ([efd3904](https://github.com/iamkun/dayjs/commit/efd3904ff8cbf0a4fc064911dda76fc86b669f7b))\n* update updateLocal plugin typescript types ([#1692](https://github.com/iamkun/dayjs/issues/1692)) ([c7a3f73](https://github.com/iamkun/dayjs/commit/c7a3f73064dbb63b4d365b2ad4c792f075f4d8d8))\n\n\n### Features\n\n* Fallback to language only locale + support uppercase locales ([#1524](https://github.com/iamkun/dayjs/issues/1524)) ([9138dc2](https://github.com/iamkun/dayjs/commit/9138dc28206875372da4fb74c64716437cd11b95))\n\n## [1.10.8](https://github.com/iamkun/dayjs/compare/v1.10.7...v1.10.8) (2022-02-28)\n\n\n### Bug Fixes\n\n* set locale pt, pt-br correct weekdays and months ([#1697](https://github.com/iamkun/dayjs/issues/1697)) ([e019301](https://github.com/iamkun/dayjs/commit/e01930171c8235f58a114236f146086428f99569))\n\n## [1.10.7](https://github.com/iamkun/dayjs/compare/v1.10.6...v1.10.7) (2021-09-10)\n\n\n### Bug Fixes\n\n* Add  Spanish (Mexico) [es-mx] locale ([#1614](https://github.com/iamkun/dayjs/issues/1614)) ([3393f2a](https://github.com/iamkun/dayjs/commit/3393f2ad55346d55902683a2e31c6f253d96c8c2))\n* Add Arabic (Iraq) [ar-iq] locale ([#1627](https://github.com/iamkun/dayjs/issues/1627)) ([b5a1391](https://github.com/iamkun/dayjs/commit/b5a1391011b247d08863d291542db5937b23b427))\n* add format object type to type file ([#1572](https://github.com/iamkun/dayjs/issues/1572)) ([5a79cc6](https://github.com/iamkun/dayjs/commit/5a79cc6408e825d9e123629eb44fc19c996d7751))\n* duration plugin when parsing duration from ISO string, set missing components to 0 instead of NaN ([#1611](https://github.com/iamkun/dayjs/issues/1611)) ([252585b](https://github.com/iamkun/dayjs/commit/252585b4b2bd59508150e21bb994908a9d78f9b0))\n* narrow type for `add` and `subtract` ([#1576](https://github.com/iamkun/dayjs/issues/1576)) ([1686962](https://github.com/iamkun/dayjs/commit/16869621b1a42563064dbf87f80c1ebfd74c1188))\n* update customParseFormat plugin strict x X parsing ([#1571](https://github.com/iamkun/dayjs/issues/1571)) ([08adda5](https://github.com/iamkun/dayjs/commit/08adda54edbcca38601f57841921d0f87f84e49e))\n* update Lithuanian [lt] locale spelling for single month ([#1609](https://github.com/iamkun/dayjs/issues/1609)) ([255dc54](https://github.com/iamkun/dayjs/commit/255dc54d9295de135a9037ce6ca13cae4bfd2cfb))\n* Update Norwegian Bokmål [nb] local yearStart 4 ([#1608](https://github.com/iamkun/dayjs/issues/1608)) ([7a8467c](https://github.com/iamkun/dayjs/commit/7a8467c0b7d59821f7e19d4a6973bcda8e4c19b1))\n* update plugin advancedFormat `isValid` validation ([#1566](https://github.com/iamkun/dayjs/issues/1566)) ([755fc8b](https://github.com/iamkun/dayjs/commit/755fc8bb1c532eb991459f180eee81367d12016c))\n* update Sinhalese [si] locale month name ([#1475](https://github.com/iamkun/dayjs/issues/1475)) ([63de2a8](https://github.com/iamkun/dayjs/commit/63de2a8b7dcd7e68c132c85d88572d4c9d296907))\n* update utcOffset plugin type file ([#1604](https://github.com/iamkun/dayjs/issues/1604)) ([f68e4b1](https://github.com/iamkun/dayjs/commit/f68e4b1a29fc33542f74cde10ec6d9fb045ca37e))\n\n## [1.10.6](https://github.com/iamkun/dayjs/compare/v1.10.5...v1.10.6) (2021-07-06)\n\n\n### Bug Fixes\n\n* add invalid date string override ([#1465](https://github.com/iamkun/dayjs/issues/1465)) ([#1470](https://github.com/iamkun/dayjs/issues/1470)) ([06f88f4](https://github.com/iamkun/dayjs/commit/06f88f425828b1ce96b737332d25145a95a4ee9d))\n* add sv-fi Finland Swedish locale ([#1522](https://github.com/iamkun/dayjs/issues/1522)) ([8e32164](https://github.com/iamkun/dayjs/commit/8e32164855cff724642e24c37a631eb4c4d760c8))\n* customParseFormat support parsing X x timestamp ([#1567](https://github.com/iamkun/dayjs/issues/1567)) ([eb087f5](https://github.com/iamkun/dayjs/commit/eb087f52861313b8dd8a5c1b77858665ec72859e))\n* dayjs ConfigTypeMap add null & undefined ([#1560](https://github.com/iamkun/dayjs/issues/1560)) ([b5e40e6](https://github.com/iamkun/dayjs/commit/b5e40e6f16abeaea6a0facfa466d20aefaa8a444))\n* Fix DayOfYear plugin when using BadMutable plugin ([#1511](https://github.com/iamkun/dayjs/issues/1511)) ([0b0c6a3](https://github.com/iamkun/dayjs/commit/0b0c6a31ec9c0aff991b0e8dd6eed116201274cc))\n* Implement ordinal in Bulgarian translation (fixes [#1501](https://github.com/iamkun/dayjs/issues/1501)) ([#1502](https://github.com/iamkun/dayjs/issues/1502)) ([b728da5](https://github.com/iamkun/dayjs/commit/b728da5ed9ed08210004ed20ce5fcd52a92de7da))\n* more strict delimiter in REGEX_PARSE ([#1555](https://github.com/iamkun/dayjs/issues/1555)) ([bfdab5c](https://github.com/iamkun/dayjs/commit/bfdab5c0d45a5736b68e8e1b1354fc021e05f607))\n* parameter type ([#1549](https://github.com/iamkun/dayjs/issues/1549)) ([f369844](https://github.com/iamkun/dayjs/commit/f369844dd69d253c4c7cbf68150939db3db233be))\n* update customParseFormat plugin to custom two-digit year parse function ([#1421](https://github.com/iamkun/dayjs/issues/1421)) ([bb5df55](https://github.com/iamkun/dayjs/commit/bb5df55cd3975dc7638b8f4e762afa470b6620f7))\n* update names of weekdays and months in Bulgarian [bg] to lowercase ([#1438](https://github.com/iamkun/dayjs/issues/1438)) ([b246210](https://github.com/iamkun/dayjs/commit/b24621091fec9cf6704de21e4b323f6f0c4abbf1))\n* update type file `.diff` ([#1505](https://github.com/iamkun/dayjs/issues/1505)) ([6508494](https://github.com/iamkun/dayjs/commit/6508494a4e62977b4397baaeef293d1bcf3c7235))\n* update UTC plugin type file for strict parsing ([#1443](https://github.com/iamkun/dayjs/issues/1443)) ([b4f28df](https://github.com/iamkun/dayjs/commit/b4f28df219fe63202dffdbeeaec5677c4d2c9111))\n\n## [1.10.5](https://github.com/iamkun/dayjs/compare/v1.10.4...v1.10.5) (2021-05-26)\n\n\n### Bug Fixes\n\n* add meridiem in ar locales ([#1375](https://github.com/iamkun/dayjs/issues/1375)) ([319f616](https://github.com/iamkun/dayjs/commit/319f616e572a03b984013d04d1b3a18ffd5b1190))\n* Added Zulu support to customParseFormat ([#1359](https://github.com/iamkun/dayjs/issues/1359)) ([1138a3f](https://github.com/iamkun/dayjs/commit/1138a3f0a76592c6d72fb86c4399e133fa41e2ec))\n* fix Bengali [bn] locale monthsShort error ([a0e6c0c](https://github.com/iamkun/dayjs/commit/a0e6c0cf3e1828020dfa11432c6716990f6ed5e0))\n* fix missing types for ArraySupport plugin ([#1401](https://github.com/iamkun/dayjs/issues/1401)) ([b1abdc4](https://github.com/iamkun/dayjs/commit/b1abdc40ee6c9d18ff46c311a114e0755677ea6f))\n* fix Ukrainian [uk] locale ([#1463](https://github.com/iamkun/dayjs/issues/1463)) ([0fdac93](https://github.com/iamkun/dayjs/commit/0fdac93ff2531542301b76952be9b084b2e2dfa0))\n* hotfix for `Duration` types ([#1357](https://github.com/iamkun/dayjs/issues/1357)) ([855b7b3](https://github.com/iamkun/dayjs/commit/855b7b3d049a3903794f91db3419f167c00dabd2)), closes [#1354](https://github.com/iamkun/dayjs/issues/1354)\n* timezone plugin DST error ([#1352](https://github.com/iamkun/dayjs/issues/1352)) ([71bed15](https://github.com/iamkun/dayjs/commit/71bed155edf32bff24379930ac684fc783538d8f))\n* Update duration plugin change string to number ([#1394](https://github.com/iamkun/dayjs/issues/1394)) ([e1546d1](https://github.com/iamkun/dayjs/commit/e1546d1a0cdb97ae92cf11efe61d94707af6a3a3))\n* update Duration plugin to support no-argument ([#1400](https://github.com/iamkun/dayjs/issues/1400)) ([8d9a5ae](https://github.com/iamkun/dayjs/commit/8d9a5ae0749e1b4e76babd4deeaa3b1d9776c29b))\n* Update Finnish [fi] locale to set yearStart  ([#1378](https://github.com/iamkun/dayjs/issues/1378)) ([f3370bd](https://github.com/iamkun/dayjs/commit/f3370bda4e435118f714c8a7daf5c88cfc4b69ba))\n* update Russian [ru] locale meridiem and unit tests ([#1403](https://github.com/iamkun/dayjs/issues/1403)) ([f10f39d](https://github.com/iamkun/dayjs/commit/f10f39de7db70244a3c35e4a421090a12972457b))\n* update Russian [ru] locale yearStart config  ([#1372](https://github.com/iamkun/dayjs/issues/1372)) ([5052515](https://github.com/iamkun/dayjs/commit/5052515fe35b2444201ef8ef87220b1876a94d0a))\n* update Slovenian [sl] locale to set correct ordinal  ([#1386](https://github.com/iamkun/dayjs/issues/1386)) ([cb4f746](https://github.com/iamkun/dayjs/commit/cb4f74633b3020d6dbf19548c8cb13613dafca18))\n* update Spanish [es] locale to change month names to lowercase ([#1414](https://github.com/iamkun/dayjs/issues/1414)) ([9c20e77](https://github.com/iamkun/dayjs/commit/9c20e77caf7b1b5eccf418175203b198d4e29535))\n* update Swedish [sv] locale to set correct yearStart ([#1385](https://github.com/iamkun/dayjs/issues/1385)) ([66c5935](https://github.com/iamkun/dayjs/commit/66c59354964ef456bcd5f6152819618f44978082))\n* update UTC plugin to support string argument like +HH:mm ([#1395](https://github.com/iamkun/dayjs/issues/1395)) ([656127c](https://github.com/iamkun/dayjs/commit/656127cc44eda50923a1ac755602863fc32b9e69))\n\n## [1.10.4](https://github.com/iamkun/dayjs/compare/v1.10.3...v1.10.4) (2021-01-22)\n\n\n### Bug Fixes\n\n* Correct handling negative duration ([#1317](https://github.com/iamkun/dayjs/issues/1317)) ([3f5c085](https://github.com/iamkun/dayjs/commit/3f5c085608182472f20b84766b10949945663e44))\n* Improve `Duration` types ([#1338](https://github.com/iamkun/dayjs/issues/1338)) ([4aca4b1](https://github.com/iamkun/dayjs/commit/4aca4b1b584a15de1146d929f95c944594032f20))\n* parse a string for MMM month format with underscore delimiter ([#1349](https://github.com/iamkun/dayjs/issues/1349)) ([82ef9a3](https://github.com/iamkun/dayjs/commit/82ef9a304f06287ac0a14c4da9a7fe6152b5fec9))\n* Update Bengali [bn] locale ([#1329](https://github.com/iamkun/dayjs/issues/1329)) ([02d96ec](https://github.com/iamkun/dayjs/commit/02d96ec7189f62d6ef8987135919cbb5ceff20a6))\n* update locale Portuguese [pt] yearStart ([#1345](https://github.com/iamkun/dayjs/issues/1345)) ([5c785d5](https://github.com/iamkun/dayjs/commit/5c785d528cc08811638d7cbfc7fc158d67b32d75))\n* update Polish [pl] locale yearStart ([#1348](https://github.com/iamkun/dayjs/issues/1348)) ([e93e6b8](https://github.com/iamkun/dayjs/commit/e93e6b8ffa61036b26382f1763e3864d4a7d5df5))\n* Update Slovenian [sl] relativeTime locale ([#1333](https://github.com/iamkun/dayjs/issues/1333)) ([fe5f1d0](https://github.com/iamkun/dayjs/commit/fe5f1d0afbe57b70339e268047e6c3028ca3d59b))\n\n## [1.10.3](https://github.com/iamkun/dayjs/compare/v1.10.2...v1.10.3) (2021-01-09)\n\n\n### Bug Fixes\n\n* fix customParseFormat plugin strict mode parse meridiem bug ([#1321](https://github.com/iamkun/dayjs/issues/1321)) ([e49eeef](https://github.com/iamkun/dayjs/commit/e49eeefbe8acb36419d36ca2e7ed8bc152f73ac1))\n* fix weekYear plugin missing locale bug ([#1319](https://github.com/iamkun/dayjs/issues/1319)) ([344bdc0](https://github.com/iamkun/dayjs/commit/344bdc0eed6843edb05723dc7853a41833d88f08)), closes [#1304](https://github.com/iamkun/dayjs/issues/1304)\n* update advancedFormat plugin to add format options for iso week and weekyear ([#1309](https://github.com/iamkun/dayjs/issues/1309)) ([2c54c64](https://github.com/iamkun/dayjs/commit/2c54c6441871a175ac9b95e41e4cd075dbac10cb))\n* update devHelper to add dev warning setting locale before loading ([c5cc893](https://github.com/iamkun/dayjs/commit/c5cc89355e1e206ca72433c19c40cb528690b04f))\n* update German [de] locale yearStart ([1858df8](https://github.com/iamkun/dayjs/commit/1858df8008de56570680723df89b36a8cbc970ef)), closes [#1264](https://github.com/iamkun/dayjs/issues/1264)\n\n## [1.10.2](https://github.com/iamkun/dayjs/compare/v1.10.1...v1.10.2) (2021-01-05)\n\n\n### Bug Fixes\n\n* fix parse regex bug ([#1307](https://github.com/iamkun/dayjs/issues/1307)) ([db2b6a5](https://github.com/iamkun/dayjs/commit/db2b6a5ea8e70f9fda645d113ca33495aa96b616)), closes [#1305](https://github.com/iamkun/dayjs/issues/1305)\n* remove module entry in package.json to revert 1.10.1 change ([#1314](https://github.com/iamkun/dayjs/issues/1314)) ([824dcb8](https://github.com/iamkun/dayjs/commit/824dcb8dfcccf14f64b6a2741a00fcdfe53dcd98))\n* update devHelper add warning \"passing Year as a Number will be parsed as a Unix timestamp\" ([#1315](https://github.com/iamkun/dayjs/issues/1315)) ([b0dda31](https://github.com/iamkun/dayjs/commit/b0dda3139e25441ab4e7c1f4f192dee0ecce6ef8))\n\n## [1.10.1](https://github.com/iamkun/dayjs/compare/v1.10.0...v1.10.1) (2021-01-03)\n\n\n### Bug Fixes\n\n* fix typescript type error UnitTypeLongPlural ([#1302](https://github.com/iamkun/dayjs/issues/1302)) ([bfaabe4](https://github.com/iamkun/dayjs/commit/bfaabe4f398c11564eca6cda7c8aded22e1b231a)), closes [#1300](https://github.com/iamkun/dayjs/issues/1300)\n\n# [1.10.0](https://github.com/iamkun/dayjs/compare/v1.9.8...v1.10.0) (2021-01-03)\n\n\n### Bug Fixes\n\n* add ordinal to localeData plugin ([#1266](https://github.com/iamkun/dayjs/issues/1266)) ([fd229fa](https://github.com/iamkun/dayjs/commit/fd229fa5bd26bcba810e2535eb937ea8d99106c2))\n* add preParsePostFormat plugin & update Arabic [ar] locale ([#1255](https://github.com/iamkun/dayjs/issues/1255)) ([f2e4790](https://github.com/iamkun/dayjs/commit/f2e479006a9a49bc0917f8620101d40ac645f7f2))\n* add type support for plural forms of units ([#1289](https://github.com/iamkun/dayjs/issues/1289)) ([de49bb1](https://github.com/iamkun/dayjs/commit/de49bb100badfb92b9a5933cc568841f340a923f))\n* escape last period to match only milliseconds ([#1239](https://github.com/iamkun/dayjs/issues/1239)) ([#1295](https://github.com/iamkun/dayjs/issues/1295)) ([64037e6](https://github.com/iamkun/dayjs/commit/64037e6a8cf303dcfd2b954f309bd9691f87fffc))\n\n\n### Features\n\n* add ES6 Module Support, package.json module point to \"esm/index.js\" ([#1298](https://github.com/iamkun/dayjs/issues/1298)) ([f63375d](https://github.com/iamkun/dayjs/commit/f63375dea89becbd3bb2bb8ea7289c58c752bfed)), closes [#598](https://github.com/iamkun/dayjs/issues/598) [#313](https://github.com/iamkun/dayjs/issues/313)\n\n## [1.9.8](https://github.com/iamkun/dayjs/compare/v1.9.7...v1.9.8) (2020-12-27)\n\n\n### Bug Fixes\n\n* fix Ukrainian [uk] locale typo ([1605cc0](https://github.com/iamkun/dayjs/commit/1605cc0f6fe0e9c46a92d529bc9cd6e130432337))\n* update Hebrew [he] locale for double units ([#1287](https://github.com/iamkun/dayjs/issues/1287)) ([1c4b0da](https://github.com/iamkun/dayjs/commit/1c4b0da1468522e59dc9ee646d10dd2b31477d99))\n* update zh locale meridiem \"noon\" ([0e7ff3d](https://github.com/iamkun/dayjs/commit/0e7ff3dd29ca3aed85cb76dfcb8298d326e26542))\n* update zh-cn locale definition of noon  ([#1278](https://github.com/iamkun/dayjs/issues/1278)) ([d5930b9](https://github.com/iamkun/dayjs/commit/d5930b96ff884f4176ca3fcb1bc95e8f1ec75c71))\n\n## [1.9.7](https://github.com/iamkun/dayjs/compare/v1.9.6...v1.9.7) (2020-12-05)\n\n\n### Bug Fixes\n\n* add duration.format to format a Duration ([#1202](https://github.com/iamkun/dayjs/issues/1202)) ([9a859a1](https://github.com/iamkun/dayjs/commit/9a859a147ba223a1eeff0f2bb6f33d97e0ccc6c7))\n* Add function handling for relativeTime.future and relativeTime.past ([#1197](https://github.com/iamkun/dayjs/issues/1197)) ([ef1979c](https://github.com/iamkun/dayjs/commit/ef1979ce85c61fe2d759ef3c37cb6aaf2358094f))\n* avoid install installed plugin ([#1214](https://github.com/iamkun/dayjs/issues/1214)) ([a92eb6c](https://github.com/iamkun/dayjs/commit/a92eb6c4dc1437ec920e69484d52984f5921a8ea))\n* avoid memory leak after installing a plugin too many times ([b8d2e32](https://github.com/iamkun/dayjs/commit/b8d2e32a9eb59661a7ed6200daa070687becaebd))\n* fix diff bug when UTC plugin enabled ([#1201](https://github.com/iamkun/dayjs/issues/1201)) ([9544ed2](https://github.com/iamkun/dayjs/commit/9544ed2a6c466b8308d26b33a388a6737435a1f4)), closes [#1200](https://github.com/iamkun/dayjs/issues/1200)\n* fix startOf/endOf bug in timezone plugin ([#1229](https://github.com/iamkun/dayjs/issues/1229)) ([eb5fbc4](https://github.com/iamkun/dayjs/commit/eb5fbc4c7d1b62a8615d2f263b404a9515d8e15c))\n* fix utc plugin diff edge case ([#1187](https://github.com/iamkun/dayjs/issues/1187)) ([971b3d4](https://github.com/iamkun/dayjs/commit/971b3d40b4c9403165138f1034e2223cd97c3abf))\n* update customParseFormat plugin to parse 2-digit offset ([#1209](https://github.com/iamkun/dayjs/issues/1209)) ([b56936a](https://github.com/iamkun/dayjs/commit/b56936ab77b8f6289a1b77d49307b495c4bf9f91)), closes [#1205](https://github.com/iamkun/dayjs/issues/1205)\n* Update timezone plugin type definition ([#1221](https://github.com/iamkun/dayjs/issues/1221)) ([34cfb92](https://github.com/iamkun/dayjs/commit/34cfb920b9653ad44d4b31fe49e533692a3ce01b))\n\n## [1.9.6](https://github.com/iamkun/dayjs/compare/v1.9.5...v1.9.6) (2020-11-10)\n\n\n### Bug Fixes\n\n* fix customParseFormat plugin parsing date bug ([#1198](https://github.com/iamkun/dayjs/issues/1198)) ([50f05ad](https://github.com/iamkun/dayjs/commit/50f05ad3addf27827c5657ae7519514e40d9faec)), closes [#1194](https://github.com/iamkun/dayjs/issues/1194)\n* Update lv (Latvian) locale relative time ([#1192](https://github.com/iamkun/dayjs/issues/1192)) ([6d6c684](https://github.com/iamkun/dayjs/commit/6d6c6841b13ba4f7e69de92caf132a3592c5253a))\n\n## [1.9.5](https://github.com/iamkun/dayjs/compare/v1.9.4...v1.9.5) (2020-11-05)\n\n\n### Bug Fixes\n\n* customParseFormat plugin supports parsing localizedFormats  ([#1110](https://github.com/iamkun/dayjs/issues/1110)) ([402b603](https://github.com/iamkun/dayjs/commit/402b603aa3ee4199786950bc88b3fdc6b527aa35))\n* fix customParseFormat plugin parse meridiem bug ([#1169](https://github.com/iamkun/dayjs/issues/1169)) ([9e8f8d9](https://github.com/iamkun/dayjs/commit/9e8f8d96c69d557f4d267f42567c25ae9e7ab227)), closes [#1168](https://github.com/iamkun/dayjs/issues/1168)\n* fix devHelper error in umd bundle in browser ([#1165](https://github.com/iamkun/dayjs/issues/1165)) ([d11b5ee](https://github.com/iamkun/dayjs/commit/d11b5ee7dc11af671355f65ccda00f6ba42cc725))\n* fix utc plugin diff bug in DST ([#1171](https://github.com/iamkun/dayjs/issues/1171)) ([f8da3fe](https://github.com/iamkun/dayjs/commit/f8da3fe7e50c84c0502bf5be0b364910922dbd79)), closes [#1097](https://github.com/iamkun/dayjs/issues/1097) [#1021](https://github.com/iamkun/dayjs/issues/1021)\n* isoWeek plugin type ([#1177](https://github.com/iamkun/dayjs/issues/1177)) ([c3d0436](https://github.com/iamkun/dayjs/commit/c3d0436b06f74989e3a2c751a5d170f8072c4aad))\n* update localeData plugin to support meridiem ([#1174](https://github.com/iamkun/dayjs/issues/1174)) ([fdb09e4](https://github.com/iamkun/dayjs/commit/fdb09e4074cc7e8f6196846f18d3566c1f9e8fcd)), closes [#1172](https://github.com/iamkun/dayjs/issues/1172)\n* update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](https://github.com/iamkun/dayjs/issues/1183)) ([a7f858b](https://github.com/iamkun/dayjs/commit/a7f858bb70ad81f718ba35c479e84b54eace48b2))\n\n## [1.9.4](https://github.com/iamkun/dayjs/compare/v1.9.3...v1.9.4) (2020-10-23)\n\n\n### Bug Fixes\n\n* Add descriptions to types ([#1148](https://github.com/iamkun/dayjs/issues/1148)) ([9a407a1](https://github.com/iamkun/dayjs/commit/9a407a140b089345a387d1aceab4d0d1635229c7))\n* add devHelper plugin ([#1163](https://github.com/iamkun/dayjs/issues/1163)) ([de49dc8](https://github.com/iamkun/dayjs/commit/de49dc80c83b85de4170571b64412bd60ada221b))\n* Fix Hungarian (hu) locale ([#1112](https://github.com/iamkun/dayjs/issues/1112)) ([ab13754](https://github.com/iamkun/dayjs/commit/ab13754f43c5033dacaa0eb2042dc4ab1a7a2754))\n* fix minMax plugin parsing empty array bug ([#1062](https://github.com/iamkun/dayjs/issues/1062)) ([368108b](https://github.com/iamkun/dayjs/commit/368108bc6d5cb1542f711b8eba722bd4dfaab0cd))\n* update adding/subtracting Duration from Dayjs object ([#1156](https://github.com/iamkun/dayjs/issues/1156)) ([f861aca](https://github.com/iamkun/dayjs/commit/f861acac3e83e28d3a4a96312c71119fd6b544fc))\n* update en-NZ locale to use proper ordinal formatting function ([#1143](https://github.com/iamkun/dayjs/issues/1143)) ([fcdbc58](https://github.com/iamkun/dayjs/commit/fcdbc5880710456a29b2bacf250542230bf48b99))\n* update localeData plugin type ([#1116](https://github.com/iamkun/dayjs/issues/1116)) ([ee5a4ec](https://github.com/iamkun/dayjs/commit/ee5a4ec41edddfb57d103c35182dc635c9264a10))\n* update timezone plugin to support custom parse format ([#1160](https://github.com/iamkun/dayjs/issues/1160)) ([48cbf31](https://github.com/iamkun/dayjs/commit/48cbf3118ba5427de428777c2e025896db654f2e)), closes [#1159](https://github.com/iamkun/dayjs/issues/1159)\n* update timezone plugin to support keepLocalTime ([#1161](https://github.com/iamkun/dayjs/issues/1161)) ([1d429e5](https://github.com/iamkun/dayjs/commit/1d429e5fe4467ebddcf81b43cf6f36e5e3be944c)), closes [#1149](https://github.com/iamkun/dayjs/issues/1149)\n\n## [1.9.3](https://github.com/iamkun/dayjs/compare/v1.9.2...v1.9.3) (2020-10-13)\n\n\n### Bug Fixes\n\n* fix localizedFormat export error ([#1133](https://github.com/iamkun/dayjs/issues/1133)) ([deecd6a](https://github.com/iamkun/dayjs/commit/deecd6ab8a2f4173ee7046f6b568b41fd2677531)), closes [#1132](https://github.com/iamkun/dayjs/issues/1132)\n\n## [1.9.2](https://github.com/iamkun/dayjs/compare/v1.9.1...v1.9.2) (2020-10-13)\n\n\n### Bug Fixes\n\n* add arraySupport plugin ([#1129](https://github.com/iamkun/dayjs/issues/1129)) ([be505c2](https://github.com/iamkun/dayjs/commit/be505c2c540261027342cecc55d8919a3d18d893))\n* export type of duration plugin ([#1094](https://github.com/iamkun/dayjs/issues/1094)) ([2c92e71](https://github.com/iamkun/dayjs/commit/2c92e71bf55d09601120cdf433da7a19cc8abff6))\n* Fix LocaleData plugin longDateFormat lowercase error ([#1101](https://github.com/iamkun/dayjs/issues/1101)) ([7937ccd](https://github.com/iamkun/dayjs/commit/7937ccdeac47d094a60e65ebb62a6020b81c46f4))\n* Fix objectSupport plugin bug in UTC ([#1107](https://github.com/iamkun/dayjs/issues/1107)) ([fe90bb6](https://github.com/iamkun/dayjs/commit/fe90bb6944f2ff1969ca975954d303b449dfa95b)), closes [#1105](https://github.com/iamkun/dayjs/issues/1105)\n* fix Serbian locale grammar (sr, sr-cyrl) ([#1108](https://github.com/iamkun/dayjs/issues/1108)) ([cc87eff](https://github.com/iamkun/dayjs/commit/cc87eff8b75b0d86ce0956516319d402bccae6c0))\n* Fix typo for \"monday\" in arabic ([#1067](https://github.com/iamkun/dayjs/issues/1067)) ([2e1e426](https://github.com/iamkun/dayjs/commit/2e1e42650124f30282dc4d710798d576b928f1c7))\n* support dayjs.add(Duration), dayjs.subtract(Duration) ([#1099](https://github.com/iamkun/dayjs/issues/1099)) ([b1a0294](https://github.com/iamkun/dayjs/commit/b1a02942c5238203aaa04ce9a074c73742324ab7))\n* update Breton [br] locale relativeTime config ([#1103](https://github.com/iamkun/dayjs/issues/1103)) ([b038bfd](https://github.com/iamkun/dayjs/commit/b038bfdb128889d677c95534d2be29cc30c9e72f))\n* update Catalan [ca] locale ordinal ([73da380](https://github.com/iamkun/dayjs/commit/73da38024c8b550bdcfbe3ff7e578e742c7aecf2))\n* update German [de] locale relativeTime config ([#1109](https://github.com/iamkun/dayjs/issues/1109)) ([f6e771b](https://github.com/iamkun/dayjs/commit/f6e771b70f93d19ebb12e6b794aa4628a1796248))\n* update localeData plugin to add longDateFormat to global localeData ([#1106](https://github.com/iamkun/dayjs/issues/1106)) ([16937d1](https://github.com/iamkun/dayjs/commit/16937d16e053b8c1d4a607622fa2fdbfd9809832))\n* Update objectSupport plugin to return current date time while parsing empty object ([f56783e](https://github.com/iamkun/dayjs/commit/f56783e14d8cf50916b015e7188b23bb6fbca839))\n\n## [1.9.1](https://github.com/iamkun/dayjs/compare/v1.9.0...v1.9.1) (2020-09-28)\n\n\n### Bug Fixes\n\n* Fix objectSupport plugin to get the correct result (zero-based month) ([#1089](https://github.com/iamkun/dayjs/issues/1089)) ([f95ac15](https://github.com/iamkun/dayjs/commit/f95ac15a4577ae5a3d1ce353872a2cd9fc454bc2))\n\n# [1.9.0](https://github.com/iamkun/dayjs/compare/v1.8.36...v1.9.0) (2020-09-28)\n\n\n### Bug Fixes\n\n* Add `setDefault` typing to timezone.d.ts ([#1057](https://github.com/iamkun/dayjs/issues/1057)) ([c0f0886](https://github.com/iamkun/dayjs/commit/c0f088620f17260e6e3ebce7697d561b5623f5f3))\n* fix DST bug in utc plugin ([#1053](https://github.com/iamkun/dayjs/issues/1053)) ([3d73543](https://github.com/iamkun/dayjs/commit/3d7354361f042ced1176d91f9ae9edffe6173425))\n* Fix optional type for timezone plugin ([#1081](https://github.com/iamkun/dayjs/issues/1081)) ([a6ebcf2](https://github.com/iamkun/dayjs/commit/a6ebcf283a83273562dce5663155e3b3a12ea9a5)), closes [#1079](https://github.com/iamkun/dayjs/issues/1079)\n* Fix timezone plugin conversion bug ([#1073](https://github.com/iamkun/dayjs/issues/1073)) ([16816a3](https://github.com/iamkun/dayjs/commit/16816a31ff43220aca9d1d179df6b729182abb55))\n* update duration plugin type file ([#1065](https://github.com/iamkun/dayjs/issues/1065)) ([94af9af](https://github.com/iamkun/dayjs/commit/94af9af27c5bc182cbb24f1845e561dd1d82d776))\n* update timezone plugin to support getting offset name e.g. EST ([#1069](https://github.com/iamkun/dayjs/issues/1069)) ([cbb755e](https://github.com/iamkun/dayjs/commit/cbb755e5c68d49c5678291f3ce832b32831a056e))\n* update utc plugin to support keepLocalTime `.utc(true)` ([#1080](https://github.com/iamkun/dayjs/issues/1080)) ([5ce4e0d](https://github.com/iamkun/dayjs/commit/5ce4e0d2f552f3645262537ff7afdc946f5a7e72))\n\n\n### Features\n\n* Correct casing for en-sg locale name ([#1048](https://github.com/iamkun/dayjs/issues/1048)) ([2edaddc](https://github.com/iamkun/dayjs/commit/2edaddc22a7eb914f915531f389766217acd7034))\n\n## [1.8.36](https://github.com/iamkun/dayjs/compare/v1.8.35...v1.8.36) (2020-09-17)\n\n\n### Bug Fixes\n\n* Add Amharic (am) locale ([#1046](https://github.com/iamkun/dayjs/issues/1046)) ([cdc49a1](https://github.com/iamkun/dayjs/commit/cdc49a1911c74b7ea96ed222f42796d53715cfed))\n* Export Duration type in duration plugin ([#1043](https://github.com/iamkun/dayjs/issues/1043)) ([0f20c3a](https://github.com/iamkun/dayjs/commit/0f20c3ac75d9ac1026a15a7bb343d3a150d9b30f))\n* Fix duration plugin parsing milliseconds bug ([#1042](https://github.com/iamkun/dayjs/issues/1042)) ([fe2301b](https://github.com/iamkun/dayjs/commit/fe2301b22318886aaa89ed1620e0a118e98c2b8a))\n* Timezone plugin set default timezone ([#1033](https://github.com/iamkun/dayjs/issues/1033)) ([0c2050a](https://github.com/iamkun/dayjs/commit/0c2050a152da708b01edd6150a5013f642b14576))\n* Timezone plugin should have the same behavior in latest ICU version ([#1032](https://github.com/iamkun/dayjs/issues/1032)) ([de31592](https://github.com/iamkun/dayjs/commit/de315921575cc50c38464b27d0338e30a54d8e2a))\n* Update Finnish (fi) locale ([#963](https://github.com/iamkun/dayjs/issues/963)) ([cf8b6a0](https://github.com/iamkun/dayjs/commit/cf8b6a096f24b54cbdb95675ac386d8ac85ea616))\n* Update Polish (pl) , Hungarian (hr) and Lithuanian (lt) localization ([#1045](https://github.com/iamkun/dayjs/issues/1045)) ([638fd39](https://github.com/iamkun/dayjs/commit/638fd394fc24f4188390faf387da6b156e7c6320))\n\n## [1.8.35](https://github.com/iamkun/dayjs/compare/v1.8.34...v1.8.35) (2020-09-02)\n\n\n### Bug Fixes\n\n* Fix BadMutable plugin bug in .diff ([#1023](https://github.com/iamkun/dayjs/issues/1023)) ([40ab6d9](https://github.com/iamkun/dayjs/commit/40ab6d9a53e8047cfca63c611c25dd045372d021))\n* fix LocaleData plugin to support instance.weekdays() API ([#1019](https://github.com/iamkun/dayjs/issues/1019)) ([a09d259](https://github.com/iamkun/dayjs/commit/a09d259a407b81d1cb6bb5623fad551c775d8674)), closes [#1017](https://github.com/iamkun/dayjs/issues/1017)\n* Update Dutch (nl) locale to set correct yearStart ([1533a2c](https://github.com/iamkun/dayjs/commit/1533a2cc1475270032da2d87b19fc3d62327e6e3))\n\n## [1.8.34](https://github.com/iamkun/dayjs/compare/v1.8.33...v1.8.34) (2020-08-20)\n\n\n### Bug Fixes\n\n* Fix Timezone plugin to preserve milliseconds while changing timezone ([#1003](https://github.com/iamkun/dayjs/issues/1003)) ([5f446ed](https://github.com/iamkun/dayjs/commit/5f446eda770fa97e895c81a8195b3ba5d082cef0)), closes [#1002](https://github.com/iamkun/dayjs/issues/1002)\n* support parsing unlimited decimals of millisecond ([#1010](https://github.com/iamkun/dayjs/issues/1010)) ([d1bdd36](https://github.com/iamkun/dayjs/commit/d1bdd36a56e3d1786523a180e3fc18068f609135)), closes [#544](https://github.com/iamkun/dayjs/issues/544)\n* update Duration plugin to support global locale ([#1008](https://github.com/iamkun/dayjs/issues/1008)) ([1c49c83](https://github.com/iamkun/dayjs/commit/1c49c83e79811eede13db6372b5d65db598aee77)), closes [#1007](https://github.com/iamkun/dayjs/issues/1007)\n\n## [1.8.33](https://github.com/iamkun/dayjs/compare/v1.8.32...v1.8.33) (2020-08-10)\n\n\n### Bug Fixes\n\n* Add PluralGetSet plugin for plural getters/setters ([#996](https://github.com/iamkun/dayjs/issues/996)) ([f76e3ce](https://github.com/iamkun/dayjs/commit/f76e3ce2fbe5d3e9ed9121086baf55eb0cc4d355))\n* Add typescript type defs in esm build ([#985](https://github.com/iamkun/dayjs/issues/985)) ([50e3b3c](https://github.com/iamkun/dayjs/commit/50e3b3c6719cb0b4ec6eff394dacd63d5db8f253))\n* Fix isoWeek Plugin cal bug in UTC mode ([#993](https://github.com/iamkun/dayjs/issues/993)) ([f2e5f32](https://github.com/iamkun/dayjs/commit/f2e5f327aaf12b4572296ec6e107ecc05fcf76e7))\n* Fix Timezone plugin parsing js date, Day.js object, timestamp bug && update type file ([#994](https://github.com/iamkun/dayjs/issues/994)) ([22f3d49](https://github.com/iamkun/dayjs/commit/22f3d49405da98db6da56d1673eebcd01b57554b)), closes [#992](https://github.com/iamkun/dayjs/issues/992) [#989](https://github.com/iamkun/dayjs/issues/989)\n* Fix Timezone plugin UTCOffset rounding bug ([#987](https://github.com/iamkun/dayjs/issues/987)) ([b07182b](https://github.com/iamkun/dayjs/commit/b07182bbdf5aef7f6bf1e88fcd38432e2b8ee465)), closes [#986](https://github.com/iamkun/dayjs/issues/986)\n* Fix UTC plugin bug while comparing an utc instance to a local one ([#995](https://github.com/iamkun/dayjs/issues/995)) ([747c0fb](https://github.com/iamkun/dayjs/commit/747c0fb4eba6353755b5dad3417fd8d5a408c378))\n* Update pt-br locale weekStart 0 ([#984](https://github.com/iamkun/dayjs/issues/984)) ([0f881c1](https://github.com/iamkun/dayjs/commit/0f881c18efb02b9d0ba7f76cba92bb504226fa95))\n\n## [1.8.32](https://github.com/iamkun/dayjs/compare/v1.8.31...v1.8.32) (2020-08-04)\n\n\n### Bug Fixes\n\n* Add Experimental Timezone Plugin ([#974](https://github.com/iamkun/dayjs/issues/974)) ([e69caba](https://github.com/iamkun/dayjs/commit/e69caba1b0957241a855aa0ae38db899fa2c3795))\n* fix parse date string error e.g. '2020/9/30' ([#980](https://github.com/iamkun/dayjs/issues/980)) ([231790d](https://github.com/iamkun/dayjs/commit/231790da62af0494732960c2c50d86ae9bf63ec6)), closes [#979](https://github.com/iamkun/dayjs/issues/979)\n* update monthDiff function to get more accurate results ([19e8a7f](https://github.com/iamkun/dayjs/commit/19e8a7f2f7582b717f49d446822e39603694433c))\n* Update UTC plugin to support keepLocalTime ([#973](https://github.com/iamkun/dayjs/issues/973)) ([9f488e5](https://github.com/iamkun/dayjs/commit/9f488e5aca92f0b4c2951459436829d79f86d8d7))\n\n## [1.8.31](https://github.com/iamkun/dayjs/compare/v1.8.30...v1.8.31) (2020-07-29)\n\n\n### Bug Fixes\n\n* Rollback LocalePresetType to string ([#968](https://github.com/iamkun/dayjs/issues/968)) ([b342bd3](https://github.com/iamkun/dayjs/commit/b342bd3d84987d6c7587a0c4590d614fb0e670d7))\n* Update Regex to parse 'YYYY' correctly ([#969](https://github.com/iamkun/dayjs/issues/969)) ([70c1239](https://github.com/iamkun/dayjs/commit/70c123990dcc6bd479fa2b5d7f9985127872a826))\n\n## [1.8.30](https://github.com/iamkun/dayjs/compare/v1.8.29...v1.8.30) (2020-07-22)\n\n\n### Bug Fixes\n\n* Add Haitian Creole (ht) and Spanish Puerto Rico (es-pr) locale configs ([#958](https://github.com/iamkun/dayjs/issues/958)) ([b2642e2](https://github.com/iamkun/dayjs/commit/b2642e2d1f87734a34808c66e5176cb18bc0414d))\n* Fix UTC plugin wrong hour bug while adding month or year  ([#957](https://github.com/iamkun/dayjs/issues/957)) ([28ae070](https://github.com/iamkun/dayjs/commit/28ae070024ff26685c88ce4cc8747307e86923c9))\n* Update French (fr) locale to set correct yearStart ([14ab808](https://github.com/iamkun/dayjs/commit/14ab808a7b7e226f2eb2cbe894916a18ed5d967d)), closes [#956](https://github.com/iamkun/dayjs/issues/956)\n\n## [1.8.29](https://github.com/iamkun/dayjs/compare/v1.8.28...v1.8.29) (2020-07-02)\n\n\n### Bug Fixes\n\n* Duration plugin supports parse ISO string with week (W) ([#950](https://github.com/iamkun/dayjs/issues/950)) ([f0fc12a](https://github.com/iamkun/dayjs/commit/f0fc12adadcab53fb0577ad8f5e2f1cf784fd8f5))\n* LocaleData plugin supports locale order ([#938](https://github.com/iamkun/dayjs/issues/938)) ([62f429d](https://github.com/iamkun/dayjs/commit/62f429db73a0a069b1267231dea172b85f4b90e3)), closes [#936](https://github.com/iamkun/dayjs/issues/936)\n* Update type definition to support array format ([#945](https://github.com/iamkun/dayjs/issues/945)) ([81d4740](https://github.com/iamkun/dayjs/commit/81d4740511d47e34f891b21afeb0449ef8a28688)), closes [#944](https://github.com/iamkun/dayjs/issues/944)\n* Update type definition to support strict mode ([#951](https://github.com/iamkun/dayjs/issues/951)) ([8d54f3f](https://github.com/iamkun/dayjs/commit/8d54f3f7d4d161e72c767fa09699e70a2b3d681c))\n\n## [1.8.28](https://github.com/iamkun/dayjs/compare/v1.8.27...v1.8.28) (2020-05-28)\n\n\n### Bug Fixes\n\n* Fix CustomParseFormat plugin month index error ([#918](https://github.com/iamkun/dayjs/issues/918)) ([fa2ec7f](https://github.com/iamkun/dayjs/commit/fa2ec7fcb980dcd2c7498dafe2f9ca2e52d735cf)), closes [#915](https://github.com/iamkun/dayjs/issues/915)\n* Update Ukrainian (uk) locale monthFormat and monthStandalone ([#899](https://github.com/iamkun/dayjs/issues/899)) ([a08756e](https://github.com/iamkun/dayjs/commit/a08756e80bd1d7126fca28c5ad9e382613fc86c4))\n\n## [1.8.27](https://github.com/iamkun/dayjs/compare/v1.8.26...v1.8.27) (2020-05-14)\n\n\n### Bug Fixes\n\n* Add Kinyarwanda (rw) locale ([#903](https://github.com/iamkun/dayjs/issues/903)) ([f355235](https://github.com/iamkun/dayjs/commit/f355235a836540d77880959fb1b614c87e9f7b3e))\n* Add plugin objectSupport ([#887](https://github.com/iamkun/dayjs/issues/887)) ([52dfb13](https://github.com/iamkun/dayjs/commit/52dfb13a6b84f0a753cc5761192b92416f440961))\n* Add Turkmen (tk) locale ([#893](https://github.com/iamkun/dayjs/issues/893)) ([a9ca8dc](https://github.com/iamkun/dayjs/commit/a9ca8dcbbd0964c5b9abb4e8a2d620c983cf091a))\n* Fix CustomParseFormat plugin set locale error ([#896](https://github.com/iamkun/dayjs/issues/896)) ([8035c8a](https://github.com/iamkun/dayjs/commit/8035c8a760549b631252252718db3cdc4ab2f68f))\n* Fix locale month function bug ([#908](https://github.com/iamkun/dayjs/issues/908)) ([bf347c3](https://github.com/iamkun/dayjs/commit/bf347c36e401f50727fb5afcc537497b54b90d6b))\n* Update CustomParseFormat plugin to support Array formats ([#906](https://github.com/iamkun/dayjs/issues/906)) ([97856c6](https://github.com/iamkun/dayjs/commit/97856c603ef5fbbeb1cf8a42387479e56a77dbe8))\n\n## [1.8.26](https://github.com/iamkun/dayjs/compare/v1.8.25...v1.8.26) (2020-04-30)\n\n\n### Bug Fixes\n\n* Fix Duration plugin `.toISOString` format bug ([#889](https://github.com/iamkun/dayjs/issues/889)) ([058d624](https://github.com/iamkun/dayjs/commit/058d624808fd2be024ae846bcb2e03885f39b556)), closes [#888](https://github.com/iamkun/dayjs/issues/888)\n* Fix WeekOfYear plugin bug while using BadMutable plugin ([#884](https://github.com/iamkun/dayjs/issues/884)) ([2977438](https://github.com/iamkun/dayjs/commit/2977438458542573a4500e21f7ba5d1f8442960e))\n* Update CustomParseFormat plugin strict mode ([#882](https://github.com/iamkun/dayjs/issues/882)) ([db642ac](https://github.com/iamkun/dayjs/commit/db642ac73e52e00d8c41546b2935c9e691cf66e0))\n* Update RelativeTime plugin default config ([#883](https://github.com/iamkun/dayjs/issues/883)) ([0606f42](https://github.com/iamkun/dayjs/commit/0606f425aef8ccbfc3da3e43cba368130603b0cc))\n\n## [1.8.25](https://github.com/iamkun/dayjs/compare/v1.8.24...v1.8.25) (2020-04-21)\n\n\n### Bug Fixes\n\n* Fix CustomParseFormat plugin of parsing only YYYY / YYYY-MM bug ([#873](https://github.com/iamkun/dayjs/issues/873)) ([3cea04d](https://github.com/iamkun/dayjs/commit/3cea04d33d54d44bbdd3d026b5c7f67ebf176116)), closes [#849](https://github.com/iamkun/dayjs/issues/849)\n* Fix Duration plugin get seconds ([#867](https://github.com/iamkun/dayjs/issues/867)) ([62b092d](https://github.com/iamkun/dayjs/commit/62b092d9f9a3db5506ef01f798bdf211f163f53f))\n* Fix type definition of locale ([9790b85](https://github.com/iamkun/dayjs/commit/9790b853e6113243a7f4a81dd12c6509e406a102))\n* Fix UTC plugin startOf, endOf bug ([#872](https://github.com/iamkun/dayjs/issues/872)) ([4141084](https://github.com/iamkun/dayjs/commit/4141084ba96d35cadcda3f1e661bf1d0f6c8e4de)), closes [#809](https://github.com/iamkun/dayjs/issues/809) [#808](https://github.com/iamkun/dayjs/issues/808)\n\n## [1.8.24](https://github.com/iamkun/dayjs/compare/v1.8.23...v1.8.24) (2020-04-10)\n\n\n### Bug Fixes\n\n* Add config option to RelativeTime plugin ([#851](https://github.com/iamkun/dayjs/issues/851)) ([bd24034](https://github.com/iamkun/dayjs/commit/bd24034b95bfc656024b75ef3f3c986708845fed))\n* add Duration plugin ([#858](https://github.com/iamkun/dayjs/issues/858)) ([d568273](https://github.com/iamkun/dayjs/commit/d568273223199ca0497f238e2cc3a8d3dcf32d0f))\n* Add en-in, en-tt locales ([#855](https://github.com/iamkun/dayjs/issues/855)) ([c39fb96](https://github.com/iamkun/dayjs/commit/c39fb96e2a9102c14b004c14a6c073af9d266f2f))\n* add isToday, isTomorrow, isYesterday plugins ([#857](https://github.com/iamkun/dayjs/issues/857)) ([fc08ab6](https://github.com/iamkun/dayjs/commit/fc08ab68f8a28269802deeab9d6b0473b92cdc51))\n* Add option callback to Calendar plugin ([#839](https://github.com/iamkun/dayjs/issues/839)) ([b25be90](https://github.com/iamkun/dayjs/commit/b25be9094325295310c8fc5e617fb058be8a5f68))\n* Fix monthsShort for locale fr ([#862](https://github.com/iamkun/dayjs/issues/862)) ([d2de9a0](https://github.com/iamkun/dayjs/commit/d2de9a0b44b830038ed0094f79bfd40726311f2a))\n* Update Breton locale (br) meridiem config ([#856](https://github.com/iamkun/dayjs/issues/856)) ([a2a6672](https://github.com/iamkun/dayjs/commit/a2a66720abb788a8f1cffbfd0929b35579f29c72))\n* Update Ukrainian (uk) locale relative time ([#842](https://github.com/iamkun/dayjs/issues/842)) ([578bc1a](https://github.com/iamkun/dayjs/commit/578bc1a23c6e737783bbac3da12c0ed5d1edcf82))\n\n## [1.8.23](https://github.com/iamkun/dayjs/compare/v1.8.22...v1.8.23) (2020-03-16)\n\n\n### Bug Fixes\n\n* Add Chinese (zh) locale ([f9b8945](https://github.com/iamkun/dayjs/commit/f9b89453166d8b53d33b1d7eefd9942022552e6e))\n* Fix IsoWeek plugin typescript definition ([#828](https://github.com/iamkun/dayjs/issues/828)) ([30aab0c](https://github.com/iamkun/dayjs/commit/30aab0c7bce85dfac0ae208a891def30f88b5cb4))\n* Update Arabic (ar) locale relative time ([#836](https://github.com/iamkun/dayjs/issues/836)) ([14044c6](https://github.com/iamkun/dayjs/commit/14044c6fda1229e3f0e5473d3f886bd79589b15f))\n* Update Slovak (sk) locale,  Czech (cs) locale ([#833](https://github.com/iamkun/dayjs/issues/833)) ([f0d451f](https://github.com/iamkun/dayjs/commit/f0d451f795e9ebf752cd854d51b25b11de2343a3))\n* Update Thai (th) locale relativeTime ([#826](https://github.com/iamkun/dayjs/issues/826)) ([63b7c03](https://github.com/iamkun/dayjs/commit/63b7c03a6dbb0507d60776e8bad6cccde3828b88)), closes [#816](https://github.com/iamkun/dayjs/issues/816)\n\n## [1.8.22](https://github.com/iamkun/dayjs/compare/v1.8.21...v1.8.22) (2020-03-08)\n\n\n### Bug Fixes\n\n* Add IsoWeek plugin ([#811](https://github.com/iamkun/dayjs/issues/811)) ([28a2207](https://github.com/iamkun/dayjs/commit/28a2207ef9849afbac15dd29267b2e7a09cd3c16))\n* Fix unsupported locale fallback to previous one ([#819](https://github.com/iamkun/dayjs/issues/819)) ([4868715](https://github.com/iamkun/dayjs/commit/48687152cf5bee6a4c1b8ceea4bda8b9bab9be10))\n\n## [1.8.21](https://github.com/iamkun/dayjs/compare/v1.8.20...v1.8.21) (2020-02-26)\n\n\n### Bug Fixes\n\n* Set + Get accept 'D' as the short version of 'date' ([#795](https://github.com/iamkun/dayjs/issues/795)) ([523c038](https://github.com/iamkun/dayjs/commit/523c03880fa8bbad83214494ad02cd606cdb8b30))\n* Update DayOfYear plugin type ([#799](https://github.com/iamkun/dayjs/issues/799)) ([5809652](https://github.com/iamkun/dayjs/commit/5809652e40245b7759827d9bf317abdcfa75a330))\n* Update fi (Finnish) locale relativeTime ([#797](https://github.com/iamkun/dayjs/issues/797)) ([4a470fb](https://github.com/iamkun/dayjs/commit/4a470fbd6fef9e051727d0f26d53cc050b85935d))\n\n## [1.8.20](https://github.com/iamkun/dayjs/compare/v1.8.19...v1.8.20) (2020-02-04)\n\n\n### Bug Fixes\n\n* Add Bislama Locale (bi) ([#780](https://github.com/iamkun/dayjs/issues/780)) ([9ac6ab4](https://github.com/iamkun/dayjs/commit/9ac6ab481bc883dd4ecc02caab12c8b2fc218a42))\n* Fix weekOfYear plugin to support yearStart locale for better week number result ([#769](https://github.com/iamkun/dayjs/issues/769)) ([f00db36](https://github.com/iamkun/dayjs/commit/f00db36e70bc7beaca1abadeb30a9b1fbb3261ee))\n* Update et (Estonian) locale relativeTime ([#790](https://github.com/iamkun/dayjs/issues/790)) ([d8e0f45](https://github.com/iamkun/dayjs/commit/d8e0f45f6cd2d5e5704b9797929227454c92d1a5))\n* Update LocaleData plugin to support dayjs.localeData().weekdays() API ([287fed6](https://github.com/iamkun/dayjs/commit/287fed6db9eb4fd979b4861aca4dacbd32422533)), closes [#779](https://github.com/iamkun/dayjs/issues/779)\n* Update LocaleData plugin to support dayjs.months dayjs.weekdays API ([144c2ae](https://github.com/iamkun/dayjs/commit/144c2ae6e15fbf89e3acd7c8cb9e237c5f6e1348)), closes [#779](https://github.com/iamkun/dayjs/issues/779)\n* Update pl locale fusional config ([d372475](https://github.com/iamkun/dayjs/commit/d3724758bb27d5b17587b995ba14e7e80dcd1151))\n\n## [1.8.19](https://github.com/iamkun/dayjs/compare/v1.8.18...v1.8.19) (2020-01-06)\n\n\n### Bug Fixes\n\n* Add UpdateLocale plugin to update a locale's properties ([#766](https://github.com/iamkun/dayjs/issues/766)) ([82ce2ba](https://github.com/iamkun/dayjs/commit/82ce2ba8d7e402e40f6d005d400eb5356a0b0633))\n* Fix CustomParseFormat Plugin 'YYYY-MM' use first day of the month ([ba709ec](https://github.com/iamkun/dayjs/commit/ba709eca86a71ae648bc68bf67d9abdc229198d4)), closes [#761](https://github.com/iamkun/dayjs/issues/761)\n* Fix CustomParseFormat Plugin to set correct locale ([66ce23f](https://github.com/iamkun/dayjs/commit/66ce23f2e18c5506e8f1a7ef20d3483a4df80087))\n* Fix WeekOfYear Plugin wrong calender week number bug ([79b86db](https://github.com/iamkun/dayjs/commit/79b86dbbf3cfd3f1e2165b3d479a7061ad1b6925)), closes [#760](https://github.com/iamkun/dayjs/issues/760)\n* Update RelativeTime plugin to support function to make additional processing ([#767](https://github.com/iamkun/dayjs/issues/767)) ([4bd9250](https://github.com/iamkun/dayjs/commit/4bd9250fbe7131e2fddfb5fa1b3350e8c2262ca9))\n* Update ru, uk, cs locale to support relativeTime with plural ([3f080f7](https://github.com/iamkun/dayjs/commit/3f080f7d6bfdc4018cbb7c4d0112ff1ead4ef6b8))\n\n## [1.8.18](https://github.com/iamkun/dayjs/compare/v1.8.17...v1.8.18) (2019-12-18)\n\n\n### Bug Fixes\n\n* Add missing locale type definition ([#716](https://github.com/iamkun/dayjs/issues/716)) ([cde5d0b](https://github.com/iamkun/dayjs/commit/cde5d0b91be7b2f5f3098de4aa0b9a4f0f28ea5c))\n* Fix .locale() handel unsupported locale ([78ec173](https://github.com/iamkun/dayjs/commit/78ec173fcecc1299516ab7b44f4554d431b4b2fd))\n* Update Italian locale (it) ([#727](https://github.com/iamkun/dayjs/issues/727)) ([5b53e98](https://github.com/iamkun/dayjs/commit/5b53e98c0a3ba0eb9573a9c77caeb907439be9e7))\n* Update locale (fa) ([#733](https://github.com/iamkun/dayjs/issues/733)) ([9ad2e47](https://github.com/iamkun/dayjs/commit/9ad2e47e0569b23991bb0d5578f49c792c12df08))\n* Update locale (zh-cn) ([#706](https://github.com/iamkun/dayjs/issues/706)) ([e31e544](https://github.com/iamkun/dayjs/commit/e31e54414fb90e1f54da13a117748ba37f52645d))\n* Update locale (zh-cn) meridiem ([#735](https://github.com/iamkun/dayjs/issues/735)) ([15d1b81](https://github.com/iamkun/dayjs/commit/15d1b813e7faf5a1f9d1ea6fc673fd27ac49d8b1))\n* Update LocaleData plugin to support dayjs().longDateFormat() ([#734](https://github.com/iamkun/dayjs/issues/734)) ([aa0f210](https://github.com/iamkun/dayjs/commit/aa0f210a1e3c4f6aba61c3b96f9eb445b43a33f0)), closes [#680](https://github.com/iamkun/dayjs/issues/680)\n* Update Mongolian (mn) locale relativeTime ([#753](https://github.com/iamkun/dayjs/issues/753)) ([6d51435](https://github.com/iamkun/dayjs/commit/6d51435092c0c94d8e50256d3f0f058cdd15febe))\n* Update Swedish locale (sv) fix ordinal error ([#745](https://github.com/iamkun/dayjs/issues/745)) ([49670d5](https://github.com/iamkun/dayjs/commit/49670d5ae31e4e21636cc5a8bfe35fef0f6d9e4a)), closes [#743](https://github.com/iamkun/dayjs/issues/743)\n\n## [1.8.17](https://github.com/iamkun/dayjs/compare/v1.8.16...v1.8.17) (2019-11-06)\n\n\n### Bug Fixes\n\n* Fix set utcOffset in utc mode ([d148115](https://github.com/iamkun/dayjs/commit/d148115dad8f1a5afc0a64e9b8163dfeba4616b6))\n* Update advancedFormat plugin to support w ww wo week tokens … ([#678](https://github.com/iamkun/dayjs/issues/678)) ([26cfa63](https://github.com/iamkun/dayjs/commit/26cfa63a524b803f7966dac5464f9cbf8f63387e)), closes [#676](https://github.com/iamkun/dayjs/issues/676)\n* Update ka locale weekdays ([f8ca3d4](https://github.com/iamkun/dayjs/commit/f8ca3d4ba1d3cbe41613d3909c0627935a51a0c4))\n* Update nb locale ([#679](https://github.com/iamkun/dayjs/issues/679)) ([1063b0e](https://github.com/iamkun/dayjs/commit/1063b0e1b5c19a1354d233cc0f21438e7073233a))\n* Update Polish locale (pl)([#713](https://github.com/iamkun/dayjs/issues/713)) ([30d2f02](https://github.com/iamkun/dayjs/commit/30d2f026b47188833a4f44fee4bab52467d4a718))\n* Update Ukrainian locale (uk) ([#710](https://github.com/iamkun/dayjs/issues/710)) ([360161c](https://github.com/iamkun/dayjs/commit/360161cac75f597fdd51d9d1ff138601282a1b4b))\n* UTC plugin set utcOffset value ([#668](https://github.com/iamkun/dayjs/issues/668)) ([8877883](https://github.com/iamkun/dayjs/commit/88778838e71dd309e79cd1a8094d5bea36ca3390))\n\n## [1.8.16](https://github.com/iamkun/dayjs/compare/v1.8.15...v1.8.16) (2019-08-27)\n\n\n### Bug Fixes\n\n* Fix relativeTime Plugin .FromNow() result error in UTC mode ([a385d5c](https://github.com/iamkun/dayjs/commit/a385d5c))\n* Handle locale in WeekOfYear plugin ([#658](https://github.com/iamkun/dayjs/issues/658)) ([0e45b0a](https://github.com/iamkun/dayjs/commit/0e45b0a))\n* LocaleData plugin returns all months and weekdays data when pas no argument ([#645](https://github.com/iamkun/dayjs/issues/645)) ([95e70b4](https://github.com/iamkun/dayjs/commit/95e70b4))\n* Return null in toJSON if not valid ([#633](https://github.com/iamkun/dayjs/issues/633)) ([19affc8](https://github.com/iamkun/dayjs/commit/19affc8))\n* Update Danish (da) locale ([#626](https://github.com/iamkun/dayjs/issues/626)) ([ac2ec77](https://github.com/iamkun/dayjs/commit/ac2ec77))\n* Update Korean locale meridiem ([#642](https://github.com/iamkun/dayjs/issues/642)) ([b457146](https://github.com/iamkun/dayjs/commit/b457146))\n* update Occitan locale Catalan locale ([#630](https://github.com/iamkun/dayjs/issues/630)) ([fef135e](https://github.com/iamkun/dayjs/commit/fef135e))\n* update pt-br locale ([#628](https://github.com/iamkun/dayjs/issues/628)) ([ccf596d](https://github.com/iamkun/dayjs/commit/ccf596d))\n* Update weekdaysShort to some locale files ([#643](https://github.com/iamkun/dayjs/issues/643)) ([cc1f15f](https://github.com/iamkun/dayjs/commit/cc1f15f))\n\n## [1.8.15](https://github.com/iamkun/dayjs/compare/v1.8.14...v1.8.15) (2019-07-08)\n\n\n### Bug Fixes\n\n* Fix dayjs.locale() returns current global locale ([#602](https://github.com/iamkun/dayjs/issues/602)) ([790cd1a](https://github.com/iamkun/dayjs/commit/790cd1a))\n* Fix incorrect Thai locale translation of July ([#607](https://github.com/iamkun/dayjs/issues/607)) ([43cbfd3](https://github.com/iamkun/dayjs/commit/43cbfd3))\n* Lowercase french locale months and weekdays ([#615](https://github.com/iamkun/dayjs/issues/615)) ([e5a257c](https://github.com/iamkun/dayjs/commit/e5a257c))\n* Type - Export Ls object to query all available locales ([#623](https://github.com/iamkun/dayjs/issues/623)) ([f6bfae0](https://github.com/iamkun/dayjs/commit/f6bfae0))\n* Update  nb (Norsk Bokmål) locale ([#604](https://github.com/iamkun/dayjs/issues/604)) ([907f5c9](https://github.com/iamkun/dayjs/commit/907f5c9))\n* Update types of `.diff` API ([#617](https://github.com/iamkun/dayjs/issues/617)) ([f0f43d2](https://github.com/iamkun/dayjs/commit/f0f43d2))\n\n## [1.8.14](https://github.com/iamkun/dayjs/compare/v1.8.13...v1.8.14) (2019-05-07)\n\n\n### Bug Fixes\n\n* Fix `.format` API returns UTC offset when value is 0 bug ([b254964](https://github.com/iamkun/dayjs/commit/b254964))\n* Fix QuarterOfYear plugin bug ([#591](https://github.com/iamkun/dayjs/issues/591)) ([434f774](https://github.com/iamkun/dayjs/commit/434f774))\n* Fix UTC plugin add day DST bug ([#590](https://github.com/iamkun/dayjs/issues/590)) ([86cd839](https://github.com/iamkun/dayjs/commit/86cd839))\n\n## [1.8.13](https://github.com/iamkun/dayjs/compare/v1.8.12...v1.8.13) (2019-04-26)\n\n\n### Bug Fixes\n\n* Add missing relativeTime and formats for some locales ([#560](https://github.com/iamkun/dayjs/issues/560)) ([96b917e](https://github.com/iamkun/dayjs/commit/96b917e))\n* Add weekday (locale aware day of the week) plugin ([#569](https://github.com/iamkun/dayjs/issues/569)) ([9007cc5](https://github.com/iamkun/dayjs/commit/9007cc5)), closes [#559](https://github.com/iamkun/dayjs/issues/559)\n* Allow customizing \"am\" / \"pm\" strings with locale meridiem function ([#580](https://github.com/iamkun/dayjs/issues/580)) ([576e93e](https://github.com/iamkun/dayjs/commit/576e93e)), closes [#578](https://github.com/iamkun/dayjs/issues/578)\n* Fix `.add` day/week decimal rouding bug ([800f6c9](https://github.com/iamkun/dayjs/commit/800f6c9))\n* Fix `.diff` type definition error ([#565](https://github.com/iamkun/dayjs/issues/565)) ([c4921ae](https://github.com/iamkun/dayjs/commit/c4921ae)), closes [#561](https://github.com/iamkun/dayjs/issues/561)\n* Fix CustomParseFormat plugin bug ([#568](https://github.com/iamkun/dayjs/issues/568)) ([1f5a9db](https://github.com/iamkun/dayjs/commit/1f5a9db)), closes [#555](https://github.com/iamkun/dayjs/issues/555)\n* Fix relativeTime plugin Math.round bug ([40bea40](https://github.com/iamkun/dayjs/commit/40bea40))\n* skip square brackets in  buddhistEra, advancedFormat plugins ([#556](https://github.com/iamkun/dayjs/issues/556)) ([9279718](https://github.com/iamkun/dayjs/commit/9279718)), closes [#554](https://github.com/iamkun/dayjs/issues/554)\n* Update Indonesian locale([#574](https://github.com/iamkun/dayjs/issues/574)) ([0aa7143](https://github.com/iamkun/dayjs/commit/0aa7143))\n* Update locale month to support both array and function ([#581](https://github.com/iamkun/dayjs/issues/581)) ([b6599d3](https://github.com/iamkun/dayjs/commit/b6599d3))\n* Update LocalizedFormat plugin lowercase formats logic ([#557](https://github.com/iamkun/dayjs/issues/557)) ([d409304](https://github.com/iamkun/dayjs/commit/d409304))\n\n## [1.8.12](https://github.com/iamkun/dayjs/compare/v1.8.11...v1.8.12) (2019-04-02)\n\n\n### Bug Fixes\n\n* Add .get API ([7318797](https://github.com/iamkun/dayjs/commit/7318797))\n* Add 79 locales ([#541](https://github.com/iamkun/dayjs/issues/541)) ([f75a125](https://github.com/iamkun/dayjs/commit/f75a125))\n* Add Calendar plugin ([d1b9cf9](https://github.com/iamkun/dayjs/commit/d1b9cf9))\n* Add isoWeeksInYear plugin ([2db8631](https://github.com/iamkun/dayjs/commit/2db8631))\n* Add Occitan (oc-lnc) locale file ([#551](https://github.com/iamkun/dayjs/issues/551)) ([c30b715](https://github.com/iamkun/dayjs/commit/c30b715))\n* Add plugin minMax to sopport .max .min ([2870a23](https://github.com/iamkun/dayjs/commit/2870a23))\n* Fix set Month Year error in last day of the month ([d058f4a](https://github.com/iamkun/dayjs/commit/d058f4a))\n* Update ko locale weekdaysShort  ([#543](https://github.com/iamkun/dayjs/issues/543)) ([317fd3e](https://github.com/iamkun/dayjs/commit/317fd3e))\n* Update localizedFormat plugin to support lowercase localizable formats (l, ll, lll, llll) ([#546](https://github.com/iamkun/dayjs/issues/546)) ([f2b5ebf](https://github.com/iamkun/dayjs/commit/f2b5ebf))\n\n## [1.8.11](https://github.com/iamkun/dayjs/compare/v1.8.10...v1.8.11) (2019-03-21)\n\n\n### Bug Fixes\n\n* Add .add('quarter') .startOf('quarter') through plugin quarterOfYear ([dde39e9](https://github.com/iamkun/dayjs/commit/dde39e9)), closes [#537](https://github.com/iamkun/dayjs/issues/537) [#531](https://github.com/iamkun/dayjs/issues/531)\n* Add locale support for Azerbaijani language (az) ([#535](https://github.com/iamkun/dayjs/issues/535)) ([eeb20fa](https://github.com/iamkun/dayjs/commit/eeb20fa))\n* Correct typescript definition `add` ([22a249c](https://github.com/iamkun/dayjs/commit/22a249c)), closes [#531](https://github.com/iamkun/dayjs/issues/531)\n* Fix CustomParseFormat plugin formatting bug ([#536](https://github.com/iamkun/dayjs/issues/536)) ([8578546](https://github.com/iamkun/dayjs/commit/8578546)), closes [#533](https://github.com/iamkun/dayjs/issues/533)\n* Update pt locale ([#538](https://github.com/iamkun/dayjs/issues/538)) ([1ac9e1e](https://github.com/iamkun/dayjs/commit/1ac9e1e))\n\n## [1.8.10](https://github.com/iamkun/dayjs/compare/v1.8.9...v1.8.10) (2019-03-10)\n\n\n### Bug Fixes\n\n* **locale:** Add nepali (ne) locale ([#524](https://github.com/iamkun/dayjs/issues/524)) ([bdbec01](https://github.com/iamkun/dayjs/commit/bdbec01))\n* Add WeekYear plugin ([a892608](https://github.com/iamkun/dayjs/commit/a892608))\n* API .locale() with no argument should return current locale name string ([8d63d88](https://github.com/iamkun/dayjs/commit/8d63d88))\n* CustomParseFormat correct parse HH:mm:ss with only one digit like 0:12:10 ([600d547](https://github.com/iamkun/dayjs/commit/600d547))\n* CustomParseFormat plugin parse Do format string ([bf27fda](https://github.com/iamkun/dayjs/commit/bf27fda)), closes [#522](https://github.com/iamkun/dayjs/issues/522)\n* Expand setters like .year(2000) .hour(12) ([ac532a0](https://github.com/iamkun/dayjs/commit/ac532a0))\n* Move toObject, toArray API to separate plugin from core ([40a3431](https://github.com/iamkun/dayjs/commit/40a3431))\n\n## [1.8.9](https://github.com/iamkun/dayjs/compare/v1.8.8...v1.8.9) (2019-03-06)\n\n\n### Features\n\n* Add UTC mode with UTC plugin ([#517](https://github.com/iamkun/dayjs/issues/517)) ([caf335c](https://github.com/iamkun/dayjs/commit/caf335c))\n\n> For plugin developers: Please note, we have changed the name of some method in `Utils` in order to reduce the file size. ([#517](https://github.com/iamkun/dayjs/issues/517)) ([detail](https://github.com/iamkun/dayjs/pull/517/files#diff-2b4ca49d4bb0a774c4d4c1672d7aa781R46))\n\n### Bug Fixes\n\n* Add locale de-AT ([#515](https://github.com/iamkun/dayjs/issues/515)) ([d93f7b6](https://github.com/iamkun/dayjs/commit/d93f7b6))\n* Add locale zh-hk ([#516](https://github.com/iamkun/dayjs/issues/516)) ([5fc05a6](https://github.com/iamkun/dayjs/commit/5fc05a6))\n\n## [1.8.8](https://github.com/iamkun/dayjs/compare/v1.8.7...v1.8.8) (2019-02-25)\n\n\n### Bug Fixes\n\n* Update relativeTime plugin type definition ([de56f2c](https://github.com/iamkun/dayjs/commit/de56f2c))\n\n## [1.8.7](https://github.com/iamkun/dayjs/compare/v1.8.6...v1.8.7) (2019-02-24)\n\n\n### Bug Fixes\n\n* Add plugin type definitions ([#418](https://github.com/iamkun/dayjs/issues/418)) ([361d437](https://github.com/iamkun/dayjs/commit/361d437))\n* Add Swahili locale ([#508](https://github.com/iamkun/dayjs/issues/508)) ([b9cee84](https://github.com/iamkun/dayjs/commit/b9cee84))\n* Parse month string 'MMMM MMM (February, Feb)' in customParseFormat ([#457](https://github.com/iamkun/dayjs/issues/457)) ([f343206](https://github.com/iamkun/dayjs/commit/f343206))\n* Update declaration file .diff .isBefore .isSame .isAfter ([#496](https://github.com/iamkun/dayjs/issues/496)) ([4523275](https://github.com/iamkun/dayjs/commit/4523275))\n* Word orders corrections for locale 'fa' ([#491](https://github.com/iamkun/dayjs/issues/491)) ([56050c2](https://github.com/iamkun/dayjs/commit/56050c2))\n\n## [1.8.6](https://github.com/iamkun/dayjs/compare/v1.8.5...v1.8.6) (2019-02-14)\n\n\n### Bug Fixes\n\n* Add Bahasa Melayu (Malaysia) locale ([#485](https://github.com/iamkun/dayjs/issues/485)) ([cb208b0](https://github.com/iamkun/dayjs/commit/cb208b0))\n* Copy & export built-in en locale to /locale folder as a separate file ([a7e05e0](https://github.com/iamkun/dayjs/commit/a7e05e0))\n* Fix bug in customParseFormat plugin while month(MM) is '01' ([9884ca5](https://github.com/iamkun/dayjs/commit/9884ca5)), closes [#494](https://github.com/iamkun/dayjs/issues/494)\n* Fix startOf week bug while week start is not Sunday ([5eaf77b](https://github.com/iamkun/dayjs/commit/5eaf77b))\n* Implemented isBetween inclusivity ([#464](https://github.com/iamkun/dayjs/issues/464)) ([af2f4f1](https://github.com/iamkun/dayjs/commit/af2f4f1))\n* Update Swedish and Finnish locales ([#488](https://github.com/iamkun/dayjs/issues/488)) ([f142082](https://github.com/iamkun/dayjs/commit/f142082))\n* Fix commonJS require ES Module bug in webpack4 ([23f9f3d](https://github.com/iamkun/dayjs/commit/23f9f3d)), check [#492](https://github.com/iamkun/dayjs/issues/492)\n\n> Get access to ESM code with `import dayjs from 'dayjs/esm'`\n\n## [1.8.5](https://github.com/iamkun/dayjs/compare/v1.8.4...v1.8.5) (2019-02-07)\n\n\n### Bug Fixes\n\n* Add en-gb locale ([#478](https://github.com/iamkun/dayjs/issues/478)) ([508c3a7](https://github.com/iamkun/dayjs/commit/508c3a7))\n* **module:** transpile everything except ES6 modules in the 'module' entrypoint ([#477](https://github.com/iamkun/dayjs/issues/477)) ([#480](https://github.com/iamkun/dayjs/issues/480)) ([#482](https://github.com/iamkun/dayjs/issues/482)) ([767017d](https://github.com/iamkun/dayjs/commit/767017d))\n* update customParseFormat plugin support hh:mm ([54947cc](https://github.com/iamkun/dayjs/commit/54947cc)), closes [#484](https://github.com/iamkun/dayjs/issues/484)\n* Update module in package.json ([5c5a7a0](https://github.com/iamkun/dayjs/commit/5c5a7a0))\n\n## [1.8.4](https://github.com/iamkun/dayjs/compare/v1.8.3...v1.8.4) (2019-02-05)\n\n* Allow set start day of week in locale && Allow set week in weekOfYear plugin ([1295591](https://github.com/iamkun/dayjs/commit/1295591))\n### Bug Fixes\n* update all locale files with correct week start ([5b03412](https://github.com/iamkun/dayjs/commit/5b03412))\n* update es es-do locale adding weekStart && update weekStart test ([66e42ec](https://github.com/iamkun/dayjs/commit/66e42ec))\n* Revert default export ([b00da1b](https://github.com/iamkun/dayjs/commit/b00da1b))\n\n## [1.8.3](https://github.com/iamkun/dayjs/compare/v1.8.2...v1.8.3) (2019-02-04)\n\n\n### Bug Fixes\n\n* fix ios safari YYYY-MM-DD HH:mm parse BUG ([e02ae82](https://github.com/iamkun/dayjs/commit/e02ae82)), closes [#254](https://github.com/iamkun/dayjs/issues/254)\n\n## [1.8.2](https://github.com/iamkun/dayjs/compare/v1.8.1...v1.8.2) (2019-02-02)\n\n\n### Bug Fixes\n\n* Add missing czech language locale ([#461](https://github.com/iamkun/dayjs/issues/461)) ([7e04004](https://github.com/iamkun/dayjs/commit/7e04004))\n* Add utcOffset api method and fix calculating diff error in DST ([#453](https://github.com/iamkun/dayjs/issues/453)) ([ce2e30e](https://github.com/iamkun/dayjs/commit/ce2e30e))\n* Fix it locale error ([#458](https://github.com/iamkun/dayjs/issues/458)) ([f6d9a64](https://github.com/iamkun/dayjs/commit/f6d9a64))\n* Add DayOfYear plugin (#454)\n* Fix es locale monthsShort error\n\n## [1.8.1](https://github.com/iamkun/dayjs/compare/v1.8.0...v1.8.1) (2019-02-02)\n\n* Add LocalizedFormat plugin supplying format like LTS, LT, LLLL \n\n* <del>update declaration File with default export (#278)</del>\n> <del>From v1.8.1, in TypeScript Project, just `import from dayjs from 'dayjs'`</del>\n* add ES2015 module support (#451)\n\n### Performance Improvements\n\n* **format:** reuse matches instead of created when replacing ([#441](https://github.com/iamkun/dayjs/issues/441)) ([10b79d8](https://github.com/iamkun/dayjs/commit/10b79d8))\n\n# [1.8.0](https://github.com/iamkun/dayjs/compare/v1.7.8...v1.8.0) (2019-01-14)\n\n\n### Features\n\n* add CustomParseFormat plugin  and QuarterOfYear plugin ([#450](https://github.com/iamkun/dayjs/issues/450)) ([8f6f63c](https://github.com/iamkun/dayjs/commit/8f6f63c))\n\n## [1.7.8](https://github.com/iamkun/dayjs/compare/v1.7.7...v1.7.8) (2018-12-13)\n\n\n### Feature\n\n* update isSame isBefore isAfter supports units ([fd65464](https://github.com/iamkun/dayjs/commit/fd65464))\n\n* add greek lithuanian locales \n\n## [1.7.7](https://github.com/iamkun/dayjs/compare/v1.7.6...v1.7.7) (2018-09-26)\n\n\n### Bug Fixes\n\n* **DST:** fix daylight saving time DST bug && add test ([#354](https://github.com/iamkun/dayjs/issues/354)) ([6fca6d5](https://github.com/iamkun/dayjs/commit/6fca6d5))\n\n## [1.7.6](https://github.com/iamkun/dayjs/compare/v1.7.5...v1.7.6) (2018-09-25)\n\n\n### Bug Fixes\n\n* **add dayjs.unix:** add dayjs.unix to parse timestamp in seconds && locale update ([5711c5e](https://github.com/iamkun/dayjs/commit/5711c5e))\n\n## [1.7.5](https://github.com/iamkun/dayjs/compare/v1.7.4...v1.7.5) (2018-08-10)\n\n\n### Bug Fixes\n\n* add isBetween API & update ([b5fc3d1](https://github.com/iamkun/dayjs/commit/b5fc3d1))\n\n## [1.7.4](https://github.com/iamkun/dayjs/compare/v1.7.3...v1.7.4) (2018-07-11)\n\n\n### Bug Fixes\n\n* update set week logic ([60b6325](https://github.com/iamkun/dayjs/commit/60b6325)), closes [#276](https://github.com/iamkun/dayjs/issues/276)\n\n## [1.7.3](https://github.com/iamkun/dayjs/compare/v1.7.2...v1.7.3) (2018-07-10)\n\n\n### Bug Fixes\n\n* **locale-nl:** set correct weekdays and months ([6d089d7](https://github.com/iamkun/dayjs/commit/6d089d7))\n\n## [1.7.2](https://github.com/iamkun/dayjs/compare/v1.7.1...v1.7.2) (2018-07-04)\n\n\n### Bug Fixes\n\n* DEPRECATED isLeapYear, use IsLeapYear plugin instead ([e2e5116](https://github.com/iamkun/dayjs/commit/e2e5116))\n\n## [1.7.1](https://github.com/iamkun/dayjs/compare/v1.7.0...v1.7.1) (2018-07-03)\n\n\n### Bug Fixes\n\n* fix week() error near the end of the year ([fa03689](https://github.com/iamkun/dayjs/commit/fa03689))\n\n# [1.7.0](https://github.com/iamkun/dayjs/compare/v1.6.10...v1.7.0) (2018-07-02)\n\n\n### Features\n\n* Added method `.week()` to retrieve week of the year ([e1c1b1c](https://github.com/iamkun/dayjs/commit/e1c1b1c))\n* Updated Japanese locae\n\n## [1.6.10](https://github.com/iamkun/dayjs/compare/v1.6.9...v1.6.10) (2018-06-25)\n\n\n### Bug Fixes\n\n* Add relative locales to russian language ([c7e9898](https://github.com/iamkun/dayjs/commit/c7e9898)), closes [#256](https://github.com/iamkun/dayjs/issues/256)\n\n## [1.6.9](https://github.com/iamkun/dayjs/compare/v1.6.8...v1.6.9) (2018-06-14)\n\n\n### Bug Fixes\n\n* add isDayjs => boolean API ([6227c8b](https://github.com/iamkun/dayjs/commit/6227c8b))\n\n## [1.6.8](https://github.com/iamkun/dayjs/compare/v1.6.7...v1.6.8) (2018-06-14)\n\n\n### Bug Fixes\n\n* fix  Advanced format bug in zh-cn ([0c07874](https://github.com/iamkun/dayjs/commit/0c07874)), closes [#242](https://github.com/iamkun/dayjs/issues/242)\n\n## [1.6.7](https://github.com/iamkun/dayjs/compare/v1.6.6...v1.6.7) (2018-06-11)\n\n\n### Bug Fixes\n\n* fix id locale ([1ebbeb8](https://github.com/iamkun/dayjs/commit/1ebbeb8)), closes [#234](https://github.com/iamkun/dayjs/issues/234)\n\n<a name=\"1.6.6\"></a>\n## [1.6.6](https://github.com/iamkun/dayjs/compare/v1.6.5...v1.6.6) (2018-06-06)\n\n\n### Bug Fixes\n\n*  format API update and locale file update ([5ca48f0](https://github.com/iamkun/dayjs/commit/5ca48f0)), closes [#228](https://github.com/iamkun/dayjs/issues/228)\n\n<a name=\"1.6.5\"></a>\n## [1.6.5](https://github.com/iamkun/dayjs/compare/v1.6.4...v1.6.5) (2018-05-31)\n\n\n### Bug Fixes\n\n* bugfix, utils update and  locale file update ([ebcb6d5](https://github.com/iamkun/dayjs/commit/ebcb6d5)), closes [#214](https://github.com/iamkun/dayjs/issues/214)\n\n<a name=\"1.6.4\"></a>\n## [1.6.4](https://github.com/iamkun/dayjs/compare/v1.6.3...v1.6.4) (2018-05-25)\n\n\n### Bug Fixes\n\n* add RelativeTime plugin and locale file update ([c1fbbca](https://github.com/iamkun/dayjs/commit/c1fbbca)), closes [#198](https://github.com/iamkun/dayjs/issues/198)\n\n<a name=\"1.6.3\"></a>\n## [1.6.3](https://github.com/iamkun/dayjs/compare/v1.6.2...v1.6.3) (2018-05-21)\n\n\n### Bug Fixes\n\n* Changing locales locally is immutable from this release ([2cce729](https://github.com/iamkun/dayjs/commit/2cce729)), closes [#182](https://github.com/iamkun/dayjs/issues/182)\n* instance locale change should be immutable ([84597c9](https://github.com/iamkun/dayjs/commit/84597c9))\n* Add more locales\n* english ordinal fix\n\n<a name=\"1.6.2\"></a>\n## [1.6.2](https://github.com/iamkun/dayjs/compare/v1.6.1...v1.6.2) (2018-05-18)\n\n\n### Bug Fixes\n\n* change-log update && test new npm release ([aa49cba](https://github.com/iamkun/dayjs/commit/aa49cba)), closes [#163](https://github.com/iamkun/dayjs/issues/163)\n\n<a name=\"1.6.1\"></a>\n## [1.6.1](https://github.com/iamkun/dayjs/compare/v1.6.0...v1.6.1) (2018-05-18)\n\n\n### Bug Fixes\n\n* Add German, Brazilian Portuguese locales\n* add() & parse() bug fix & add locale de, pt-br ([bf1331e](https://github.com/iamkun/dayjs/commit/bf1331e))\n\n<a name=\"1.6.0\"></a>\n# [1.6.0](https://github.com/iamkun/dayjs/compare/v1.5.24...v1.6.0) (2018-05-15)\n\n\n### Features\n\n* Locale && Plugin ([2342c55](https://github.com/iamkun/dayjs/commit/2342c55)), closes [#141](https://github.com/iamkun/dayjs/issues/141)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Day.js\n\nThank you for taking the time to read our contribution guidelines. You can start contributing in many ways like filing bug reports, [improving the locale && documentation](https://github.com/iamkun/dayjs/issues/171), or helping others.\n\nOur open source community strives to be nice, welcoming and professional. Instances of abusive, harassing, or otherwise unacceptable behavior will not be tolerated.\n\n## Style\n\n* Day.js is written in ES6.\n* We use ESLint to check our code. You can use `npm run lint` before submitting a pull request.\n* Please use semantic commit message.\n\n## Bugs\n\n* Before submitting a bug report, search the issues for similar tickets. Your issue may have already been discussed and resolved. \n* Feel free to add a comment to an existing issue, even if it's closed.\n* Be thorough in your title and report, don't leave out important details.\n* English, please.\n\n## Tests\n\n* Feel free to create a new `test/*.test.js` file if none of the existing test files suits your test case.\n* Help us keeping 100% test coverage :D.\n* You can use `npm run test` before submitting a pull request.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018-present, iamkun\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "English | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md) | [සිංහල](./docs/si/README-si.md) | [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\" /></a></p>\n<p align=\"center\">Fast <b>2kB</b> alternative to Moment.js with the same modern API</p>\n<p align=\"center\">\n    <a href=\"https://bundlephobia.com/package/dayjs\"><img\n            src=\"https://img.shields.io/bundlephobia/minzip/dayjs?style=flat-square&color=%2345cc11\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js is a minimalist JavaScript library that parses, validates, manipulates, and displays dates and times for modern browsers with a largely Moment.js-compatible API. If you use Moment.js, you already know how to use Day.js.\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n* 🕒 Familiar Moment.js API & patterns\n* 💪 Immutable\n* 🔥 Chainable\n* 🌐 I18n support\n* 📦 2kb mini library\n* 👫 All browsers supported\n\n---\n\n## Getting Started\n\n### Documentation\n\nYou can find more details, API, and other docs on [day.js.org](https://day.js.org/) website.\n\n### Installation\n\n```console\nnpm install dayjs --save\n```\n\n📚[Installation Guide](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nIt's easy to use Day.js APIs to parse, validate, manipulate, and display dates and times.\n\n```javascript\ndayjs('2018-08-08') // parse\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display\n\ndayjs().set('month', 3).month() // get & set\n\ndayjs().add(1, 'year') // manipulate\n\ndayjs().isBefore(dayjs()) // query\n```\n\n📚[API Reference](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js has great support for internationalization.\n\nBut none of them will be included in your build unless you use it.\n\n```javascript\nimport 'dayjs/locale/es' // load on demand\n\ndayjs.locale('es') // use Spanish locale globally\n\ndayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance\n```\n\n📚[Internationalization](https://day.js.org/docs/en/i18n/i18n)\n\n### Plugin\n\nA plugin is an independent module that can be added to Day.js to extend functionality or add new features.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand\n\ndayjs.extend(advancedFormat) // use plugin\n\ndayjs().format('Q Do k kk X x') // more available formats\n```\n\n📚[Plugin List](https://day.js.org/docs/en/plugin/plugin)\n\n## Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website.\n\n[[Become a sponsor via Github](https://github.com/sponsors/iamkun/)] [[Become a sponsor via OpenCollective](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://github.com/ken-swyfft\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/65305317?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/sight-sound\" target=\"_blank\">\n  <img width=\"70\" src=\"https://images.opencollective.com/sight-sound/54f7220/logo/256.png?height=256\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/filerev\" target=\"_blank\">\n  <img width=\"70\" src=\"https://images.opencollective.com/filerev/93a8f05/logo/256.png?height=256\" />\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/carboneio\" target=\"_blank\">\n  <img width=\"70\" src=\"https://images.opencollective.com/carboneio/fe2066c/logo/256.png?height=256\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/radioplusexperts\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/188567998?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://anonstories.com\" target=\"_blank\">\n  <img alt=\"Instagram Story Viewer\" width=\"70\" src=\"https://avatars.githubusercontent.com/u/240702364?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://automatio.ai\" target=\"_blank\" alt=\"Automatio AI\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/1984909?v=4\" />\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://bestkru.com/\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/159320286\" alt=\"BestKru\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://handsontable.com/docs/react-data-grid/?utm_source=Dayjs_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship\" target=\"_blank\">\n  <img width=\"70\" src=\"https://github.com/user-attachments/assets/426c3476-dc34-44d1-a904-ed58dbd20dd6\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://route4me.com/\" target=\"_blank\">\n  <img width=\"70\" src=\"https://github.com/user-attachments/assets/3fbc86c5-98a9-49c2-beae-1969026fcd76\" alt=\"Route Optimizer and Route Planner Software\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/sentdm\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/153308555?s=200&v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/blacksandsmedia\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/116517387?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/mvpsnet\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/89784111?s=96&v=4\">\n</a>\n\n\n## Contributors\n\nThis project exists thanks to all the people who contribute.\n\nPlease give us a 💖 star 💖 to support us. Thank you.\n\nAnd thank you to all our backers! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<br />\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## License\n\nDay.js is licensed under a [MIT License](./LICENSE).\n"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n  env: {\n    test: {\n      presets: [\n        '@babel/preset-env'\n      ]\n    },\n    build: {\n      presets: [\n        [\n          '@babel/preset-env',\n          {\n            modules: false,\n            loose: true\n          }\n        ]\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "build/esm.js",
    "content": "const fs = require('fs')\nconst path = require('path')\nconst util = require('util')\nconst { ncp } = require('ncp')\n\nconst { promisify } = util\n\nconst typeFileExt = '.d.ts'\nconst localeDir = path.join(process.env.PWD, 'esm/locale')\nconst pluginDir = path.join(process.env.PWD, 'esm/plugin')\nconst localeTypePath = path.join(process.env.PWD, 'esm/locale', `index${typeFileExt}`);\n\n(async () => {\n  try {\n    const readLocaleDir = await promisify(fs.readdir)(localeDir)\n    readLocaleDir.forEach(async (l) => {\n      const filePath = path.join(localeDir, l)\n      const readFile = await promisify(fs.readFile)(filePath, 'utf8')\n      const result = readFile.replace(\"'dayjs'\", \"'../index'\")\n      await promisify(fs.writeFile)(filePath, result, 'utf8')\n    })\n\n    await promisify(ncp)('./types/', './esm')\n\n    const readLocaleFile = await promisify(fs.readFile)(localeTypePath, 'utf8')\n    const localResult = readLocaleFile.replace(\"'dayjs\", \"'dayjs/esm\")\n    await promisify(fs.writeFile)(localeTypePath, localResult, 'utf8')\n\n    const readPluginDir = await promisify(fs.readdir)(pluginDir)\n    readPluginDir.forEach(async (p) => {\n      if (p.includes(typeFileExt)) {\n        const pluginName = p.replace(typeFileExt, '')\n        const filePath = path.join(pluginDir, p)\n        const targetPath = path.join(pluginDir, pluginName, `index${typeFileExt}`)\n        const readFile = await promisify(fs.readFile)(filePath, 'utf8')\n        const result = readFile.replace(/'dayjs'/g, \"'dayjs/esm'\")\n        await promisify(fs.writeFile)(targetPath, result, 'utf8')\n        await promisify(fs.unlink)(filePath)\n      }\n    })\n  } catch (e) {\n    console.error(e) // eslint-disable-line no-console\n  }\n})()\n"
  },
  {
    "path": "build/index.js",
    "content": "const rollup = require('rollup')\nconst configFactory = require('./rollup.config')\nconst fs = require('fs')\nconst util = require('util')\nconst path = require('path')\nconst { ncp } = require('ncp')\n\nconst { promisify } = util\n\nconst promisifyReadDir = promisify(fs.readdir)\nconst promisifyReadFile = promisify(fs.readFile)\nconst promisifyWriteFile = promisify(fs.writeFile)\n\nconst localeNameRegex = /\\/\\/ (.*) \\[/\nconst formatName = n => n.replace(/\\.js/, '').replace('-', '_')\n\nconst localePath = path.join(__dirname, '../src/locale')\n\nasync function build(option) {\n  const bundle = await rollup.rollup(option.input)\n  await bundle.write(option.output)\n}\n\nasync function listLocaleJson(localeArr) {\n  const localeListArr = []\n  await Promise.all(localeArr.map(async (l) => {\n    const localeData = await promisifyReadFile(path.join(localePath, l), 'utf-8')\n    localeListArr.push({\n      key: l.slice(0, -3),\n      name: localeData.match(localeNameRegex)[1]\n    })\n  }))\n  promisifyWriteFile(path.join(__dirname, '../locale.json'), JSON.stringify(localeListArr), 'utf8')\n}\n\n(async () => {\n  try {\n    /* eslint-disable no-restricted-syntax, no-await-in-loop */\n    // We use await-in-loop to make rollup run sequentially to save on RAM\n    const locales = await promisifyReadDir(localePath)\n    for (const l of locales) {\n      // run builds sequentially to limit RAM usage\n      await build(configFactory({\n        input: `./src/locale/${l}`,\n        fileName: `./locale/${l}`,\n        name: `dayjs_locale_${formatName(l)}`\n      }))\n    }\n\n    const plugins = await promisifyReadDir(path.join(__dirname, '../src/plugin'))\n    for (const plugin of plugins) {\n      // run builds sequentially to limit RAM usage\n      await build(configFactory({\n        input: `./src/plugin/${plugin}/index`,\n        fileName: `./plugin/${plugin}.js`,\n        name: `dayjs_plugin_${formatName(plugin)}`\n      }))\n    }\n\n    build(configFactory({\n      input: './src/index.js',\n      fileName: './dayjs.min.js'\n    }))\n\n    await promisify(ncp)('./types/', './')\n\n    // list locales\n    await listLocaleJson(locales)\n  } catch (e) {\n    console.error(e) // eslint-disable-line no-console\n  }\n})()\n"
  },
  {
    "path": "build/rollup.config.js",
    "content": "const babel = require('rollup-plugin-babel')\nconst { terser } = require('rollup-plugin-terser')\n\nmodule.exports = (config) => {\n  const { input, fileName, name } = config\n  return {\n    input: {\n      input,\n      external: [\n        'dayjs'\n      ],\n      plugins: [\n        babel({\n          exclude: 'node_modules/**'\n        }),\n        terser()\n      ]\n    },\n    output: {\n      file: fileName,\n      format: 'umd',\n      name: name || 'dayjs',\n      globals: {\n        dayjs: 'dayjs'\n      },\n      compact: true\n    }\n  }\n}\n"
  },
  {
    "path": "docs/demo/index.js",
    "content": "import dayjs from 'dayjs'\n// basic usage\ndayjs().format()\n\n// parse\ndayjs('2018-08-08').format()\n\n// format\ndayjs().format('YYYY-MM-DD')\n\n// locale\ndayjs().locale('zh-cn').format()\n\n// add\ndayjs().add(1, 'year').format()\n\n// subtract\ndayjs().subtract(1, 'year').format()\n\n// diff\ndayjs().diff(dayjs().add(1, 'year'), 'year')\n\n// isBefore\ndayjs().isBefore(dayjs().add(1, 'year'))\n\n// isAfter\ndayjs().isAfter(dayjs().subtract(1, 'year'))\n\n// isSame\ndayjs().isSame(dayjs())\n\n// isLeapYear\ndayjs().isLeapYear()\n\n// isBetween\ndayjs().isBetween(dayjs().subtract(1, 'year'), dayjs().add(1, 'year'))\n\n// isSameOrAfter\ndayjs().isSameOrAfter(dayjs().subtract(1, 'year'))\n\n// isSameOrBefore\ndayjs().isSameOrBefore(dayjs().add(1, 'year'))\n\n// startOf\ndayjs().startOf('year').format()\n\n// endOf\ndayjs().endOf('year').format()\n\n// week\ndayjs().week()\n\n// weekday\ndayjs().weekday()\n"
  },
  {
    "path": "docs/en/API-reference.md",
    "content": "### Note\n\nThe documents are moved to [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/en/I18n.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/en/Installation.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/en/Plugin.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/es-es/API-reference.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/es-es/I18n.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/es-es/Installation.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/es-es/Plugin.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/es-es/README-es-es.md",
    "content": "Español (España) | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [日本語](../ja/README-ja.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [한국어](../ko/README-ko.md) | [Русский](../ru/README-ru.md) | [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Alternativa rápida y ligera <b>2kB</b> a Moment.js, con la misma API moderna</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js es una librería minimalista para JavaScript que analiza, valida, manipula y muestra fechas y horas para navegadores modernos, manteniendo una API casi completamente compatible con Moment.js. Si usas o has usado Moment.js, ya sabes usar Day.js\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 API & patrones familiares para usuarios de Moment.js\n- 💪 Inmutable\n- 🔥 Encadenable\n- 🌐 Soporta I18n\n- 📦 Mini librería de 2kb\n- 👫 Compatible con todos los navegadores\n\n---\n\n# Primeros pasos\n\n### Documentación\n\nPuedes encontrar más detalles, la API y otros documentos en [day.js.org](https://day.js.org/) el sitio web.\n\n## Instalación\n\n```console\nnpm install dayjs --save\n```\n\n📚[Guía de instalación](https://day.js.org/docs/en/installation/installation)\n\n## API\n\nEs fácil el usar las APIs de Day.js para analizar, validar, manipular y mostrar fechas y horas.\n\n```javascript\ndayjs('2018-08-08') // analiza\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // da formato\n\ndayjs()\n  .set('month', 3)\n  .month() // get & set\n\ndayjs().add(1, 'year') // manipula\n\ndayjs().isBefore(dayjs()) // consulta\n```\n\n📚[Referencia de la API](https://day.js.org/docs/en/parse/parse)\n\n## I18n\n\nDay.js soporta muy bien la internacionalización.\n\nPero no se incluirá en tu compilación final a menos que así lo requieras.\n\n```javascript\nimport 'dayjs/locale/es' // carga bajo demanda\n\ndayjs.locale('es') // usar la configuración regional española globalmente\n\ndayjs('2018-05-05')\n  .locale('zh-cn')\n  .format() // usar el chino simplificado en una instancia concreta\n```\n\n📚[Internacionalización](https://day.js.org/docs/en/i18n/i18n)\n\n## Complementos\n\nUn complemento o _plugin_ es un módulo independiente que puede añadirse a Day.js para extender su funcionalidad o añadir nuevas características.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // carga bajo demanda\n\ndayjs.extend(advancedFormat) // uso del complemento\n\ndayjs().format('Q Do k kk X x') // ahora tenemos más formatos disponibles\n```\n\n📚[Lista de complementos](https://day.js.org/docs/en/plugin/plugin)\n\n## Patrocinadores\n\nApoya a este proyecto convirtiéndote en un patrocinador. Tu logo aparecerá aquí, enlazado a tu sitio web. [[Conviértete en un patrocinador](https://opencollective.com/dayjs#sponsor)]\n\n[![Avatar patrocinador 1](https://opencollective.com/dayjs/sponsor/0/avatar.svg)](https://opencollective.com/dayjs/sponsor/0/website)\n[![Avatar patrocinador 2](https://opencollective.com/dayjs/sponsor/1/avatar.svg)](https://opencollective.com/dayjs/sponsor/1/website)\n[![Avatar patrocinador 3](https://opencollective.com/dayjs/sponsor/2/avatar.svg)](https://opencollective.com/dayjs/sponsor/2/website)\n\n## Contribuidores\n\nEste proyecto existe gracias a todas las personas que contribuyen en él.\n\nPor favor, danos una 💖 estrella 💖 para apoyarnos. Gracias.\n\n¡Y gracias también a todos nuestros micromecenas! 🙏\n<a alt=\"Mural de avatares de micromecenas\" href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Licencia\n\nDay.js está licenciado bajo la [Licencia MIT](./LICENSE).\n"
  },
  {
    "path": "docs/fr/README-fr.md",
    "content": "Français | [English](../../README.md) | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md) | [සිංහල](./docs/si/README-si.md) | [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\" /></a></p>\n<p align=\"center\">Alternative rapide de <b>2kB</b> à Moment.js avec la même API moderne</p>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js est une bibliothèque JavaScript minimaliste qui analyse, valide, manipule et affiche les dates et heures pour les navigateurs modernes avec une API largement compatible avec Moment.js. Si vous utilisez Moment.js, vous savez déjà comment utiliser Day.js.\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n* 🕒 Familiarité avec l'API et les modèles Moment.js\n* 💪 Immuable\n* 🔥 Enchaînable\n* 🌐 Support I18n\n* 📦 Petite bibliothèque de 2kb\n* 👫 Tous les navigateurs sont pris en charge\n\n---\n\n## Mise en place\n\n### Documentation\n\nVous trouverez plus de détails sur l'API et les autres documents sur le site [day.js.org](https://day.js.org/).\n\n### Installation\n\n```console\nnpm install dayjs --save\n```\n\n📚[Guide d'installation](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nIl est facile d'utiliser les API de Day.js pour analyser, valider, manipuler et afficher des dates et des heures.\n\n```javascript\ndayjs('2018-08-08') // parse\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display\n\ndayjs().set('month', 3).month() // get & set\n\ndayjs().add(1, 'year') // manipulate\n\ndayjs().isBefore(dayjs()) // query\n```\n\n📚[API Reference](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js offre une excellente prise en charge de l'internationalisation.\n\nMais aucun d'entre eu ne sera inclus dans votre construction si vous ne l'utilisez pas.\n\n```javascript\nimport 'dayjs/locale/es' // load on demand\n\ndayjs.locale('es') // use Spanish locale globally\n\ndayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance\n```\n\n📚[Internationalisation](https://day.js.org/docs/en/i18n/i18n)\n\n### Plugin\n\nUn plugin est un module indépendant qui peut être ajouté à Day.js pour en étendre les fonctionnalités ou en ajouter de nuovelles.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand\n\ndayjs.extend(advancedFormat) // use plugin\n\ndayjs().format('Q Do k kk X x') // more available formats\n```\n\n📚[Liste des plugins](https://day.js.org/docs/en/plugin/plugin)\n\n### Tendance d'utilisation\n\n<a href=\"https://npm-compare.com/moment,dayjs/#timeRange=THREE_YEARS\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img src=\"https://user-images.githubusercontent.com/3455798/270162667-c7bd2ebe-675e-45c6-a2c9-dc67f3b65d6e.png\">\n</a>\n\n## Sponsors\n\nSoutenez ce projet en devenant sponsor. Votre logo apparaîtra ici avec un lien vers votre site web.\n\n[[Devenir sponsor via Github](https://github.com/sponsors/iamkun/)] [[Devenir sponsor via OpenCollective](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://toyokumo.co.jp\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/197092231-2367b5eb-1e43-467e-a311-23f7cd97b086.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/alan-eu\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/18175329?s=52&v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/sight-and-sound-ministries\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/232316426-cb99b4cf-0ccb-4e73-a6ce-e16dba6aadf4.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/chudovo\" target=\"_blank\">\n  <img width=\"70\" src=\"https://images.opencollective.com/chudovo/3c866f5/logo/256.png?height=256\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/ken-swyfft\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/65305317?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://www.exoflare.com/open-source/?utm_source=dayjs&utm_campaign=open_source\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/162761622-1407a849-0c41-4591-8aa9-f98114ec2092.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/anonstories\" target=\"_blank\"><img width=\"70\" src=\"https://images.opencollective.com/anonstories/7e826c0/avatar/256.png\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/datawrapper\" target=\"_blank\"><img width=\"70\" src=\"https://images.opencollective.com/datawrapper/c13e229/logo.png\"></a>\n\n## Contributeurs\n\nCe projet existe grâce à toutes les personnes qui y contribuent.\n\nDonnez-nous une 💖 étoile 💖 pour nous soutenir. Nous vous remercions.\n\nEt merci à tous nos donateurs ! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<br />\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Licence\n\nDay.js est sous licence [MIT License](./LICENSE).\n"
  },
  {
    "path": "docs/he/README-he.md",
    "content": "<div dir=\"rtl\">\n\nעברית | [English](../../README.md)  | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md) | [සිංහල](./docs/si/README-si.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">אלטרנטיבה מהירה ל-Moment.js ששוקלת רק <b>2kB</b> עם אותן יכולות מודרניות</p>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js היא ספרייה מינימלסטית לפענוח, אימות, מניפולציה והצגה של תאריכים ושעות לדפדפנים מודרנים עם תאימות גבוהה ל-API של Moment.js. אם השתמשתם ב-Moment.js, אתם כבר יודעים את Day.js\n\n<div dir=\"ltr\">\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n</div>\n\n* 🕒 תבניות ו-API זהים ל-Moment.js\n* 💪 אינו ניתן לשינוי\n* 🔥 ניתן לשרשור\n* 🌐 תמיכה ב-I18n\n* 📦 ספרייה קטנטנה 2kb\n* 👫 נתמכת בכל הדפדפנים\n\n---\n\n## צעדים ראשונים\n\n### דוקומנטצייה\nבאתר [day.js.org](https://day.js.org/) ניתן למצוא פרטים נוספים, API, ותיעודים נוספים.\n\n\n### התקנה\n\n```console\nnpm install dayjs --save\n```\n\n📚[מדריך התקנה](https://day.js.org/docs/en/installation/installation)\n\n### API\nמאוד קל להשתמש ב-Day.js לפענוח, אימות, מניפולציה והצגה של תאריכים ושעות.\n\n<div dir=\"ltr\">\n\n\n```javascript\ndayjs('2018-08-08') // פענוח\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // הצגה\n\ndayjs().set('month', 3).month() // קבלה והגדרה\n\ndayjs().add(1, 'year') // מניפולציה\n\ndayjs().isBefore(dayjs()) // שאילתה\n```\n\n</div>\n\n📚[תיעודי API](https://day.js.org/docs/en/parse/parse)\n\n### I18n\nל-Day.js יש תמיכה מצוינית בבינלאומיות.\n\nאבל אף אחד מהם לא יכלל בקובץ הסופי אלא אם כן יתבצע בהם שימוש.\n\n<div dir=\"ltr\">\n\n\n```javascript\nimport 'dayjs/locale/es' // טעינה לפי הצורך\n\ndayjs.locale('es') // הגדרה לשימוש בספרדית באופן גלובלאלי\n\ndayjs('2018-05-05').locale('zh-cn').format() // הגדרה לשימוש בסינית פשוטה למופע ספיציפי בלבד\n```\n\n</div>\n\n\n📚[בינלאומיות](https://day.js.org/docs/en/i18n/i18n)\n\n### תוסף\n\nתוסף הוא מודל בלתי-תלוי הניתן להוספה ל-Day.js להרחבה או להוספה של פונקציות.\n\n\n<div dir=\"ltr\">\n\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' //  טעינה לפי הצורך\n\ndayjs.extend(advancedFormat) // שימוש בתוסף\n\ndayjs().format('Q Do k kk X x') // כעת יותר אפשרויות זמינות\n```\n\n</div>\n\n📚[רשימת תוספים](https://day.js.org/docs/en/plugin/plugin)\n\n### ספונסרים\nתמכו בפרויקט זה כדי להיות ספונסר. קבלו לוגו עם קישור לאתר שלכם שיופיע כאן.\n\n[[תמיכה דרך Github](https://github.com/sponsors/iamkun/)] [[תמיכה דרך OpenCollective](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://toyokumo.co.jp\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/197092231-2367b5eb-1e43-467e-a311-23f7cd97b086.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/alan-eu\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/18175329?s=52&v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/sight-and-sound-ministries\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/232316426-cb99b4cf-0ccb-4e73-a6ce-e16dba6aadf4.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://www.exoflare.com/open-source/?utm_source=dayjs&utm_campaign=open_source\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/162761622-1407a849-0c41-4591-8aa9-f98114ec2092.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://rxdb.info/?utm_source=day.js.org&utm_medium=banner&utm_campaign=day.js.org-sponsored\" target=\"_blank\"><img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/200301812-9c9bd523-5dc4-4cab-b380-543fbcd3802c.svg\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/vendure-ecommerce\" target=\"_blank\"><img width=\"70\" src=\"https://avatars.githubusercontent.com/u/39629390?s=52&v=4\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/docbot\" target=\"_blank\"><img width=\"70\" src=\"https://images.opencollective.com/docbot/457761e/logo.png\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/datawrapper\" target=\"_blank\"><img width=\"70\" src=\"https://images.opencollective.com/datawrapper/c13e229/logo.png\"></a>\n\n## תורמים\n\nפרויקט זה קיים הודות לכל האנשים שתמכו בו.\n\nתנו לנו 💖 כוכב 💖 כדי לתמוך בנו. תודה רבה.\n\nותודה רבה לכל התומכים שלנו! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<br />\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## רישיון\n\nDay.js מורשה לשימוש עם [רישיון MIT](./LICENSE).\n</div>\n"
  },
  {
    "path": "docs/ja/API-reference.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ja/I18n.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ja/Installation.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ja/Plugin.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ja/README-ja.md",
    "content": "日本語 | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [한국어](../ko/README-ko.md) | [Español (España)](../es-es/README-es-es.md) | [Русский](../ru/README-ru.md)| [עברית](../he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Moment.js と同じ API を備えた <b>2kB</b> の軽量ライブラリ</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/npm/l/dayjs.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js は日付と時刻をパース・検証・操作・表示する最小のモダンブラウザ向け JavaScript ライブラリであり、 Moment.js の API との広い互換性を持ちます。 Moment.js を使ったことがあればすぐにでも Day.js を使い始めることができます。\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 Moment.js と類似した API と使用法\n- 💪 イミュータブル\n- 🔥 メソッドチェーン\n- 🌐 国際化サポート (I18n)\n- 📦 2kb の軽量ライブラリ\n- 👫 全ブラウザをサポート\n\n---\n\n## はじめに\n\n### ドキュメント\n\n詳細、API、その他のドキュメントについては、[day.js.org](https://day.js.org/) のウェブサイトを参照してください。\n\n### インストール\n\n```console\nnpm install dayjs --save\n```\n\n📚[インストールガイド](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nDay.js API で日付と時刻をパース・検証・操作・表示するのは簡単です。\n\n```javascript\ndayjs('2018-08-08') // パース\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // 表示\n\ndayjs()\n  .set('month', 3)\n  .month() // get & set\n\ndayjs().add(1, 'year') // 操作\n\ndayjs().isBefore(dayjs()) // クエリ\n```\n\n📚[API リファレンス](https://day.js.org/docs/en/parse/parse)\n\n### 国際化 (I18n)\n\nDay.js は国際化を手厚くサポートしています。\n\nまた、使用しないロケールをビルドに含みません。\n\n```javascript\nimport 'dayjs/locale/es' // 必要に応じて読み込み\n\ndayjs.locale('es') // スペイン語をグローバルロケールとして適用\n\ndayjs('2018-05-05')\n  .locale('zh-cn')\n  .format() // 簡体字中国語を特定のインスタンスにのみ適用\n```\n\n📚[国際化](https://day.js.org/docs/en/i18n/i18n)\n\n### プラグイン\n\nプラグインとは、 Day.js の機能を拡張したり、新たな機能を追加するための独立したモジュールのことです。\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // 必要に応じて読み込み\n\ndayjs.extend(advancedFormat) // プラグインを使用\n\ndayjs().format('Q Do k kk X x') // 多様なフォーマットが利用可能に\n```\n\n📚[プラグインリスト](https://day.js.org/docs/en/plugin/plugin)\n\n## ライセンス\n\nDay.js は [MIT License](../../LICENSE) のもとで利用を許諾します。\n"
  },
  {
    "path": "docs/ko/API-reference.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ko/I18n.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ko/Installation.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ko/Plugin.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/ko/README-ko.md",
    "content": "한국어 | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [日本語](../ja/README-ja.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [Español (España)](../es-es/README-es-es.md) | [Русский](../ru/README-ru.md)| [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Moment.js와 호환되는 API를 가진 경량 라이브러리 (<b>2kB</b>)</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/npm/l/dayjs.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js는 대부분의 API가 Moment.js와 호환되며 최신 브라우저에서 날짜와 시간에 대한 구문 분석, 유효성 검사, 조작, 출력을 간편하게 처리하는 경량 JavaScript 라이브러리 입니다. Moment.js를 사용해본 경험이 있다면, Day.js도 쉽게 사용하실 수 있습니다.\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 친숙한 Moment.js API와 패턴\n- 💪 불변 오브젝트(Immutable)\n- 🔥 메소드 체인(Chainable)\n- 🌐 I18n 지원\n- 📦 2kb 미니 라이브러리\n- 👫 모든 브라우저 지원\n\n---\n\n## 시작해볼까요!\n\n### 문서\n\n더 많은 세부 사항과 API 및 다른 문서는 [day.js.org](https://day.js.org/) 웹사이트에서 확인하실 수 있습니다.\n\n### 설치\n\n```console\nnpm install dayjs --save\n```\n\n📚[설치 가이드](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nDay.js API를 사용하여 날짜와 시간의 구문 분석, 검증, 조작, 출력을 간편하게 처리할 수 있습니다.\n\n```javascript\ndayjs('2018-08-08') // parse\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display\n\ndayjs()\n  .set('month', 3)\n  .month() // get & set\n\ndayjs().add(1, 'year') // manipulate\n\ndayjs().isBefore(dayjs()) // query\n```\n\n📚[API 참고](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js는 국제화에 대한 많은 지원을 제공하고 있습니다.\n\n하지만 이 기능을 사용하지 않는 경우, 빌드에 포함되지 않습니다.\n\n```javascript\nimport 'dayjs/locale/es' // load on demand\n\ndayjs.locale('es') // use Spanish locale globally\n\ndayjs('2018-05-05')\n  .locale('zh-cn')\n  .format() // use Chinese Simplified locale in a specific instance\n```\n\n📚[I18n](https://day.js.org/docs/en/i18n/i18n)\n\n### Plugin\n\n플러그인은 Day.js의 기능을 확장하거나 새로운 기능을 도입하기 위한 독립적인 모듈입니다.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand\n\ndayjs.extend(advancedFormat) // use plugin\n\ndayjs().format('Q Do k kk X x') // more available formats\n```\n\n📚[플러그인 목록](https://day.js.org/docs/en/plugin/plugin)\n\n## License\n\nDay.js는 [MIT License](./LICENSE)를 사용합니다.\n"
  },
  {
    "path": "docs/pt-br/API-reference.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/pt-br/I18n.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/pt-br/Installation.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/pt-br/Plugin.md",
    "content": "### Note\n\nThe documents are moved to  [https://day.js.org](https://day.js.org).\n"
  },
  {
    "path": "docs/pt-br/README-pt-br.md",
    "content": "Português Brasileiro | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [日本語](../ja/README-ja.md) | [한국어](../ko/README-ko.md) | [Español (España)](../es-es/README-es-es.md) | [Русский](../ru/README-ru.md)| [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Alternativa veloz ao Moment.js, com <b>2kB</b> e a mesma API moderna</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/npm/l/dayjs.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js é uma biblioteca JavaScript minimalista que analisa, valida, manipula e formata datas e horas para navegadores modernos, usando uma API quase completamente compatível com Moment.js. Se você já usou Moment.js, já sabe usar Day.js.\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 API & padrões familiares aos do Moment.js\n- 💪 Imutável\n- 🔥 Encadeável\n- 🌐 Suporta I18n\n- 📦 Mini biblioteca de 2kb\n- 👫 Suporta todos os navegadores\n\n---\n\n## Começando\n\n### Documentação\n\nVocê pode encontrar mais detalhes sobre a API e também a documentação completa em [day.js.org](https://day.js.org/).\n### Instalação\n\n```console\nnpm install dayjs --save\n```\n\n📚[Guia de instalação](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nÉ fácil utilizar a API do Day.js para converter, validar, manipular, e exibir datas e horas.\n\n```javascript\ndayjs('2018-08-08') // converte\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // formata\n\ndayjs()\n  .set('month', 3)\n  .month() // get & set\n\ndayjs().add(1, 'year') // manipula\n\ndayjs().isBefore(dayjs()) // verifica\n```\n\n📚[Referência da API](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js tem suporte para internacionalização.\n\nPorém nenhuma estará inclusa no seu _build_ a menos que você utilize-a.\n\n```javascript\nimport 'dayjs/locale/es' // carregar sob demanda\n\ndayjs.locale('es') // usar locale espanhol globalmente\n\ndayjs('2018-05-05')\n  .locale('pt-br')\n  .format() // usar locale em português brasileiro em uma instância específica\n```\n\n📚[Internacionalização](https://day.js.org/docs/en/i18n/i18n)\n\n### Plugin\n\nUm plugin é um módulo independente que pode ser adicionado ao Day.js para estender funcionalidades e adicionar novos recursos.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // carregar sob demanda\n\ndayjs.extend(advancedFormat) // usar plugin\n\ndayjs().format('Q Do k kk X x') // mais formatos disponíveis pelo plugin\n```\n\n📚[Lista de Plugins](https://day.js.org/docs/en/plugin/plugin)\n\n## Patrocinadores\n\nAjude este projeto se tornando um patrocinador. O seu logo será exibido aqui, com um link para o seu site. [[Tornar-se um Patrocinador](https://opencollective.com/dayjs#sponsor)].\n\n<a href=\"https://opencollective.com/dayjs/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/2/avatar.svg\"></a>\n\n## Contribuidores\n\nEste projeto existe graças a todas as pessoas que contribuem.\n\nPor favor, nos dê uma 💖 estrela 💖 para suportar-nos. Obrigado.\n\nE obrigado a todos os nossos apoiadores! 🙏\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Licença\n\nDay.js é licenciado sob a [MIT License](../../LICENSE).\n"
  },
  {
    "path": "docs/ru/LICENSE-ru",
    "content": "Лицензия MIT\r\n\r\nАвторское право (c) с 2018 года по настоящее время, iamkun\r\n\r\nДанная лицензия разрешает лицам, получившим копию\r\nданного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное обеспечение»), безвозмездно\r\nиспользовать Программное обеспечение без ограничений, включая неограниченное право\r\nна использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу\r\nкопий Программного обеспечения, а также лицам, которым предоставляется данное Программное обеспечение,\r\nпри соблюдении следующих условий:\r\n\r\nУказанное выше уведомление об авторском праве и данные условия должны быть включены во все\r\nкопии или значимые части данного Программного обеспечения.\r\n\r\nДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ\r\nПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ\r\nИ ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ\r\nПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ,\r\nВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ."
  },
  {
    "path": "docs/ru/README-ru.md",
    "content": "Русский | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [日本語](../ja/README-ja.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [한국어](../ko/README-ko.md) | [Español (España)](../es-es/README-es-es.md)| [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Быстрая <b>2kB</b> альтернатива Moment.js с тем же современным API</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js - это миниатюрная JavaScript библиотека, которая парсит, валидирует, управляет, и отображает даты и время для современных браузеров, обладающая большой совместимостью с Moment.js API. Если вы используете Moment.js, вы уже знаете как пользоваться Day.js.\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n* 🕒 Хорошо знакомые API и паттерны Moment.js\n* 💪 Неизменная\n* 🔥 Цепная\n* 🌐 Поддержка интернационализации (I18n)\n* 📦 2kb мини-библиотека\n* 👫 Поддерживающаяся всеми браузерами\n\n---\n\n## Начало работы\n\n### Документация\n\nВы можете найти больше детальной информации, API, и других документов на веб-сайте [day.js.org](https://day.js.org/).\n\n### Установка\n\n```console\nnpm install dayjs --save\n```\n\n📚[Инструкция по установке](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nAPI Day.js легко использовать для парсинга, валидации, управления, и отображения дат и времени.\n\n```javascript\ndayjs('2018-08-08') // парсинг\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // отображение\n\ndayjs().set('month', 3).month() // получение и установка\n\ndayjs().add(1, 'year') // управление\n\ndayjs().isBefore(dayjs()) // осведомление\n```\n\n📚[Ссылка на API](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js обладает великолепной поддержкой интернационализации.\n\nНо ни одна из локализаций не будет включена в вашу сборку до тех пор, пока вы не начнёте её использовать.\n```javascript\nimport 'dayjs/locale/es' // загрузка по требованию\n\ndayjs.locale('es') // глобальное использование Испанской локали\n\ndayjs('2018-05-05').locale('zh-cn').format() // использование упрощённой Китайской локали в конкретном случае\n```\n📚[Интернационализация](https://day.js.org/docs/en/i18n/i18n)\n\n### Плагин\n\nПлагин - это независимый модуль, который может быть добавлен в Day.js с целью расширения функциональных возможностей или добавления новых особенностей.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // загрузка по требованию\n\ndayjs.extend(advancedFormat) // использование плагина\n\ndayjs().format('Q Do k kk X x') // больше доступных форматов\n```\n\n📚[Список плагинов](https://day.js.org/docs/en/plugin/plugin)\n\n## Спонсоры\n\nПоддержите этот проект, став спонсором. Ваш логотип будет показан здесь с ссылкой на ваш веб-сайт. [[Стать спонсором](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://opencollective.com/dayjs/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/3/avatar.svg\"></a>\n\n## Контрибьюторы\n\nЭтот проект существует благодаря всем людям, кто вносит свой вклад в его развитие.\n\nПожалуйста поставьте 💖 звездочку 💖, чтобы поддержать нас. Спасибо.\n\nТакже выражаю благодарность всем нашим спонсорам! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Лицензия\n\nDay.js распространяется под [лицензией MIT](./LICENSE-ru).\n"
  },
  {
    "path": "docs/si/README-si.md",
    "content": "සිංහල | [English](../../README.md) | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md)| [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">නවීන යෙ.ක්‍ර.මු. සමඟින් Moment.js සඳහා <b>කි.බ. 2</b> ක වේගවත් විකල්පයකි</p>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js යනු බොහෝ සෙයින් Moment.js-ගැළපෙන යෙ.ක්‍ර.මු. සහිත නවීන අතිරික්සු සඳහා දින සහ වේලාවන් ප්‍රදර්ශනයට, හැසිරවීමට, වලංගු කිරීමට සහ විග්‍රහ කිරීමට ඉතා කුඩා ජාවාස්ක්‍රිප්ට් එකතුවකි. Moment.js භාවිතා කරන්නේ නම්, Day.js භාවිතා කරන අයුරු ඔබ දැනටමත් දන්නවා.\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n* 🕒 හුරුපුරුදු Moment.js යෙ.ක්‍ර.මු. හා රටා\n* 💪 නිත්‍යයි\n* 🔥 ඈඳීමට හැකිය\n* 🌐 I18n සහාය\n* 📦 කි.බ. 2 ක කුඩා එකතුව\n* 👫 සියළු අතිරික්සු සඳහා සහාය\n\n---\n\n## පටන් ගැනීම\n\n### ප්‍රලේඛනය\n\n[day.js.org](https://day.js.org/) වියමන අඩවියෙහි යෙ.ක්‍ර.මු. සහ වෙනත් ප්‍රලේඛනවල වැඩි විස්තර සොයා ගැනීමට හැකිය.\n\n### ස්ථාපනය\n\n```console\nnpm install dayjs --save\n```\n\n📚[ ස්ථාපන මාර්ගෝපදේශය](https://day.js.org/docs/en/installation/installation)\n\n### යෙ.ක්‍ර.මු.\n\nදින සහ වේලාවන් ප්‍රදර්ශනයට, හැසිරවීමට, වලංගු කිරීමට සහ විග්‍රහ කිරීමට Day.js යෙ.ක්‍ර.මු. භාවිතා කිරීම පහසුය.\n\n```javascript\ndayjs('2018-08-08') // parse\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display\n\ndayjs().set('month', 3).month() // get & set\n\ndayjs().add(1, 'year') // manipulate\n\ndayjs().isBefore(dayjs()) // query\n```\n\n📚[ යෙ.ක්‍ර.මු. යොමුව](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nදේශීයකරණය සඳහා Day.js සුවිශේෂී ලෙස සහය දක්වයි.\n\nනමුත් භාවිතා කරන්නේ නම් මිස ඒවා කිසිවක් ඔබගේ තැනීමට ඇතුළත් නොවේ.\n\n```javascript\nimport 'dayjs/locale/es' // load on demand\n\ndayjs.locale('es') // use Spanish locale globally\n\ndayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance\n```\n📚[ දේශීයකරණය](https://day.js.org/docs/en/i18n/i18n)\n\n### දිගුව\n\nදිගුවක් යනු ක්‍රියාකාරිත්වය විස්තීරණයට හෝ නව විශේෂාංග අඩංගු කිරීමට Day.js වෙත එකතු කළ හැකි ස්වාධීන ඒකකයකි.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand\n\ndayjs.extend(advancedFormat) // use plugin\n\ndayjs().format('Q Do k kk X x') // more available formats\n```\n\n📚[ දිගු ලේඛනය](https://day.js.org/docs/en/plugin/plugin)\n\n## අනුග්‍රාහකයින්\n\nඅනුග්‍රහය දැක්වීමෙන් මෙම ව්‍යාපෘතියට සහාය වන්න. ඔබගේ අඩවියේ සබැඳියක් සමඟ ඔබගේ ලාංඡනය මෙහි පෙන්වනු ඇත.\n\n[[ගිට්හබ් හරහා අනුග්‍රාහකයෙකු වන්න](https://github.com/sponsors/iamkun/)] [[ඕපන්කලෙක්ටිව් හරහා අනුග්‍රාහකයෙකු වන්න](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://www.exoflare.com/open-source/?utm_source=dayjs&utm_campaign=open_source\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/162761622-1407a849-0c41-4591-8aa9-f98114ec2092.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/vendure-ecommerce\" target=\"_blank\"><img width=\"70\" src=\"https://avatars.githubusercontent.com/u/39629390?s=52&v=4\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/Velc\" target=\"_blank\"><img width=\"70\" src=\"https://avatars.githubusercontent.com/u/1551649?s=52&v=4\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/projectdiscovery\" target=\"_blank\"><img width=\"70\" src=\"https://avatars.githubusercontent.com/u/50994705?s=52&v=4\"></a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/datawrapper\" target=\"_blank\"><img width=\"70\" src=\"https://images.opencollective.com/datawrapper/c13e229/logo.png\"></a>\n\n## දායකයින්\n\nමෙම ව්‍යාපෘතිය පවතිනුයේ දායක වූ සියළුම දෙනාට ස්තූති වන්නටය.\n\nඅපට සහාය වීමට 💖 තරුවක් 💖 ලබා දෙන්න. ඔබට තුති.\n\nඒ වගේම අපගේ මූල්‍යදායකයින් සැමට ස්තුතියි! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## බලපත්‍රය\n\n[MIT බලපත්‍රයක්](./LICENSE) යටතේ Day.js නිකුත් කර ඇත.\n"
  },
  {
    "path": "docs/sw/README-sw.md",
    "content": "Swahili | [English](../../README.md) | [Kireno](../pt-br/README-pt-br.md) | [Kichina](../zh-cn/README.zh-CN.md) | [Kijapani](../ja/README-ja.md) | [Kikorea](../ko/README-ko.md) | [Kihispania](../es-es/README-es-es.md) | [Kirusi](../ru/README-ru.md) | [Kituruki](../tr/README-tr.md) | [Sinhala](../si/README-si.md) | [Kiebrania](../he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\" /></a></p>\n<p align=\"center\">Fast <b>2kB</b> mbadala wa Moment.js ukiwa na API zinazofanana na za kisasa</p>\n<p align=\"center\">\n    <a href=\"https://bundlephobia.com/package/dayjs\"><img\n            src=\"https://img.shields.io/bundlephobia/minzip/dayjs?style=flat-square&color=%2345cc11\"\n            alt=\"Gzip Size\"></a>\n             <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js ni Maktaba ya JavaScript ya minimalist ambayo inachanganua, kuthibitisha, kudhibiti, na kuonyesha tarehe na nyakati kwa vivinjari vya kisasa na API inayofanana sana na Moment.js. Ikiwa unatumia Moment.js, tayari unajua jinsi ya kutumia Day.js.\n\n```js\ndayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');\n```\n\n* 🕒 Michoro na API maarufu za Moment.js\n* 💪 Hazibadiliki\n* 🔥 Zinaunganishwa\n* 🌐 Zinaruhusu I18n\n* 📦 Maktaba ndogo ya 2kb\n* 👫 Browser zote zinaruhusu\n\n---\n\n## Kuanza\n\n### Nyaraka\n\nUnaweza kutafuta maelekezo zaidi ya  API na nyaraka zingine kupitia tovuti ya [day.js.org](https://day.js.org/).\n\n### Kusakinisha\n\n```console\nnpm install dayjs --save\n```\n\n📚[Maelekezo ya Kusakinisha](https://day.js.org/docs/en/installation/installation)\n\n### API\n\nNi rahisi kutumia Day.js kupitisha, kuhakiki, kubadili na kuonesha tarehe na mda.\n\n```javascript\ndayjs('2018-08-08') // changanua\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display\n\ndayjs().set('month', 3).month() // chukua na weka\ndayjs().add(1, 'year') // manipulate\n\ndayjs().isBefore(dayjs()) // query\n```\n\n📚[Maelekezo Ya API](https://day.js.org/docs/en/parse/parse)\n\n### I18n\n\nDay.js ina ruhusu kwa internalization.\n\nLakini hakuna hata moja ambayo itawekwa katika utengezaji endapo utatumia.\n\n```javascript\nimport 'dayjs/locale/es' // load on demand\n\ndayjs.locale('es') // use Spanish locale globally\n\ndayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance\n```\n\n📚[Internationalization](https://day.js.org/docs/en/i18n/i18n)\n\n### Zana\n\nZana ya Kujumuisha ni moduli inayojitegemea ambayo inaweza ikaweka katika Day.js ili kuweza kuongeza uwezo au kuongeza sifa.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // Upakiaji kwa Mahitaji\n\ndayjs.extend(advancedFormat) // tumia plugin\n\ndayjs().format('Q Do k kk X x') // njia zaidi zilizopo\n```\n\n📚[Idadi Ya Plugin](https://day.js.org/docs/en/plugin/plugin)\n\n### Trend Zinazoweza Tumika\n\n<a href=\"https://npm-compare.com/moment,dayjs/#timeRange=THREE_YEARS\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img src=\"https://user-images.githubusercontent.com/3455798/270162667-c7bd2ebe-675e-45c6-a2c9-dc67f3b65d6e.png\">\n</a>\n\n## Wafadhili\n\nToa mchango wako kwa huu mradi kwa kuwa mfadhili. Nembo yako itaonekana hapa pamoja na link ya kwenda kwenye tovuti yako.\n\n[[Kuwa mfadhili kupitia GitHub](https://github.com/sponsors/iamkun/)] [[Kuwa mfadhili kupitia OpenCollective](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://toyokumo.co.jp\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/197092231-2367b5eb-1e43-467e-a311-23f7cd97b086.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/ken-swyfft\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/65305317?v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://opencollective.com/sight-and-sound-ministries\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/232316426-cb99b4cf-0ccb-4e73-a6ce-e16dba6aadf4.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://chudovo.com/\" target=\"_blank\">\n  <img width=\"70\" src=\"https://images.opencollective.com/chudovo/3c866f5/logo/256.png?height=256\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://github.com/alan-eu\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/18175329?s=52&v=4\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://www.exoflare.com/open-source/?utm_source=dayjs&utm_campaign=open_source\" target=\"_blank\">\n  <img width=\"70\" src=\"https://user-images.githubusercontent.com/17680888/162761622-1407a849-0c41-4591-8aa9-f98114ec2092.png\">\n</a>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://bestkru.com/\" target=\"_blank\">\n  <img width=\"70\" src=\"https://avatars.githubusercontent.com/u/159320286\" alt=\"BestKru\">\n</a>\n\n\n## Wachangiaji\n\nHuu mradi umefika hapa ulipo hapa shukrani ziende kwa watu wote wanao changia.\n\nTafadhali tupe 💖 nyota/maua 💖 kutuunga mkono sisi.Ahsante.\n\nNa ahsante kwa wafadhili wote! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img width=\"35\" src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<br />\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Leseni\n\nDay.js ipo chini ya kibali cha [leseni ya MTI](./LICENSE).\n"
  },
  {
    "path": "docs/tr/README-tr.md",
    "content": "Türkçe | [English](../../README.md) | [简体中文](../zh-cn/README.zh-CN.md) | [日本語](../ja/README-ja.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [한국어](../ko/README-ko.md) | [Español (España)](../es-es/README-es-es.md) | [Русский](../ru/README-ru.md)| [עברית](./docs/he/README-he.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Aynı modern API ile <b>2kB</b> hızlı bir Moment.js alternatifi</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js, büyük ölçüde Moment.js uyumlu bir API ile modern tarayıcılar için tarih ve saatleri dönüştüren, doğrulayan, işleyen ve görüntüleyen minimalist bir JavaScript kütüphanesidir. Moment.js kullanıyorsanız, Day.js'i nasıl kullanacağınızı zaten biliyorsunuzdur.\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 Benzer Moment.js API & Kalıpları\n- 💪 Değişmez\n- 🔥 Zincirlenebilir\n- 🌐 I18n destekler\n- 📦 2kB boyutunda küçük bir kütaphane\n- 👫 Bütün tarayıcılarda desteklenir\n\n---\n\n# Başlarken\n\n### Dökümantasyon\n\nDaha fazla bilgiye, API ve diğer dökümanlara [day.js.org](https://day.js.org/) websitesinden ulaşabilirsiniz.\n\n## Kurulum\n\n```console\nnpm install dayjs --save\n```\n\n📚[Kurulum Rehberi](https://day.js.org/docs/en/installation/installation)\n\n## API\n\nTarihleri ve saatleri dönüştürmek, doğrulamak, işlemek ve görüntülemek için Day.js API'larını kullanmak kolaydır.\n\n```javascript\ndayjs('2018-08-08') // dönüştürme\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // belirli bir formatta görüntüleme\n\ndayjs()\n  .set('month', 3)\n  .month() // görüntüleme & değer atama\n\ndayjs().add(1, 'year') // değiştirme\n\ndayjs().isBefore(dayjs()) // sorgulama\n```\n\n📚[API Referansı](https://day.js.org/docs/en/parse/parse)\n\n## I18n\n\nDay.js, uluslararasılaştırma için büyük desteğe sahiptir.\n\nAncak siz kullanmadığınız sürece bunların hiçbiri yapınıza dahil edilmeyecektir.\n\n```javascript\nimport 'dayjs/locale/es' // isteğe göre yükle\n\ndayjs.locale('tr') // yerel ayarı Türkçe olarak kullan\n\ndayjs('2018-05-05')\n  .locale('zh-cn')\n  .format() //belirli bir durum için Basitleştirilmiş Çince formatında görüntüleme\n```\n\n📚[Uluslararasılaştırma](https://day.js.org/docs/en/i18n/i18n)\n\n## Eklenti\n\nEklenti, işlevselliği genişletmek veya yeni özellikler eklemek için Day.js'e eklenebilen bağımsız bir modüldür.\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // isteğe göre yükle\n\ndayjs.extend(advancedFormat) // eklentiyi kullan\n\ndayjs().format('Q Do k kk X x') // diğer mevcut formatlar\n```\n\n📚[Eklenti Listesi](https://day.js.org/docs/en/plugin/plugin)\n\n## Sponsorlar\n\nSponsor olarak bu projeye destek olun. Logonuz, web sayfanızın linki ile birlikte burada görünür. [[Sponsor Ol](https://opencollective.com/dayjs#sponsor)]\n\n<a href=\"https://opencollective.com/dayjs/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/dayjs/sponsor/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/sponsor/3/avatar.svg\"></a>\n\n## Katkıda Bulunanlar\n\nBu proje, katkıda bulunan tüm insanlar sayesinde mevcut.\n\nLütfen bize destek olmak için projeye 💖 yıldız 💖 verin. Teşekkürler.\n\nVe tüm destekçilerimize teşekkür ederiz! 🙏\n\n<a href=\"https://opencollective.com/dayjs/backer/0/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/1/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/2/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs/backer/3/website?requireActive=false\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false\"></a>\n<a href=\"https://opencollective.com/dayjs#backers\" target=\"_blank\"><img src=\"https://opencollective.com/dayjs/contributors.svg?width=890\" /></a>\n\n## Lisans\n\nDay.js, bir [MIT Lisansı](../../LICENSE) altında lisanslanmıştır.\n"
  },
  {
    "path": "docs/zh-cn/API-reference.md",
    "content": "### 提醒\n\n文档已迁移至 [https://day.js.org](https://day.js.org)。\n"
  },
  {
    "path": "docs/zh-cn/I18n.md",
    "content": "### 提醒\n\n文档已迁移至 [https://day.js.org](https://day.js.org)。\n"
  },
  {
    "path": "docs/zh-cn/Installation.md",
    "content": "### 提醒\n\n文档已迁移至 [https://day.js.org](https://day.js.org)。\n"
  },
  {
    "path": "docs/zh-cn/Plugin.md",
    "content": "### 提醒\n\n文档已迁移至 [https://day.js.org](https://day.js.org)。\n"
  },
  {
    "path": "docs/zh-cn/README.zh-CN.md",
    "content": "简体中文 | [English](../../README.md) | [日本語](../ja/README-ja.md) | [Português Brasileiro](../pt-br/README-pt-br.md) | [한국어](../ko/README-ko.md) | [Español (España)](../es-es/README-es-es.md) | [Русский](../ru/README-ru.md)\n\n<p align=\"center\"><a href=\"https://day.js.org/zh-CN/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"550\"\n                                                                             src=\"https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png\"\n                                                                             alt=\"Day.js\"></a></p>\n<p align=\"center\">Moment.js 的 <b>2kB</b> 轻量化方案，拥有同样强大的 API</p>\n<br>\n<p align=\"center\">\n    <a href=\"https://unpkg.com/dayjs/dayjs.min.js\"><img\n            src=\"https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square\"\n            alt=\"Gzip Size\"></a>\n    <a href=\"https://www.npmjs.com/package/dayjs\"><img src=\"https://img.shields.io/npm/v/dayjs.svg?style=flat-square\"\n                                                       alt=\"NPM Version\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/actions/workflows/check.yml\"><img\n            src=\"https://img.shields.io/github/actions/workflow/status/iamkun/dayjs/check.yml?style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/iamkun/dayjs\"><img\n            src=\"https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square\" alt=\"Codecov\"></a>\n    <a href=\"https://github.com/iamkun/dayjs/blob/master/LICENSE\"><img\n            src=\"https://img.shields.io/npm/l/dayjs.svg?style=flat-square\" alt=\"License\"></a>\n    <br>\n    <a href=\"https://saucelabs.com/u/dayjs\">\n        <img width=\"750\" src=\"https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png\" alt=\"Sauce Test Status\">\n    </a>\n</p>\n\n> Day.js 是一个轻量的处理时间和日期的 JavaScript 库，和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js\n\n```js\ndayjs()\n  .startOf('month')\n  .add(1, 'day')\n  .set('year', 2018)\n  .format('YYYY-MM-DD HH:mm:ss')\n```\n\n- 🕒 和 Moment.js 相同的 API 和用法\n- 💪 不可变数据 (Immutable)\n- 🔥 支持链式操作 (Chainable)\n- 🌐 国际化 I18n\n- 📦 仅 2kb 大小的微型库\n- 👫 全浏览器兼容\n\n---\n\n## 快速开始\n\n### 文档\n\n访问 [day.js.org](https://day.js.org/) 网站查看更详细的文档\n\n### 安装\n\n```console\nnpm install dayjs --save\n```\n\n📚[安装指南](https://day.js.org/docs/zh-CN/installation/installation)\n\n### API\n\nDay.js 有很多 API 来解析、处理、校验、增减、展示时间和日期\n\n```javascript\ndayjs('2018-08-08') // 解析\n\ndayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // 展示\n\ndayjs()\n  .set('month', 3)\n  .month() // 获取\n\ndayjs().add(1, 'year') // 处理\n\ndayjs().isBefore(dayjs()) // 查询\n```\n\n📚[API 参考](https://day.js.org/docs/zh-CN/parse/parse)\n\n### 国际化 I18n\n\nDay.js 支持国际化\n\n但除非手动加载，多国语言默认是不会被打包到工程里的\n\n```javascript\nimport 'dayjs/locale/es' // 按需加载\n\ndayjs.locale('es') // 全局使用西班牙语\n\ndayjs('2018-05-05')\n  .locale('zh-cn')\n  .format() // 在这个实例上使用简体中文\n```\n\n📚[国际化 I18n](https://day.js.org/docs/zh-CN/i18n/i18n)\n\n### 插件\n\n插件是一些独立的程序，可以给 Day.js 增加新功能和扩展已有功能\n\n```javascript\nimport advancedFormat from 'dayjs/plugin/advancedFormat' // 按需加载插件\n\ndayjs.extend(advancedFormat) // 使用插件\n\ndayjs().format('Q Do k kk X x') // 使用扩展后的API\n```\n\n📚[插件列表](https://day.js.org/docs/zh-CN/plugin/plugin)\n\n## 开源协议\n\nDay.js 遵循 [MIT 开源协议](../../LICENSE).\n"
  },
  {
    "path": "karma.sauce.conf.js",
    "content": "module.exports = function (config) {\n  const batches = [\n    {\n      sl_chrome_26: {\n        base: 'SauceLabs',\n        browserName: 'chrome',\n        version: '26'\n      },\n      sl_chrome: {\n        base: 'SauceLabs',\n        browserName: 'chrome'\n      },\n      sl_firefox_4: {\n        base: 'SauceLabs',\n        browserName: 'firefox',\n        version: '4'\n      },\n      sl_firefox: {\n        base: 'SauceLabs',\n        browserName: 'firefox'\n      },\n      sl_mac_safari_8: {\n        base: 'SauceLabs',\n        browserName: 'safari',\n        version: '8',\n        platform: 'OS X 10.10'\n      },\n      sl_mac_safari: {\n        base: 'SauceLabs',\n        browserName: 'safari',\n        platform: 'macOS 10.13'\n      }\n    },\n    {\n      sl_ie_9: {\n        base: 'SauceLabs',\n        browserName: 'internet explorer',\n        version: '9'\n      },\n      sl_ie: {\n        base: 'SauceLabs',\n        browserName: 'internet explorer'\n      },\n      sl_edge_13: {\n        base: 'SauceLabs',\n        browserName: 'MicrosoftEdge',\n        platform: 'Windows 10',\n        version: '13'\n      },\n      sl_edge: {\n        base: 'SauceLabs',\n        browserName: 'MicrosoftEdge'\n      }\n    },\n    {\n      sl_ios_safari_9: {\n        base: 'SauceLabs',\n        browserName: 'iphone',\n        version: '9.3'\n      },\n      sl_android_4_4: {\n        base: 'SauceLabs',\n        browserName: 'android',\n        version: '4.4'\n      }\n    },\n    {\n      sl_ios_safari: {\n        base: 'SauceLabs',\n        browserName: 'iphone'\n      },\n      sl_android: {\n        base: 'SauceLabs',\n        browserName: 'android'\n      }\n    }\n  ]\n\n  const batch = batches[process.argv[4] || 0]\n  config.set({\n    basePath: '',\n    frameworks: ['jasmine'],\n    files: [\n      'dayjs.min.js',\n      'test/*spec.js'\n    ],\n    reporters: ['dots', 'saucelabs'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_DEBUG,\n    sauceLabs: {\n      // build: 'Manual',\n      testName: 'Day.js'\n    },\n    captureTimeout: 200000, // try fix ios timeout\n    customLaunchers: batch,\n    browsers: Object.keys(batch),\n    singleRun: true\n  })\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"dayjs\",\n  \"version\": \"0.0.0-development\",\n  \"description\": \"2KB immutable date time library alternative to Moment.js with the same modern API \",\n  \"main\": \"dayjs.min.js\",\n  \"types\": \"index.d.ts\",\n  \"scripts\": {\n    \"test\": \"TZ=Pacific/Auckland npm run test-tz && TZ=Europe/London npm run test-tz && TZ=America/Whitehorse npm run test-tz && npm run test-tz && jest --coverage --coverageThreshold='{ \\\"global\\\": { \\\"lines\\\": 100} }'\",\n    \"test-tz\": \"date && jest test/timezone.test --coverage=false\",\n    \"lint\": \"./node_modules/.bin/eslint src/* test/* build/*\",\n    \"prettier\": \"prettier --write \\\"docs/**/*.md\\\"\",\n    \"babel\": \"cross-env BABEL_ENV=build babel src --out-dir esm --copy-files && node build/esm\",\n    \"build\": \"cross-env BABEL_ENV=build node build && npm run size\",\n    \"sauce\": \"npx karma start karma.sauce.conf.js\",\n    \"test:sauce\": \"npm run sauce -- 0 && npm run sauce -- 1 && npm run sauce -- 2  && npm run sauce -- 3\",\n    \"size\": \"size-limit && gzip-size dayjs.min.js\"\n  },\n  \"pre-commit\": [\n    \"lint\"\n  ],\n  \"size-limit\": [\n    {\n      \"limit\": \"2.99 KB\",\n      \"path\": \"dayjs.min.js\"\n    }\n  ],\n  \"jest\": {\n    \"roots\": [\n      \"test\"\n    ],\n    \"testRegex\": \"test/(.*?/)?.*test.js$\",\n    \"testURL\": \"http://localhost\",\n    \"coverageDirectory\": \"./coverage/\",\n    \"collectCoverage\": true,\n    \"collectCoverageFrom\": [\n      \"src/**/*\"\n    ]\n  },\n  \"keywords\": [\n    \"dayjs\",\n    \"date\",\n    \"time\",\n    \"immutable\",\n    \"moment\"\n  ],\n  \"author\": \"iamkun\",\n  \"license\": \"MIT\",\n  \"homepage\": \"https://day.js.org\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/iamkun/dayjs.git\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.0.0-beta.44\",\n    \"@babel/core\": \"^7.0.0-beta.44\",\n    \"@babel/node\": \"^7.0.0-beta.44\",\n    \"@babel/preset-env\": \"^7.0.0-beta.44\",\n    \"@semantic-release/github\": \"^11.0.4\",\n    \"babel-core\": \"^7.0.0-bridge.0\",\n    \"babel-jest\": \"^22.4.3\",\n    \"babel-plugin-external-helpers\": \"^6.22.0\",\n    \"cross-env\": \"^5.1.6\",\n    \"eslint\": \"^4.19.1\",\n    \"eslint-config-airbnb-base\": \"^12.1.0\",\n    \"eslint-plugin-import\": \"^2.10.0\",\n    \"eslint-plugin-jest\": \"^21.15.0\",\n    \"gzip-size-cli\": \"^2.1.0\",\n    \"jasmine-core\": \"^2.99.1\",\n    \"jest\": \"^22.4.3\",\n    \"karma\": \"^2.0.2\",\n    \"karma-jasmine\": \"^1.1.2\",\n    \"karma-sauce-launcher\": \"^1.1.0\",\n    \"mockdate\": \"^2.0.2\",\n    \"moment\": \"2.29.2\",\n    \"moment-timezone\": \"0.5.31\",\n    \"ncp\": \"^2.0.0\",\n    \"pre-commit\": \"^1.2.2\",\n    \"prettier\": \"^1.16.1\",\n    \"rollup\": \"^2.45.1\",\n    \"rollup-plugin-babel\": \"^4.4.0\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"size-limit\": \"^0.18.0\",\n    \"typescript\": \"^2.8.3\"\n  }\n}\n"
  },
  {
    "path": "patches/@semantic-release+github+11.0.4.patch",
    "content": "diff --git a/node_modules/@semantic-release/github/lib/success.js b/node_modules/@semantic-release/github/lib/success.js\nindex 29c8def..7e57161 100644\n--- a/node_modules/@semantic-release/github/lib/success.js\n+++ b/node_modules/@semantic-release/github/lib/success.js\n@@ -118,6 +118,8 @@ export default async function success(pluginConfig, context, { Octokit }) {\n     const uniqueAssociatedPRs = uniqBy(flatten(associatedPRs), \"number\");\n \n     const prs = await pFilter(uniqueAssociatedPRs, async ({ number }) => {\n+      console.log('number: ', number);\n+      if (number < 2000) return false;\n       const commits = await octokit.paginate(\n         \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n         {\n"
  },
  {
    "path": "prettier.config.js",
    "content": "module.exports = {\n  useTabs: false,\n  printWidth: 80,\n  singleQuote: true,\n  trailingComma: 'none',\n  semi: false\n}\n"
  },
  {
    "path": "src/constant.js",
    "content": "export const SECONDS_A_MINUTE = 60\nexport const SECONDS_A_HOUR = SECONDS_A_MINUTE * 60\nexport const SECONDS_A_DAY = SECONDS_A_HOUR * 24\nexport const SECONDS_A_WEEK = SECONDS_A_DAY * 7\n\nexport const MILLISECONDS_A_SECOND = 1e3\nexport const MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND\nexport const MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND\nexport const MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND\nexport const MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND\n\n// English locales\nexport const MS = 'millisecond'\nexport const S = 'second'\nexport const MIN = 'minute'\nexport const H = 'hour'\nexport const D = 'day'\nexport const W = 'week'\nexport const M = 'month'\nexport const Q = 'quarter'\nexport const Y = 'year'\nexport const DATE = 'date'\n\nexport const FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ'\n\nexport const INVALID_DATE_STRING = 'Invalid Date'\n\n// regex\nexport const REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/\nexport const REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g\n"
  },
  {
    "path": "src/index.js",
    "content": "import * as C from './constant'\nimport en from './locale/en'\nimport U from './utils'\n\nlet L = 'en' // global locale\nconst Ls = {} // global loaded locale\nLs[L] = en\n\nconst IS_DAYJS = '$isDayjsObject'\n\n// eslint-disable-next-line no-use-before-define\nconst isDayjs = d => d instanceof Dayjs || !!(d && d[IS_DAYJS])\n\nconst parseLocale = (preset, object, isLocal) => {\n  let l\n  if (!preset) return L\n  if (typeof preset === 'string') {\n    const presetLower = preset.toLowerCase()\n    if (Ls[presetLower]) {\n      l = presetLower\n    }\n    if (object) {\n      Ls[presetLower] = object\n      l = presetLower\n    }\n    const presetSplit = preset.split('-')\n    if (!l && presetSplit.length > 1) {\n      return parseLocale(presetSplit[0])\n    }\n  } else {\n    const { name } = preset\n    Ls[name] = preset\n    l = name\n  }\n  if (!isLocal && l) L = l\n  return l || (!isLocal && L)\n}\n\nconst dayjs = function (date, c) {\n  if (isDayjs(date)) {\n    return date.clone()\n  }\n  // eslint-disable-next-line no-nested-ternary\n  const cfg = typeof c === 'object' ? c : {}\n  cfg.date = date\n  cfg.args = arguments// eslint-disable-line prefer-rest-params\n  return new Dayjs(cfg) // eslint-disable-line no-use-before-define\n}\n\nconst wrapper = (date, instance) =>\n  dayjs(date, {\n    locale: instance.$L,\n    utc: instance.$u,\n    x: instance.$x,\n    $offset: instance.$offset // todo: refactor; do not use this.$offset in you code\n  })\n\nconst Utils = U // for plugin use\nUtils.l = parseLocale\nUtils.i = isDayjs\nUtils.w = wrapper\n\nconst parseDate = (cfg) => {\n  const { date, utc } = cfg\n  if (date === null) return new Date(NaN) // null is invalid\n  if (Utils.u(date)) return new Date() // today\n  if (date instanceof Date) return new Date(date)\n  if (typeof date === 'string' && !/Z$/i.test(date)) {\n    const d = date.match(C.REGEX_PARSE)\n    if (d) {\n      const m = d[2] - 1 || 0\n      const ms = (d[7] || '0').substring(0, 3)\n      if (utc) {\n        return new Date(Date.UTC(d[1], m, d[3]\n          || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms))\n      }\n      return new Date(d[1], m, d[3]\n        || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms)\n    }\n  }\n\n  return new Date(date) // everything else\n}\n\nclass Dayjs {\n  constructor(cfg) {\n    this.$L = parseLocale(cfg.locale, null, true)\n    this.parse(cfg) // for plugin\n    this.$x = this.$x || cfg.x || {}\n    this[IS_DAYJS] = true\n  }\n\n  parse(cfg) {\n    this.$d = parseDate(cfg)\n    this.init()\n  }\n\n  init() {\n    const { $d } = this\n    this.$y = $d.getFullYear()\n    this.$M = $d.getMonth()\n    this.$D = $d.getDate()\n    this.$W = $d.getDay()\n    this.$H = $d.getHours()\n    this.$m = $d.getMinutes()\n    this.$s = $d.getSeconds()\n    this.$ms = $d.getMilliseconds()\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  $utils() {\n    return Utils\n  }\n\n  isValid() {\n    return !(this.$d.toString() === C.INVALID_DATE_STRING)\n  }\n\n  isSame(that, units) {\n    const other = dayjs(that)\n    return this.startOf(units) <= other && other <= this.endOf(units)\n  }\n\n  isAfter(that, units) {\n    return dayjs(that) < this.startOf(units)\n  }\n\n  isBefore(that, units) {\n    return this.endOf(units) < dayjs(that)\n  }\n\n  $g(input, get, set) {\n    if (Utils.u(input)) return this[get]\n    return this.set(set, input)\n  }\n\n  unix() {\n    return Math.floor(this.valueOf() / 1000)\n  }\n\n  valueOf() {\n    // timezone(hour) * 60 * 60 * 1000 => ms\n    return this.$d.getTime()\n  }\n\n  startOf(units, startOf) { // startOf -> endOf\n    const isStartOf = !Utils.u(startOf) ? startOf : true\n    const unit = Utils.p(units)\n    const instanceFactory = (d, m) => {\n      const ins = Utils.w(this.$u ?\n        Date.UTC(this.$y, m, d) : new Date(this.$y, m, d), this)\n      return isStartOf ? ins : ins.endOf(C.D)\n    }\n    const instanceFactorySet = (method, slice) => {\n      const argumentStart = [0, 0, 0, 0]\n      const argumentEnd = [23, 59, 59, 999]\n      return Utils.w(this.toDate()[method].apply( // eslint-disable-line prefer-spread\n        this.toDate('s'),\n        (isStartOf ? argumentStart : argumentEnd).slice(slice)\n      ), this)\n    }\n    const { $W, $M, $D } = this\n    const utcPad = `set${this.$u ? 'UTC' : ''}`\n    switch (unit) {\n      case C.Y:\n        return isStartOf ? instanceFactory(1, 0) :\n          instanceFactory(31, 11)\n      case C.M:\n        return isStartOf ? instanceFactory(1, $M) :\n          instanceFactory(0, $M + 1)\n      case C.W: {\n        const weekStart = this.$locale().weekStart || 0\n        const gap = ($W < weekStart ? $W + 7 : $W) - weekStart\n        return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M)\n      }\n      case C.D:\n      case C.DATE:\n        return instanceFactorySet(`${utcPad}Hours`, 0)\n      case C.H:\n        return instanceFactorySet(`${utcPad}Minutes`, 1)\n      case C.MIN:\n        return instanceFactorySet(`${utcPad}Seconds`, 2)\n      case C.S:\n        return instanceFactorySet(`${utcPad}Milliseconds`, 3)\n      default:\n        return this.clone()\n    }\n  }\n\n  endOf(arg) {\n    return this.startOf(arg, false)\n  }\n\n  $set(units, int) { // private set\n    const unit = Utils.p(units)\n    const utcPad = `set${this.$u ? 'UTC' : ''}`\n    const name = {\n      [C.D]: `${utcPad}Date`,\n      [C.DATE]: `${utcPad}Date`,\n      [C.M]: `${utcPad}Month`,\n      [C.Y]: `${utcPad}FullYear`,\n      [C.H]: `${utcPad}Hours`,\n      [C.MIN]: `${utcPad}Minutes`,\n      [C.S]: `${utcPad}Seconds`,\n      [C.MS]: `${utcPad}Milliseconds`\n    }[unit]\n    const arg = unit === C.D ? this.$D + (int - this.$W) : int\n\n    if (unit === C.M || unit === C.Y) {\n      // clone is for badMutable plugin\n      const date = this.clone().set(C.DATE, 1)\n      date.$d[name](arg)\n      date.init()\n      this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d\n    } else if (name) this.$d[name](arg)\n\n    this.init()\n    return this\n  }\n\n  set(string, int) {\n    return this.clone().$set(string, int)\n  }\n\n  get(unit) {\n    return this[Utils.p(unit)]()\n  }\n\n  add(number, units) {\n    number = Number(number) // eslint-disable-line no-param-reassign\n    const unit = Utils.p(units)\n    const instanceFactorySet = (n) => {\n      const d = dayjs(this)\n      return Utils.w(d.date(d.date() + Math.round(n * number)), this)\n    }\n    if (unit === C.M) {\n      return this.set(C.M, this.$M + number)\n    }\n    if (unit === C.Y) {\n      return this.set(C.Y, this.$y + number)\n    }\n    if (unit === C.D) {\n      return instanceFactorySet(1)\n    }\n    if (unit === C.W) {\n      return instanceFactorySet(7)\n    }\n    const step = {\n      [C.MIN]: C.MILLISECONDS_A_MINUTE,\n      [C.H]: C.MILLISECONDS_A_HOUR,\n      [C.S]: C.MILLISECONDS_A_SECOND\n    }[unit] || 1 // ms\n\n    const nextTimeStamp = this.$d.getTime() + (number * step)\n    return Utils.w(nextTimeStamp, this)\n  }\n\n  subtract(number, string) {\n    return this.add(number * -1, string)\n  }\n\n  format(formatStr) {\n    const locale = this.$locale()\n\n    if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING\n\n    const str = formatStr || C.FORMAT_DEFAULT\n    const zoneStr = Utils.z(this)\n    const { $H, $m, $M } = this\n    const {\n      weekdays, months, meridiem\n    } = locale\n    const getShort = (arr, index, full, length) => (\n      (arr && (arr[index] || arr(this, str))) || full[index].slice(0, length)\n    )\n    const get$H = num => (\n      Utils.s($H % 12 || 12, num, '0')\n    )\n\n    const meridiemFunc = meridiem || ((hour, minute, isLowercase) => {\n      const m = (hour < 12 ? 'AM' : 'PM')\n      return isLowercase ? m.toLowerCase() : m\n    })\n\n    const matches = (match) => {\n      switch (match) {\n        case 'YY':\n          return String(this.$y).slice(-2)\n        case 'YYYY':\n          return Utils.s(this.$y, 4, '0')\n        case 'M':\n          return $M + 1\n        case 'MM':\n          return Utils.s($M + 1, 2, '0')\n        case 'MMM':\n          return getShort(locale.monthsShort, $M, months, 3)\n        case 'MMMM':\n          return getShort(months, $M)\n        case 'D':\n          return this.$D\n        case 'DD':\n          return Utils.s(this.$D, 2, '0')\n        case 'd':\n          return String(this.$W)\n        case 'dd':\n          return getShort(locale.weekdaysMin, this.$W, weekdays, 2)\n        case 'ddd':\n          return getShort(locale.weekdaysShort, this.$W, weekdays, 3)\n        case 'dddd':\n          return weekdays[this.$W]\n        case 'H':\n          return String($H)\n        case 'HH':\n          return Utils.s($H, 2, '0')\n        case 'h':\n          return get$H(1)\n        case 'hh':\n          return get$H(2)\n        case 'a':\n          return meridiemFunc($H, $m, true)\n        case 'A':\n          return meridiemFunc($H, $m, false)\n        case 'm':\n          return String($m)\n        case 'mm':\n          return Utils.s($m, 2, '0')\n        case 's':\n          return String(this.$s)\n        case 'ss':\n          return Utils.s(this.$s, 2, '0')\n        case 'SSS':\n          return Utils.s(this.$ms, 3, '0')\n        case 'Z':\n          return zoneStr // 'ZZ' logic below\n        default:\n          break\n      }\n      return null\n    }\n\n    return str.replace(C.REGEX_FORMAT, (match, $1) => $1 || matches(match) || zoneStr.replace(':', '')) // 'ZZ'\n  }\n\n  utcOffset() {\n    // Because a bug at FF24, we're rounding the timezone offset around 15 minutes\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(this.$d.getTimezoneOffset() / 15) * 15\n  }\n\n  diff(input, units, float) {\n    const unit = Utils.p(units)\n    const that = dayjs(input)\n    const zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE\n    const diff = this - that\n    const getMonth = () => Utils.m(this, that)\n\n    let result\n    switch (unit) {\n      case C.Y:\n        result = getMonth() / 12\n        break\n      case C.M:\n        result = getMonth()\n        break\n      case C.Q:\n        result = getMonth() / 3\n        break\n      case C.W:\n        result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK\n        break\n      case C.D:\n        result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY\n        break\n      case C.H:\n        result = diff / C.MILLISECONDS_A_HOUR\n        break\n      case C.MIN:\n        result = diff / C.MILLISECONDS_A_MINUTE\n        break\n      case C.S:\n        result = diff / C.MILLISECONDS_A_SECOND\n        break\n      default:\n        result = diff // milliseconds\n        break\n    }\n\n    return float ? result : Utils.a(result)\n  }\n\n  daysInMonth() {\n    return this.endOf(C.M).$D\n  }\n\n  $locale() { // get locale object\n    return Ls[this.$L]\n  }\n\n  locale(preset, object) {\n    if (!preset) return this.$L\n    const that = this.clone()\n    const nextLocaleName = parseLocale(preset, object, true)\n    if (nextLocaleName) that.$L = nextLocaleName\n    return that\n  }\n\n  clone() {\n    return Utils.w(this.$d, this)\n  }\n\n  toDate() {\n    return new Date(this.valueOf())\n  }\n\n  toJSON() {\n    return this.isValid() ? this.toISOString() : null\n  }\n\n  toISOString() {\n    // ie 8 return\n    // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)\n    // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')\n    return this.$d.toISOString()\n  }\n\n  toString() {\n    return this.$d.toUTCString()\n  }\n}\n\nconst proto = Dayjs.prototype\ndayjs.prototype = proto;\n[\n  ['$ms', C.MS],\n  ['$s', C.S],\n  ['$m', C.MIN],\n  ['$H', C.H],\n  ['$W', C.D],\n  ['$M', C.M],\n  ['$y', C.Y],\n  ['$D', C.DATE]\n].forEach((g) => {\n  proto[g[1]] = function (input) {\n    return this.$g(input, g[0], g[1])\n  }\n})\n\ndayjs.extend = (plugin, option) => {\n  if (!plugin.$i) { // install plugin only once\n    plugin(option, Dayjs, dayjs)\n    plugin.$i = true\n  }\n  return dayjs\n}\n\ndayjs.locale = parseLocale\n\ndayjs.isDayjs = isDayjs\n\ndayjs.unix = timestamp => (\n  dayjs(timestamp * 1e3)\n)\n\ndayjs.en = Ls[L]\ndayjs.Ls = Ls\ndayjs.p = {}\nexport default dayjs\n"
  },
  {
    "path": "src/locale/af.js",
    "content": "// Afrikaans [af]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'af',\n  weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n  months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n  weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'oor %s',\n    past: '%s gelede',\n    s: \"'n paar sekondes\",\n    m: \"'n minuut\",\n    mm: '%d minute',\n    h: \"'n uur\",\n    hh: '%d ure',\n    d: \"'n dag\",\n    dd: '%d dae',\n    M: \"'n maand\",\n    MM: '%d maande',\n    y: \"'n jaar\",\n    yy: '%d jaar'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/am.js",
    "content": "// Amharic [am]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'am',\n  weekdays: 'እሑድ_ሰኞ_ማክሰኞ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'),\n  weekdaysShort: 'እሑድ_ሰኞ_ማክሰ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'),\n  weekdaysMin: 'እሑ_ሰኞ_ማክ_ረቡ_ሐሙ_አር_ቅዳ'.split('_'),\n  months: 'ጃንዋሪ_ፌብሯሪ_ማርች_ኤፕሪል_ሜይ_ጁን_ጁላይ_ኦገስት_ሴፕቴምበር_ኦክቶበር_ኖቬምበር_ዲሴምበር'.split('_'),\n  monthsShort: 'ጃንዋ_ፌብሯ_ማርች_ኤፕሪ_ሜይ_ጁን_ጁላይ_ኦገስ_ሴፕቴ_ኦክቶ_ኖቬም_ዲሴም'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: 'በ%s',\n    past: '%s በፊት',\n    s: 'ጥቂት ሰከንዶች',\n    m: 'አንድ ደቂቃ',\n    mm: '%d ደቂቃዎች',\n    h: 'አንድ ሰዓት',\n    hh: '%d ሰዓታት',\n    d: 'አንድ ቀን',\n    dd: '%d ቀናት',\n    M: 'አንድ ወር',\n    MM: '%d ወራት',\n    y: 'አንድ ዓመት',\n    yy: '%d ዓመታት'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'MMMM D ፣ YYYY',\n    LLL: 'MMMM D ፣ YYYY HH:mm',\n    LLLL: 'dddd ፣ MMMM D ፣ YYYY HH:mm'\n  },\n  ordinal: n => `${n}ኛ`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ar-dz.js",
    "content": "// Arabic (Algeria) [ar-dz]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-dz',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysMin: 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar-iq.js",
    "content": "//  Arabic (Iraq) [ar-iq]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-iq',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ar-kw.js",
    "content": "// Arabic (Kuwait) [ar-kw]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-kw',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n  weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar-ly.js",
    "content": "// Arabic (Lybia) [ar-ly]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-ly',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekStart: 6,\n  weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'D/‏M/‏YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar-ma.js",
    "content": "// Arabic (Morocco) [ar-ma]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-ma',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n  weekStart: 6,\n  weekdaysShort: 'احد_إثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar-sa.js",
    "content": "// Arabic (Saudi Arabia) [ar-sa]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-sa',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar-tn.js",
    "content": "//  Arabic (Tunisia) [ar-tn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ar-tn',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n  monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'في %s',\n    past: 'منذ %s',\n    s: 'ثوان',\n    m: 'دقيقة',\n    mm: '%d دقائق',\n    h: 'ساعة',\n    hh: '%d ساعات',\n    d: 'يوم',\n    dd: '%d أيام',\n    M: 'شهر',\n    MM: '%d أشهر',\n    y: 'سنة',\n    yy: '%d سنوات'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ar.js",
    "content": "// Arabic [ar]\nimport dayjs from 'dayjs'\n\nconst months = 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_')\n\nconst symbolMap = {\n  1: '١',\n  2: '٢',\n  3: '٣',\n  4: '٤',\n  5: '٥',\n  6: '٦',\n  7: '٧',\n  8: '٨',\n  9: '٩',\n  0: '٠'\n}\n\nconst numberMap = {\n  '١': '1',\n  '٢': '2',\n  '٣': '3',\n  '٤': '4',\n  '٥': '5',\n  '٦': '6',\n  '٧': '7',\n  '٨': '8',\n  '٩': '9',\n  '٠': '0'\n}\n\nconst fromArabNumeralsRegex = /[١٢٣٤٥٦٧٨٩٠]/g\nconst fromArabComaRegex = /،/g\n\nconst toArabNumeralsRegex = /\\d/g\nconst toArabComaRegex = /,/g\n\nconst locale = {\n  name: 'ar',\n  weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n  weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n  weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n  months,\n  monthsShort: months,\n  weekStart: 6,\n  meridiem: hour => (hour > 12 ? 'م' : 'ص'),\n  relativeTime: {\n    future: 'بعد %s',\n    past: 'منذ %s',\n    s: 'ثانية واحدة',\n    m: 'دقيقة واحدة',\n    mm: '%d دقائق',\n    h: 'ساعة واحدة',\n    hh: '%d ساعات',\n    d: 'يوم واحد',\n    dd: '%d أيام',\n    M: 'شهر واحد',\n    MM: '%d أشهر',\n    y: 'عام واحد',\n    yy: '%d أعوام'\n  },\n  preparse(string) {\n    return string\n      .replace(\n        fromArabNumeralsRegex,\n        match => numberMap[match]\n      )\n      .replace(fromArabComaRegex, ',')\n  },\n  postformat(string) {\n    return string\n      .replace(toArabNumeralsRegex, match => symbolMap[match])\n      .replace(toArabComaRegex, '،')\n  },\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'D/‏M/‏YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/az.js",
    "content": "// Azerbaijani [az]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'az',\n  weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n  weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n  weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n  months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n  monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY г.',\n    LLL: 'D MMMM YYYY г., H:mm',\n    LLLL: 'dddd, D MMMM YYYY г., H:mm'\n  },\n  relativeTime: {\n    future: '%s sonra',\n    past: '%s əvvəl',\n    s: 'bir neçə saniyə',\n    m: 'bir dəqiqə',\n    mm: '%d dəqiqə',\n    h: 'bir saat',\n    hh: '%d saat',\n    d: 'bir gün',\n    dd: '%d gün',\n    M: 'bir ay',\n    MM: '%d ay',\n    y: 'bir il',\n    yy: '%d il'\n  },\n  ordinal: n => n\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/be.js",
    "content": "// Belarusian [be]\nimport dayjs from 'dayjs'\n\nconst monthFormat = 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')\nconst monthStandalone = 'студзень_лютый_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n\nconst monthShortFormat = 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж.'.split('_')\nconst monthShortStandalone = 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_')\n\nconst MONTHS_IN_FORMAT = /D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/\n\nfunction plural(word, num) {\n  const forms = word.split('_')\n  return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]) // eslint-disable-line\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n  const format = {\n    ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n    mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n    hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n    dd: 'дзень_дні_дзён',\n    MM: 'месяц_месяцы_месяцаў',\n    yy: 'год_гады_гадоў'\n  }\n  if (key === 'm') {\n    return withoutSuffix ? 'хвіліна' : 'хвіліну'\n  } else if (key === 'h') {\n    return withoutSuffix ? 'гадзіна' : 'гадзіну'\n  }\n\n  return `${number} ${plural(format[key], +number)}`\n}\n\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst monthsShort = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthShortFormat[dayjsInstance.month()]\n  }\n  return monthShortStandalone[dayjsInstance.month()]\n}\nmonthsShort.s = monthShortStandalone\nmonthsShort.f = monthShortFormat\n\nconst locale = {\n  name: 'be',\n  weekdays: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n  weekdaysShort: 'няд_пнд_аўт_сер_чцв_пят_суб'.split('_'),\n  weekdaysMin: 'нд_пн_аў_ср_чц_пт_сб'.split('_'),\n  months,\n  monthsShort,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY г.',\n    LLL: 'D MMMM YYYY г., HH:mm',\n    LLLL: 'dddd, D MMMM YYYY г., HH:mm'\n  },\n  relativeTime: {\n    future: 'праз %s',\n    past: '%s таму',\n    s: 'некалькі секунд',\n    m: relativeTimeWithPlural,\n    mm: relativeTimeWithPlural,\n    h: relativeTimeWithPlural,\n    hh: relativeTimeWithPlural,\n    d: 'дзень',\n    dd: relativeTimeWithPlural,\n    M: 'месяц',\n    MM: relativeTimeWithPlural,\n    y: 'год',\n    yy: relativeTimeWithPlural\n  },\n  ordinal: n => n,\n  meridiem: (hour) => {\n    if (hour < 4) {\n      return 'ночы'\n    } else if (hour < 12) {\n      return 'раніцы'\n    } else if (hour < 17) {\n      return 'дня'\n    }\n    return 'вечара'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bg.js",
    "content": "// Bulgarian [bg]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'bg',\n  weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n  weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n  weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n  months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n  monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n  weekStart: 1,\n  ordinal: (n) => {\n    const last2Digits = n % 100\n    if (last2Digits > 10 && last2Digits < 20) {\n      return `${n}-ти`\n    }\n\n    const lastDigit = n % 10\n    if (lastDigit === 1) {\n      return `${n}-ви`\n    } else if (lastDigit === 2) {\n      return `${n}-ри`\n    } else if (lastDigit === 7 || lastDigit === 8) {\n      return `${n}-ми`\n    }\n\n    return `${n}-ти`\n  },\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'D.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY H:mm',\n    LLLL: 'dddd, D MMMM YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'след %s',\n    past: 'преди %s',\n    s: 'няколко секунди',\n    m: 'минута',\n    mm: '%d минути',\n    h: 'час',\n    hh: '%d часа',\n    d: 'ден',\n    dd: '%d дена',\n    M: 'месец',\n    MM: '%d месеца',\n    y: 'година',\n    yy: '%d години'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bi.js",
    "content": "// Bislama [bi]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'bi',\n  weekdays: 'Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade'.split('_'),\n  months: 'Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'San_Man_Tus_Wen_Tos_Frae_Sar'.split('_'),\n  monthsShort: 'Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis'.split('_'),\n  weekdaysMin: 'San_Ma_Tu_We_To_Fr_Sar'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'lo %s',\n    past: '%s bifo',\n    s: 'sam seken',\n    m: 'wan minit',\n    mm: '%d minit',\n    h: 'wan haoa',\n    hh: '%d haoa',\n    d: 'wan dei',\n    dd: '%d dei',\n    M: 'wan manis',\n    MM: '%d manis',\n    y: 'wan yia',\n    yy: '%d yia'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bm.js",
    "content": "// Bambara [bm]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'bm',\n  weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n  months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n  monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n  weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'MMMM [tile] D [san] YYYY',\n    LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n    LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n  },\n  relativeTime: {\n    future: '%s kɔnɔ',\n    past: 'a bɛ %s bɔ',\n    s: 'sanga dama dama',\n    m: 'miniti kelen',\n    mm: 'miniti %d',\n    h: 'lɛrɛ kelen',\n    hh: 'lɛrɛ %d',\n    d: 'tile kelen',\n    dd: 'tile %d',\n    M: 'kalo kelen',\n    MM: 'kalo %d',\n    y: 'san kelen',\n    yy: 'san %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/bn-bd.js",
    "content": "// Bengali (Bangladesh) [bn-bd]\nimport dayjs from 'dayjs'\n\nconst symbolMap = {\n  1: '১',\n  2: '২',\n  3: '৩',\n  4: '৪',\n  5: '৫',\n  6: '৬',\n  7: '৭',\n  8: '৮',\n  9: '৯',\n  0: '০'\n}\n\nconst numberMap = {\n  '১': '1',\n  '২': '2',\n  '৩': '3',\n  '৪': '4',\n  '৫': '5',\n  '৬': '6',\n  '৭': '7',\n  '৮': '8',\n  '৯': '9',\n  '০': '0'\n}\n\nconst locale = {\n  name: 'bn-bd',\n  weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n  months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n  weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n  monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n  weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n  weekStart: 0,\n  preparse(string) {\n    return string.replace(/[১২৩৪৫৬৭৮৯০]/g, match => numberMap[match])\n  },\n  postformat(string) {\n    return string.replace(/\\d/g, match => symbolMap[match])\n  },\n  ordinal: (n) => {\n    const s = ['ই', 'লা', 'রা', 'ঠা', 'শে']\n    const v = n % 100\n    return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`\n  },\n  formats: {\n    LT: 'A h:mm সময়',\n    LTS: 'A h:mm:ss সময়',\n    L: 'DD/MM/YYYY খ্রিস্টাব্দ',\n    LL: 'D MMMM YYYY খ্রিস্টাব্দ',\n    LLL: 'D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়',\n    LLLL: 'dddd, D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়'\n  },\n  meridiem: hour =>\n  /* eslint-disable no-nested-ternary */\n    (hour < 4\n      ? 'রাত'\n      : hour < 6\n        ? 'ভোর'\n        : hour < 12\n          ? 'সকাল'\n          : hour < 15\n            ? 'দুপুর'\n            : hour < 18\n              ? 'বিকাল'\n              : hour < 20\n                ? 'সন্ধ্যা'\n                : 'রাত'),\n  relativeTime: {\n    future: '%s পরে',\n    past: '%s আগে',\n    s: 'কয়েক সেকেন্ড',\n    m: 'এক মিনিট',\n    mm: '%d মিনিট',\n    h: 'এক ঘন্টা',\n    hh: '%d ঘন্টা',\n    d: 'এক দিন',\n    dd: '%d দিন',\n    M: 'এক মাস',\n    MM: '%d মাস',\n    y: 'এক বছর',\n    yy: '%d বছর'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bn.js",
    "content": "// Bengali [bn]\nimport dayjs from 'dayjs'\n\nconst symbolMap = {\n  1: '১',\n  2: '২',\n  3: '৩',\n  4: '৪',\n  5: '৫',\n  6: '৬',\n  7: '৭',\n  8: '৮',\n  9: '৯',\n  0: '০'\n}\n\nconst numberMap = {\n  '১': '1',\n  '২': '2',\n  '৩': '3',\n  '৪': '4',\n  '৫': '5',\n  '৬': '6',\n  '৭': '7',\n  '৮': '8',\n  '৯': '9',\n  '০': '0'\n}\n\nconst locale = {\n  name: 'bn',\n  weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n  months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n  weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n  monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n  weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n  preparse(string) {\n    return string.replace(/[১২৩৪৫৬৭৮৯০]/g, match => numberMap[match])\n  },\n  postformat(string) {\n    return string.replace(/\\d/g, match => symbolMap[match])\n  },\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm সময়',\n    LTS: 'A h:mm:ss সময়',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm সময়',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'\n  },\n  relativeTime: {\n    future: '%s পরে',\n    past: '%s আগে',\n    s: 'কয়েক সেকেন্ড',\n    m: 'এক মিনিট',\n    mm: '%d মিনিট',\n    h: 'এক ঘন্টা',\n    hh: '%d ঘন্টা',\n    d: 'এক দিন',\n    dd: '%d দিন',\n    M: 'এক মাস',\n    MM: '%d মাস',\n    y: 'এক বছর',\n    yy: '%d বছর'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bo.js",
    "content": "// Tibetan [bo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'bo',\n  weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n  weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n  weekdaysMin: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n  months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n  monthsShort: 'ཟླ་དང་པོ_ཟླ་གཉིས་པ_ཟླ་གསུམ་པ_ཟླ་བཞི་པ_ཟླ་ལྔ་པ_ཟླ་དྲུག་པ_ཟླ་བདུན་པ_ཟླ་བརྒྱད་པ_ཟླ་དགུ་པ_ཟླ་བཅུ་པ_ཟླ་བཅུ་གཅིག་པ_ཟླ་བཅུ་གཉིས་པ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm',\n    LTS: 'A h:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm'\n  },\n  relativeTime: {\n    future: '%s ལ་',\n    past: '%s སྔོན་ལ་',\n    s: 'ཏོག་ཙམ་',\n    m: 'སྐར་མ་གཅིག་',\n    mm: 'སྐར་མ་ %d',\n    h: 'ཆུ་ཚོད་གཅིག་',\n    hh: 'ཆུ་ཚོད་ %d',\n    d: 'ཉིན་གཅིག་',\n    dd: 'ཉིན་ %d',\n    M: 'ཟླ་བ་གཅིག་',\n    MM: 'ཟླ་བ་ %d',\n    y: 'ལོ་གཅིག་',\n    yy: 'ལོ་ %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/br.js",
    "content": "// Breton [br]\nimport dayjs from 'dayjs'\n\nfunction lastNumber(number) {\n  if (number > 9) {\n    return lastNumber(number % 10)\n  }\n  return number\n}\nfunction softMutation(text) {\n  const mutationTable = {\n    m: 'v',\n    b: 'v',\n    d: 'z'\n  }\n  return mutationTable[text.charAt(0)] + text.substring(1)\n}\nfunction mutation(text, number) {\n  if (number === 2) {\n    return softMutation(text)\n  }\n  return text\n}\nfunction relativeTimeWithMutation(number, withoutSuffix, key) {\n  const format = {\n    mm: 'munutenn',\n    MM: 'miz',\n    dd: 'devezh'\n  }\n  return `${number} ${mutation(format[key], number)}`\n}\nfunction specialMutationForYears(number) {\n  /* istanbul ignore next line */\n  switch (lastNumber(number)) {\n    case 1:\n    case 3:\n    case 4:\n    case 5:\n    case 9:\n      return `${number} bloaz`\n    default:\n      return `${number} vloaz`\n  }\n}\n\nconst locale = {\n  name: 'br',\n  weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n  months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n  monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n  weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'h[e]mm A',\n    LTS: 'h[e]mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D [a viz] MMMM YYYY',\n    LLL: 'D [a viz] MMMM YYYY h[e]mm A',\n    LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n  },\n  relativeTime: {\n    future: 'a-benn %s',\n    past: '%s ʼzo',\n    s: 'un nebeud segondennoù',\n    m: 'ur vunutenn',\n    mm: relativeTimeWithMutation,\n    h: 'un eur',\n    hh: '%d eur',\n    d: 'un devezh',\n    dd: relativeTimeWithMutation,\n    M: 'ur miz',\n    MM: relativeTimeWithMutation,\n    y: 'ur bloaz',\n    yy: specialMutationForYears\n  },\n  meridiem: hour => (hour < 12 ? 'a.m.' : 'g.m.') // a-raok merenn | goude merenn\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/bs.js",
    "content": "// Bosnian [bs]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'bs',\n  weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n  months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n  monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n  weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd, D. MMMM YYYY H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ca.js",
    "content": "// Catalan [ca]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ca',\n  weekdays: 'Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte'.split('_'),\n  weekdaysShort: 'Dg._Dl._Dt._Dc._Dj._Dv._Ds.'.split('_'),\n  weekdaysMin: 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),\n  months: 'Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre'.split('_'),\n  monthsShort: 'Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM [de] YYYY',\n    LLL: 'D MMMM [de] YYYY [a les] H:mm',\n    LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n    ll: 'D MMM YYYY',\n    lll: 'D MMM YYYY, H:mm',\n    llll: 'ddd D MMM YYYY, H:mm'\n  },\n  relativeTime: {\n    future: 'd\\'aquí %s',\n    past: 'fa %s',\n    s: 'uns segons',\n    m: 'un minut',\n    mm: '%d minuts',\n    h: 'una hora',\n    hh: '%d hores',\n    d: 'un dia',\n    dd: '%d dies',\n    M: 'un mes',\n    MM: '%d mesos',\n    y: 'un any',\n    yy: '%d anys'\n  },\n  ordinal: (n) => {\n    let ord\n\n    if (n === 1 || n === 3) ord = 'r'\n    else if (n === 2) ord = 'n'\n    else if (n === 4) ord = 't'\n    else ord = 'è'\n\n    return `${n}${ord}`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/cs.js",
    "content": "// Czech [cs]\nimport dayjs from 'dayjs'\n\nfunction plural(n) {\n  return (n > 1) && (n < 5) && (~~(n / 10) !== 1) // eslint-disable-line\n}\n/* eslint-disable */ \nfunction translate(number, withoutSuffix, key, isFuture) {\n  const result = `${number} `\n  switch (key) {\n    case 's': // a few seconds / in a few seconds / a few seconds ago\n      return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'\n    case 'm': // a minute / in a minute / a minute ago\n      return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou')\n    case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'minuty' : 'minut')\n      }\n      return `${result}minutami`\n    case 'h': // an hour / in an hour / an hour ago\n      return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou')\n    case 'hh': // 9 hours / in 9 hours / 9 hours ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'hodiny' : 'hodin')\n      }\n      return `${result}hodinami`\n    case 'd': // a day / in a day / a day ago\n      return (withoutSuffix || isFuture) ? 'den' : 'dnem'\n    case 'dd': // 9 days / in 9 days / 9 days ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'dny' : 'dní')\n      }\n      return `${result}dny`\n    case 'M': // a month / in a month / a month ago\n      return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'\n    case 'MM': // 9 months / in 9 months / 9 months ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'měsíce' : 'měsíců')\n      }\n      return `${result}měsíci`\n    case 'y': // a year / in a year / a year ago\n      return (withoutSuffix || isFuture) ? 'rok' : 'rokem'\n    case 'yy': // 9 years / in 9 years / 9 years ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'roky' : 'let')\n      }\n      return `${result}lety`\n  }\n}\n/* eslint-enable */\nconst locale = {\n  name: 'cs',\n  weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n  weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n  weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n  months: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n  monthsShort: 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd D. MMMM YYYY H:mm',\n    l: 'D. M. YYYY'\n  },\n  relativeTime: {\n    future: 'za %s',\n    past: 'před %s',\n    s: translate,\n    m: translate,\n    mm: translate,\n    h: translate,\n    hh: translate,\n    d: translate,\n    dd: translate,\n    M: translate,\n    MM: translate,\n    y: translate,\n    yy: translate\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/cv.js",
    "content": "// Chuvash [cv]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'cv',\n  weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n  months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n  monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n  weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD-MM-YYYY',\n    LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n    LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n    LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/cy.js",
    "content": "// Welsh [cy]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'cy',\n  weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n  months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n  monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n  weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'mewn %s',\n    past: '%s yn ôl',\n    s: 'ychydig eiliadau',\n    m: 'munud',\n    mm: '%d munud',\n    h: 'awr',\n    hh: '%d awr',\n    d: 'diwrnod',\n    dd: '%d diwrnod',\n    M: 'mis',\n    MM: '%d mis',\n    y: 'blwyddyn',\n    yy: '%d flynedd'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/da.js",
    "content": "// Danish [da]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'da',\n  weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n  weekdaysShort: 'søn._man._tirs._ons._tors._fre._lør.'.split('_'),\n  weekdaysMin: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n  months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n  monthsShort: 'jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY HH:mm',\n    LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n  },\n  relativeTime: {\n    future: 'om %s',\n    past: '%s siden',\n    s: 'få sekunder',\n    m: 'et minut',\n    mm: '%d minutter',\n    h: 'en time',\n    hh: '%d timer',\n    d: 'en dag',\n    dd: '%d dage',\n    M: 'en måned',\n    MM: '%d måneder',\n    y: 'et år',\n    yy: '%d år'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/de-at.js",
    "content": "// German (Austria) [de-at]\nimport dayjs from 'dayjs'\n\nconst texts = {\n  s: 'ein paar Sekunden',\n  m: ['eine Minute', 'einer Minute'],\n  mm: '%d Minuten',\n  h: ['eine Stunde', 'einer Stunde'],\n  hh: '%d Stunden',\n  d: ['ein Tag', 'einem Tag'],\n  dd: ['%d Tage', '%d Tagen'],\n  M: ['ein Monat', 'einem Monat'],\n  MM: ['%d Monate', '%d Monaten'],\n  y: ['ein Jahr', 'einem Jahr'],\n  yy: ['%d Jahre', '%d Jahren']\n}\n\nfunction relativeTimeFormatter(number, withoutSuffix, key) {\n  let l = texts[key]\n  if (Array.isArray(l)) {\n    l = l[withoutSuffix ? 0 : 1]\n  }\n  return l.replace('%d', number)\n}\n\nconst locale = {\n  name: 'de-at',\n  weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n  weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n  weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n  months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n  monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  formats: {\n    LTS: 'HH:mm:ss',\n    LT: 'HH:mm',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY HH:mm',\n    LLLL: 'dddd, D. MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: 'vor %s',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/de-ch.js",
    "content": "// German (Switzerland) [de-ch]\nimport dayjs from 'dayjs'\n\nconst texts = {\n  s: 'ein paar Sekunden',\n  m: ['eine Minute', 'einer Minute'],\n  mm: '%d Minuten',\n  h: ['eine Stunde', 'einer Stunde'],\n  hh: '%d Stunden',\n  d: ['ein Tag', 'einem Tag'],\n  dd: ['%d Tage', '%d Tagen'],\n  M: ['ein Monat', 'einem Monat'],\n  MM: ['%d Monate', '%d Monaten'],\n  y: ['ein Jahr', 'einem Jahr'],\n  yy: ['%d Jahre', '%d Jahren']\n}\n\nfunction relativeTimeFormatter(number, withoutSuffix, key) {\n  let l = texts[key]\n  if (Array.isArray(l)) {\n    l = l[withoutSuffix ? 0 : 1]\n  }\n  return l.replace('%d', number)\n}\n\nconst locale = {\n  name: 'de-ch',\n  weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n  weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n  weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n  months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n  monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY HH:mm',\n    LLLL: 'dddd, D. MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: 'vor %s',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/de.js",
    "content": "// German [de]\nimport dayjs from 'dayjs'\n\nconst texts = {\n  s: 'ein paar Sekunden',\n  m: ['eine Minute', 'einer Minute'],\n  mm: '%d Minuten',\n  h: ['eine Stunde', 'einer Stunde'],\n  hh: '%d Stunden',\n  d: ['ein Tag', 'einem Tag'],\n  dd: ['%d Tage', '%d Tagen'],\n  M: ['ein Monat', 'einem Monat'],\n  MM: ['%d Monate', '%d Monaten'],\n  y: ['ein Jahr', 'einem Jahr'],\n  yy: ['%d Jahre', '%d Jahren']\n}\n\nfunction relativeTimeFormatter(number, withoutSuffix, key) {\n  let l = texts[key]\n  if (Array.isArray(l)) {\n    l = l[withoutSuffix ? 0 : 1]\n  }\n  return l.replace('%d', number)\n}\n\nconst locale = {\n  name: 'de',\n  weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n  weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n  weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n  months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n  monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LTS: 'HH:mm:ss',\n    LT: 'HH:mm',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY HH:mm',\n    LLLL: 'dddd, D. MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: 'vor %s',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/dv.js",
    "content": "// Maldivian [dv]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'dv',\n  weekdays: 'އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު'.split('_'),\n  months: 'ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު'.split('_'),\n  weekStart: 7,\n  weekdaysShort: 'އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު'.split('_'),\n  monthsShort: 'ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު'.split('_'),\n  weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'D/M/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'ތެރޭގައި %s',\n    past: 'ކުރިން %s',\n    s: 'ސިކުންތުކޮޅެއް',\n    m: 'މިނިޓެއް',\n    mm: 'މިނިޓު %d',\n    h: 'ގަޑިއިރެއް',\n    hh: 'ގަޑިއިރު %d',\n    d: 'ދުވަހެއް',\n    dd: 'ދުވަސް %d',\n    M: 'މަހެއް',\n    MM: 'މަސް %d',\n    y: 'އަހަރެއް',\n    yy: 'އަހަރު %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/el.js",
    "content": "// Greek [el]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'el',\n  weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n  weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n  weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n  months: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n  monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ'.split('_'),\n  ordinal: n => n,\n  weekStart: 1,\n  relativeTime: {\n    future: 'σε %s',\n    past: 'πριν %s',\n    s: 'μερικά δευτερόλεπτα',\n    m: 'ένα λεπτό',\n    mm: '%d λεπτά',\n    h: 'μία ώρα',\n    hh: '%d ώρες',\n    d: 'μία μέρα',\n    dd: '%d μέρες',\n    M: 'ένα μήνα',\n    MM: '%d μήνες',\n    y: 'ένα χρόνο',\n    yy: '%d χρόνια'\n  },\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/en-au.js",
    "content": "// English (Australia) [en-au]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-au',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  },\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-ca.js",
    "content": "// English (Canada) [en-ca]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-ca',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'YYYY-MM-DD',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY h:mm A',\n    LLLL: 'dddd, MMMM D, YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-gb.js",
    "content": "// English (United Kingdom) [en-gb]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-gb',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-ie.js",
    "content": "// English (Ireland) [en-ie]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-ie',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-il.js",
    "content": "// English (Israel) [en-il]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-il',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-in.js",
    "content": "// English (India) [en-in]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-in',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-nz.js",
    "content": "// English (New Zealand) [en-nz]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-nz',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`\n  },\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-sg.js",
    "content": "// English (Singapore) [en-sg]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-sg',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en-tt.js",
    "content": "// English (Trinidad & Tobago) [en-tt]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'en-tt',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n  weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/en.js",
    "content": "// English [en]\n// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale\nexport default {\n  name: 'en',\n  weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n  months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd']\n    const v = n % 100\n    return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]`\n  }\n}\n"
  },
  {
    "path": "src/locale/eo.js",
    "content": "// Esperanto [eo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'eo',\n  weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n  months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n  weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'D[-a de] MMMM, YYYY',\n    LLL: 'D[-a de] MMMM, YYYY HH:mm',\n    LLLL: 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'post %s',\n    past: 'antaŭ %s',\n    s: 'sekundoj',\n    m: 'minuto',\n    mm: '%d minutoj',\n    h: 'horo',\n    hh: '%d horoj',\n    d: 'tago',\n    dd: '%d tagoj',\n    M: 'monato',\n    MM: '%d monatoj',\n    y: 'jaro',\n    yy: '%d jaroj'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/es-do.js",
    "content": "// Spanish (Dominican Republic) [es-do]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'es-do',\n  weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n  weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n  months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n  monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n  weekStart: 1,\n  relativeTime: {\n    future: 'en %s',\n    past: 'hace %s',\n    s: 'unos segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'una hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un año',\n    yy: '%d años'\n  },\n  ordinal: n => `${n}º`,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY h:mm A',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/es-mx.js",
    "content": "// Spanish (Mexico) [es-mx]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'es-mx',\n  weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n  weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n  months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n  monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n  relativeTime: {\n    future: 'en %s',\n    past: 'hace %s',\n    s: 'unos segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'una hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un año',\n    yy: '%d años'\n  },\n  ordinal: n => `${n}º`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY H:mm',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/es-pr.js",
    "content": "// Spanish (Puerto Rico) [es-PR]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'es-pr',\n  monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n  weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n  weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n  months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'MM/DD/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY h:mm A',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'en %s',\n    past: 'hace %s',\n    s: 'unos segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'una hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un año',\n    yy: '%d años'\n  },\n  ordinal: n => `${n}º`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/es-us.js",
    "content": "// Spanish (United States) [es-us]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'es-us',\n  weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n  weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n  months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n  monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n  relativeTime: {\n    future: 'en %s',\n    past: 'hace %s',\n    s: 'unos segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'una hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un año',\n    yy: '%d años'\n  },\n  ordinal: n => `${n}º`,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'MM/DD/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY h:mm A',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/es.js",
    "content": "// Spanish [es]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'es',\n  monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n  weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n  weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n  months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY H:mm',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'en %s',\n    past: 'hace %s',\n    s: 'unos segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'una hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un año',\n    yy: '%d años'\n  },\n  ordinal: n => `${n}º`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/et.js",
    "content": "// Estonian [et]\nimport dayjs from 'dayjs'\n\nfunction relativeTimeWithTense(number, withoutSuffix, key, isFuture) {\n  const format = {\n    s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n    m: ['ühe minuti', 'üks minut'],\n    mm: ['%d minuti', '%d minutit'],\n    h: ['ühe tunni', 'tund aega', 'üks tund'],\n    hh: ['%d tunni', '%d tundi'],\n    d: ['ühe päeva', 'üks päev'],\n    M: ['kuu aja', 'kuu aega', 'üks kuu'],\n    MM: ['%d kuu', '%d kuud'],\n    y: ['ühe aasta', 'aasta', 'üks aasta'],\n    yy: ['%d aasta', '%d aastat']\n  }\n  if (withoutSuffix) {\n    return (format[key][2] ? format[key][2] : format[key][1]).replace('%d', number)\n  }\n  return (isFuture ? format[key][0] : format[key][1]).replace('%d', number)\n}\n\nconst locale = {\n  name: 'et', // Estonian\n  weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), // Note weekdays are not capitalized in Estonian\n  weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), // There is no short form of weekdays in Estonian except this 1 letter format so it is used for both 'weekdaysShort' and 'weekdaysMin'\n  weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n  months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), // Note month names are not capitalized in Estonian\n  monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  relativeTime: {\n    future: '%s pärast',\n    past: '%s tagasi',\n    s: relativeTimeWithTense,\n    m: relativeTimeWithTense,\n    mm: relativeTimeWithTense,\n    h: relativeTimeWithTense,\n    hh: relativeTimeWithTense,\n    d: relativeTimeWithTense,\n    dd: '%d päeva',\n    M: relativeTimeWithTense,\n    MM: relativeTimeWithTense,\n    y: relativeTimeWithTense,\n    yy: relativeTimeWithTense\n  },\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd, D. MMMM YYYY H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/eu.js",
    "content": "// Basque [eu]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'eu',\n  weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n  months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n  monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n  weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'YYYY[ko] MMMM[ren] D[a]',\n    LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n    LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n    l: 'YYYY-M-D',\n    ll: 'YYYY[ko] MMM D[a]',\n    lll: 'YYYY[ko] MMM D[a] HH:mm',\n    llll: 'ddd, YYYY[ko] MMM D[a] HH:mm'\n  },\n  relativeTime: {\n    future: '%s barru',\n    past: 'duela %s',\n    s: 'segundo batzuk',\n    m: 'minutu bat',\n    mm: '%d minutu',\n    h: 'ordu bat',\n    hh: '%d ordu',\n    d: 'egun bat',\n    dd: '%d egun',\n    M: 'hilabete bat',\n    MM: '%d hilabete',\n    y: 'urte bat',\n    yy: '%d urte'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/fa.js",
    "content": "// Persian [fa]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fa',\n  weekdays: 'یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه'.split('_'),\n  weekdaysShort: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n  weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n  weekStart: 6,\n  months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n  monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'در %s',\n    past: '%s پیش',\n    s: 'چند ثانیه',\n    m: 'یک دقیقه',\n    mm: '%d دقیقه',\n    h: 'یک ساعت',\n    hh: '%d ساعت',\n    d: 'یک روز',\n    dd: '%d روز',\n    M: 'یک ماه',\n    MM: '%d ماه',\n    y: 'یک سال',\n    yy: '%d سال'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/fi.js",
    "content": "// Finnish [fi]\nimport dayjs from 'dayjs'\n\nfunction relativeTimeFormatter(number, withoutSuffix, key, isFuture) {\n  const past = {\n    s: 'muutama sekunti',\n    m: 'minuutti',\n    mm: '%d minuuttia',\n    h: 'tunti',\n    hh: '%d tuntia',\n    d: 'päivä',\n    dd: '%d päivää',\n    M: 'kuukausi',\n    MM: '%d kuukautta',\n    y: 'vuosi',\n    yy: '%d vuotta',\n    numbers: 'nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän'.split('_')\n  }\n  const future = {\n    s: 'muutaman sekunnin',\n    m: 'minuutin',\n    mm: '%d minuutin',\n    h: 'tunnin',\n    hh: '%d tunnin',\n    d: 'päivän',\n    dd: '%d päivän',\n    M: 'kuukauden',\n    MM: '%d kuukauden',\n    y: 'vuoden',\n    yy: '%d vuoden',\n    numbers: 'nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän'.split('_')\n  }\n  const words = (isFuture && !withoutSuffix) ? future : past\n  const result = words[key]\n  if (number < 10) {\n    return result.replace('%d', words.numbers[number])\n  }\n  return result.replace('%d', number)\n}\n\nconst locale = {\n  name: 'fi', // Finnish\n  weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), // Note weekdays are not capitalized in Finnish\n  weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), // There is no short form of weekdays in Finnish except this 2 letter format so it is used for both 'weekdaysShort' and 'weekdaysMin'\n  weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n  months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), // Note month names are not capitalized in Finnish\n  monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: '%s päästä',\n    past: '%s sitten',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  },\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM[ta] YYYY',\n    LLL: 'D. MMMM[ta] YYYY, [klo] HH.mm',\n    LLLL: 'dddd, D. MMMM[ta] YYYY, [klo] HH.mm',\n    l: 'D.M.YYYY',\n    ll: 'D. MMM YYYY',\n    lll: 'D. MMM YYYY, [klo] HH.mm',\n    llll: 'ddd, D. MMM YYYY, [klo] HH.mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/fo.js",
    "content": "// Faroese [fo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fo',\n  weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n  months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n  weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D. MMMM, YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'um %s',\n    past: '%s síðani',\n    s: 'fá sekund',\n    m: 'ein minuttur',\n    mm: '%d minuttir',\n    h: 'ein tími',\n    hh: '%d tímar',\n    d: 'ein dagur',\n    dd: '%d dagar',\n    M: 'ein mánaður',\n    MM: '%d mánaðir',\n    y: 'eitt ár',\n    yy: '%d ár'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/fr-ca.js",
    "content": "// French (Canada) [fr-ca]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fr-ca',\n  weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n  months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n  weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n  monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n  weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'dans %s',\n    past: 'il y a %s',\n    s: 'quelques secondes',\n    m: 'une minute',\n    mm: '%d minutes',\n    h: 'une heure',\n    hh: '%d heures',\n    d: 'un jour',\n    dd: '%d jours',\n    M: 'un mois',\n    MM: '%d mois',\n    y: 'un an',\n    yy: '%d ans'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/fr-ch.js",
    "content": "// French (Switzerland) [fr-ch]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fr-ch',\n  weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n  months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n  monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n  weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'dans %s',\n    past: 'il y a %s',\n    s: 'quelques secondes',\n    m: 'une minute',\n    mm: '%d minutes',\n    h: 'une heure',\n    hh: '%d heures',\n    d: 'un jour',\n    dd: '%d jours',\n    M: 'un mois',\n    MM: '%d mois',\n    y: 'un an',\n    yy: '%d ans'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/fr.js",
    "content": "// French [fr]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fr',\n  weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n  weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n  weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n  months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n  monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'dans %s',\n    past: 'il y a %s',\n    s: 'quelques secondes',\n    m: 'une minute',\n    mm: '%d minutes',\n    h: 'une heure',\n    hh: '%d heures',\n    d: 'un jour',\n    dd: '%d jours',\n    M: 'un mois',\n    MM: '%d mois',\n    y: 'un an',\n    yy: '%d ans'\n  },\n  ordinal: (n) => {\n    const o = n === 1 ? 'er' : ''\n    return `${n}${o}`\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/fy.js",
    "content": "// Frisian [fy]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'fy',\n  weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n  months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n  monthsShort: 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n  weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD-MM-YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'oer %s',\n    past: '%s lyn',\n    s: 'in pear sekonden',\n    m: 'ien minút',\n    mm: '%d minuten',\n    h: 'ien oere',\n    hh: '%d oeren',\n    d: 'ien dei',\n    dd: '%d dagen',\n    M: 'ien moanne',\n    MM: '%d moannen',\n    y: 'ien jier',\n    yy: '%d jierren'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ga.js",
    "content": "// Irish or Irish Gaelic [ga]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ga',\n  weekdays: 'Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Sathairn'.split('_'),\n  months: 'Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Meitheamh_Iúil_Lúnasa_Meán Fómhair_Deireadh Fómhair_Samhain_Nollaig'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Dom_Lua_Mái_Céa_Déa_Aoi_Sat'.split('_'),\n  monthsShort: 'Ean_Fea_Már_Aib_Beal_Mei_Iúil_Lún_MFómh_DFómh_Samh_Noll'.split('_'),\n  weekdaysMin: 'Do_Lu_Má_Cé_Dé_Ao_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'i %s',\n    past: '%s ó shin',\n    s: 'cúpla soicind',\n    m: 'nóiméad',\n    mm: '%d nóiméad',\n    h: 'uair an chloig',\n    hh: '%d uair an chloig',\n    d: 'lá',\n    dd: '%d lá',\n    M: 'mí',\n    MM: '%d mí',\n    y: 'bliain',\n    yy: '%d bliain'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/gd.js",
    "content": "// Scottish Gaelic [gd]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'gd',\n  weekdays: 'Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne'.split('_'),\n  months: 'Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Did_Dil_Dim_Dic_Dia_Dih_Dis'.split('_'),\n  monthsShort: 'Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh'.split('_'),\n  weekdaysMin: 'Dò_Lu_Mà_Ci_Ar_Ha_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'ann an %s',\n    past: 'bho chionn %s',\n    s: 'beagan diogan',\n    m: 'mionaid',\n    mm: '%d mionaidean',\n    h: 'uair',\n    hh: '%d uairean',\n    d: 'latha',\n    dd: '%d latha',\n    M: 'mìos',\n    MM: '%d mìosan',\n    y: 'bliadhna',\n    yy: '%d bliadhna'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/gl.js",
    "content": "// Galician [gl]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'gl',\n  weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n  months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n  monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n  weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n  ordinal: n => `${n}º`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY H:mm',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'en %s',\n    past: 'fai %s',\n    s: 'uns segundos',\n    m: 'un minuto',\n    mm: '%d minutos',\n    h: 'unha hora',\n    hh: '%d horas',\n    d: 'un día',\n    dd: '%d días',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un ano',\n    yy: '%d anos'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/gom-latn.js",
    "content": "// Konkani Latin script [gom-latn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'gom-latn',\n  weekdays: \"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var\".split('_'),\n  months: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n  monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n  weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm [vazta]',\n    LTS: 'A h:mm:ss [vazta]',\n    L: 'DD-MM-YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY A h:mm [vazta]',\n    LLLL: 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n    llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/gu.js",
    "content": "// Gujarati [gu]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'gu',\n  weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n  months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n  weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n  monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n  weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm વાગ્યે',\n    LTS: 'A h:mm:ss વાગ્યે',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n  },\n  relativeTime: {\n    future: '%s મા',\n    past: '%s પેહલા',\n    s: 'અમુક પળો',\n    m: 'એક મિનિટ',\n    mm: '%d મિનિટ',\n    h: 'એક કલાક',\n    hh: '%d કલાક',\n    d: 'એક દિવસ',\n    dd: '%d દિવસ',\n    M: 'એક મહિનો',\n    MM: '%d મહિનો',\n    y: 'એક વર્ષ',\n    yy: '%d વર્ષ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/he.js",
    "content": "// Hebrew [he]\nimport dayjs from 'dayjs'\n\nconst texts = {\n  s: 'מספר שניות',\n  ss: '%d שניות',\n  m: 'דקה',\n  mm: '%d דקות',\n  h: 'שעה',\n  hh: '%d שעות',\n  hh2: 'שעתיים',\n  d: 'יום',\n  dd: '%d ימים',\n  dd2: 'יומיים',\n  M: 'חודש',\n  MM: '%d חודשים',\n  MM2: 'חודשיים',\n  y: 'שנה',\n  yy: '%d שנים',\n  yy2: 'שנתיים'\n}\n\nfunction relativeTimeFormatter(number, withoutSuffix, key) {\n  const text = texts[key + (number === 2 ? '2' : '')] || texts[key]\n  return text.replace('%d', number)\n}\n\nconst locale = {\n  name: 'he',\n  weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n  weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n  weekdaysMin: 'א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳'.split('_'),\n  months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n  monthsShort: 'ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ'.split('_'),\n  relativeTime: {\n    future: 'בעוד %s',\n    past: 'לפני %s',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  },\n  ordinal: n => n,\n  format: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [ב]MMMM YYYY',\n    LLL: 'D [ב]MMMM YYYY HH:mm',\n    LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n    l: 'D/M/YYYY',\n    ll: 'D MMM YYYY',\n    lll: 'D MMM YYYY HH:mm',\n    llll: 'ddd, D MMM YYYY HH:mm'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [ב]MMMM YYYY',\n    LLL: 'D [ב]MMMM YYYY HH:mm',\n    LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n    l: 'D/M/YYYY',\n    ll: 'D MMM YYYY',\n    lll: 'D MMM YYYY HH:mm',\n    llll: 'ddd, D MMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/hi.js",
    "content": "// Hindi [hi]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'hi',\n  weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n  months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n  weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n  monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n  weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm बजे',\n    LTS: 'A h:mm:ss बजे',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm बजे',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm बजे'\n  },\n  relativeTime: {\n    future: '%s में',\n    past: '%s पहले',\n    s: 'कुछ ही क्षण',\n    m: 'एक मिनट',\n    mm: '%d मिनट',\n    h: 'एक घंटा',\n    hh: '%d घंटे',\n    d: 'एक दिन',\n    dd: '%d दिन',\n    M: 'एक महीने',\n    MM: '%d महीने',\n    y: 'एक वर्ष',\n    yy: '%d वर्ष'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/hr.js",
    "content": "// Croatian [hr]\nimport dayjs from 'dayjs'\n\nconst monthFormat = 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_')\nconst monthStandalone = 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\nconst MONTHS_IN_FORMAT = /D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/\n\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst locale = {\n  name: 'hr',\n  weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n  weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n  weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n  months,\n  monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd, D. MMMM YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'za %s',\n    past: 'prije %s',\n    s: 'sekunda',\n    m: 'minuta',\n    mm: '%d minuta',\n    h: 'sat',\n    hh: '%d sati',\n    d: 'dan',\n    dd: '%d dana',\n    M: 'mjesec',\n    MM: '%d mjeseci',\n    y: 'godina',\n    yy: '%d godine'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ht.js",
    "content": "// Haitian Creole (Haiti) [ht]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ht',\n  weekdays: 'dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi'.split('_'),\n  months: 'janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm'.split('_'),\n  weekdaysShort: 'dim._len._mad._mèk._jed._van._sam.'.split('_'),\n  monthsShort: 'jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.'.split('_'),\n  weekdaysMin: 'di_le_ma_mè_je_va_sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'nan %s',\n    past: 'sa gen %s',\n    s: 'kèk segond',\n    m: 'yon minit',\n    mm: '%d minit',\n    h: 'inèdtan',\n    hh: '%d zè',\n    d: 'yon jou',\n    dd: '%d jou',\n    M: 'yon mwa',\n    MM: '%d mwa',\n    y: 'yon ane',\n    yy: '%d ane'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/hu.js",
    "content": "// Hungarian [hu]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'hu',\n  weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n  weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n  weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n  months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n  monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  relativeTime: {\n    future: '%s múlva',\n    past: '%s',\n    s: (_, s, ___, isFuture) => `néhány másodperc${isFuture || s ? '' : 'e'}`,\n    m: (_, s, ___, isFuture) => `egy perc${isFuture || s ? '' : 'e'}`,\n    mm: (n, s, ___, isFuture) => `${n} perc${isFuture || s ? '' : 'e'}`,\n    h: (_, s, ___, isFuture) => `egy ${isFuture || s ? 'óra' : 'órája'}`,\n    hh: (n, s, ___, isFuture) => `${n} ${isFuture || s ? 'óra' : 'órája'}`,\n    d: (_, s, ___, isFuture) => `egy ${isFuture || s ? 'nap' : 'napja'}`,\n    dd: (n, s, ___, isFuture) => `${n} ${isFuture || s ? 'nap' : 'napja'}`,\n    M: (_, s, ___, isFuture) => `egy ${isFuture || s ? 'hónap' : 'hónapja'}`,\n    MM: (n, s, ___, isFuture) => `${n} ${isFuture || s ? 'hónap' : 'hónapja'}`,\n    y: (_, s, ___, isFuture) => `egy ${isFuture || s ? 'év' : 'éve'}`,\n    yy: (n, s, ___, isFuture) => `${n} ${isFuture || s ? 'év' : 'éve'}`\n  },\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'YYYY.MM.DD.',\n    LL: 'YYYY. MMMM D.',\n    LLL: 'YYYY. MMMM D. H:mm',\n    LLLL: 'YYYY. MMMM D., dddd H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/hy-am.js",
    "content": "// Armenian [hy-am]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'hy-am',\n  weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n  months: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n  monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n  weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY թ.',\n    LLL: 'D MMMM YYYY թ., HH:mm',\n    LLLL: 'dddd, D MMMM YYYY թ., HH:mm'\n  },\n  relativeTime: {\n    future: '%s հետո',\n    past: '%s առաջ',\n    s: 'մի քանի վայրկյան',\n    m: 'րոպե',\n    mm: '%d րոպե',\n    h: 'ժամ',\n    hh: '%d ժամ',\n    d: 'օր',\n    dd: '%d օր',\n    M: 'ամիս',\n    MM: '%d ամիս',\n    y: 'տարի',\n    yy: '%d տարի'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/id.js",
    "content": "// Indonesian [id]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'id',\n  weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n  months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n  weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n  weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY [pukul] HH.mm',\n    LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n  },\n  relativeTime: {\n    future: 'dalam %s',\n    past: '%s yang lalu',\n    s: 'beberapa detik',\n    m: 'semenit',\n    mm: '%d menit',\n    h: 'sejam',\n    hh: '%d jam',\n    d: 'sehari',\n    dd: '%d hari',\n    M: 'sebulan',\n    MM: '%d bulan',\n    y: 'setahun',\n    yy: '%d tahun'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/is.js",
    "content": "// Icelandic [is]\nimport dayjs from 'dayjs'\n\nconst texts = {\n  s: ['nokkrar sekúndur', 'nokkrar sekúndur', 'nokkrum sekúndum'],\n  m: ['mínúta', 'mínútu', 'mínútu'],\n  mm: ['mínútur', 'mínútur', 'mínútum'],\n  h: ['klukkustund', 'klukkustund', 'klukkustund'],\n  hh: ['klukkustundir', 'klukkustundir', 'klukkustundum'],\n  d: ['dagur', 'dag', 'degi'],\n  dd: ['dagar', 'daga', 'dögum'],\n  M: ['mánuður', 'mánuð', 'mánuði'],\n  MM: ['mánuðir', 'mánuði', 'mánuðum'],\n  y: ['ár', 'ár', 'ári'],\n  yy: ['ár', 'ár', 'árum']\n}\n\nfunction resolveTemplate(key, number, isFuture, withoutSuffix) {\n  const suffixIndex = isFuture\n    ? 1\n    : 2\n\n  const index = withoutSuffix\n    ? 0\n    : suffixIndex\n\n  const keyShouldBeSingular = key.length === 2 && number % 10 === 1\n\n  const correctedKey = keyShouldBeSingular ? key[0] : key\n  const unitText = texts[correctedKey]\n  const text = unitText[index]\n  return key.length === 1\n    ? text\n    : `%d ${text}`\n}\n\nfunction relativeTimeFormatter(number, withoutSuffix, key, isFuture) {\n  const template = resolveTemplate(key, number, isFuture, withoutSuffix)\n\n  return template.replace('%d', number)\n}\n\nconst locale = {\n  name: 'is',\n  weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n  months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n  weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY [kl.] H:mm',\n    LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm'\n  },\n  relativeTime: {\n    future: 'eftir %s',\n    past: 'fyrir %s síðan',\n    s: relativeTimeFormatter,\n    m: relativeTimeFormatter,\n    mm: relativeTimeFormatter,\n    h: relativeTimeFormatter,\n    hh: relativeTimeFormatter,\n    d: relativeTimeFormatter,\n    dd: relativeTimeFormatter,\n    M: relativeTimeFormatter,\n    MM: relativeTimeFormatter,\n    y: relativeTimeFormatter,\n    yy: relativeTimeFormatter\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/it-ch.js",
    "content": "// Italian (Switzerland) [it-ch]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'it-ch',\n  weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n  months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n  monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n  weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'tra %s',\n    past: '%s fa',\n    s: 'alcuni secondi',\n    m: 'un minuto',\n    mm: '%d minuti',\n    h: 'un\\'ora',\n    hh: '%d ore',\n    d: 'un giorno',\n    dd: '%d giorni',\n    M: 'un mese',\n    MM: '%d mesi',\n    y: 'un anno',\n    yy: '%d anni'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/it.js",
    "content": "// Italian [it]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'it',\n  weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n  weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n  weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n  months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n  weekStart: 1,\n  monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'tra %s',\n    past: '%s fa',\n    s: 'qualche secondo',\n    m: 'un minuto',\n    mm: '%d minuti',\n    h: 'un\\'ora',\n    hh: '%d ore',\n    d: 'un giorno',\n    dd: '%d giorni',\n    M: 'un mese',\n    MM: '%d mesi',\n    y: 'un anno',\n    yy: '%d anni'\n  },\n  ordinal: n => `${n}º`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ja.js",
    "content": "// Japanese [ja]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ja',\n  weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n  weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n  weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n  months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  ordinal: n => `${n}日`,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY年M月D日',\n    LLL: 'YYYY年M月D日 HH:mm',\n    LLLL: 'YYYY年M月D日 dddd HH:mm',\n    l: 'YYYY/MM/DD',\n    ll: 'YYYY年M月D日',\n    lll: 'YYYY年M月D日 HH:mm',\n    llll: 'YYYY年M月D日(ddd) HH:mm'\n  },\n  meridiem: hour => (hour < 12 ? '午前' : '午後'),\n  relativeTime: {\n    future: '%s後',\n    past: '%s前',\n    s: '数秒',\n    m: '1分',\n    mm: '%d分',\n    h: '1時間',\n    hh: '%d時間',\n    d: '1日',\n    dd: '%d日',\n    M: '1ヶ月',\n    MM: '%dヶ月',\n    y: '1年',\n    yy: '%d年'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/jv.js",
    "content": "// Javanese [jv]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'jv',\n  weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n  months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n  monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n  weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY [pukul] HH.mm',\n    LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n  },\n  relativeTime: {\n    future: 'wonten ing %s',\n    past: '%s ingkang kepengker',\n    s: 'sawetawis detik',\n    m: 'setunggal menit',\n    mm: '%d menit',\n    h: 'setunggal jam',\n    hh: '%d jam',\n    d: 'sedinten',\n    dd: '%d dinten',\n    M: 'sewulan',\n    MM: '%d wulan',\n    y: 'setaun',\n    yy: '%d taun'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ka.js",
    "content": "// Georgian [ka]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ka',\n  weekdays: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n  weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n  weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n  months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n  monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: '%s შემდეგ',\n    past: '%s წინ',\n    s: 'წამი',\n    m: 'წუთი',\n    mm: '%d წუთი',\n    h: 'საათი',\n    hh: '%d საათის',\n    d: 'დღეს',\n    dd: '%d დღის განმავლობაში',\n    M: 'თვის',\n    MM: '%d თვის',\n    y: 'წელი',\n    yy: '%d წლის'\n  },\n  ordinal: n => n\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/kk.js",
    "content": "// Kazakh [kk]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'kk',\n  weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n  weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n  weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n  months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n  monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n  weekStart: 1,\n  relativeTime: {\n    future: '%s ішінде',\n    past: '%s бұрын',\n    s: 'бірнеше секунд',\n    m: 'бір минут',\n    mm: '%d минут',\n    h: 'бір сағат',\n    hh: '%d сағат',\n    d: 'бір күн',\n    dd: '%d күн',\n    M: 'бір ай',\n    MM: '%d ай',\n    y: 'бір жыл',\n    yy: '%d жыл'\n  },\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/km.js",
    "content": "// Cambodian [km]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'km',\n  weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n  months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n  monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n  weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%sទៀត',\n    past: '%sមុន',\n    s: 'ប៉ុន្មានវិនាទី',\n    m: 'មួយនាទី',\n    mm: '%d នាទី',\n    h: 'មួយម៉ោង',\n    hh: '%d ម៉ោង',\n    d: 'មួយថ្ងៃ',\n    dd: '%d ថ្ងៃ',\n    M: 'មួយខែ',\n    MM: '%d ខែ',\n    y: 'មួយឆ្នាំ',\n    yy: '%d ឆ្នាំ'\n  },\n  meridiem: hour => (hour > 12 ? 'ល្ងាច' : 'ព្រឹក')\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/kn.js",
    "content": "// Kannada [kn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'kn',\n  weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n  months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n  weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n  monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n  weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm',\n    LTS: 'A h:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm'\n  },\n  relativeTime: {\n    future: '%s ನಂತರ',\n    past: '%s ಹಿಂದೆ',\n    s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n    m: 'ಒಂದು ನಿಮಿಷ',\n    mm: '%d ನಿಮಿಷ',\n    h: 'ಒಂದು ಗಂಟೆ',\n    hh: '%d ಗಂಟೆ',\n    d: 'ಒಂದು ದಿನ',\n    dd: '%d ದಿನ',\n    M: 'ಒಂದು ತಿಂಗಳು',\n    MM: '%d ತಿಂಗಳು',\n    y: 'ಒಂದು ವರ್ಷ',\n    yy: '%d ವರ್ಷ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ko.js",
    "content": "// Korean [ko]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ko',\n  weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n  weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n  weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n  months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n  monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n  ordinal: n => `${n}일`,\n  formats: {\n    LT: 'A h:mm',\n    LTS: 'A h:mm:ss',\n    L: 'YYYY.MM.DD.',\n    LL: 'YYYY년 MMMM D일',\n    LLL: 'YYYY년 MMMM D일 A h:mm',\n    LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n    l: 'YYYY.MM.DD.',\n    ll: 'YYYY년 MMMM D일',\n    lll: 'YYYY년 MMMM D일 A h:mm',\n    llll: 'YYYY년 MMMM D일 dddd A h:mm'\n  },\n  meridiem: hour => (hour < 12 ? '오전' : '오후'),\n  relativeTime: {\n    future: '%s 후',\n    past: '%s 전',\n    s: '몇 초',\n    m: '1분',\n    mm: '%d분',\n    h: '한 시간',\n    hh: '%d시간',\n    d: '하루',\n    dd: '%d일',\n    M: '한 달',\n    MM: '%d달',\n    y: '일 년',\n    yy: '%d년'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ku.js",
    "content": "// Kurdish [ku]\nimport dayjs from 'dayjs'\n\nexport const englishToArabicNumbersMap = {\n  1: '١',\n  2: '٢',\n  3: '٣',\n  4: '٤',\n  5: '٥',\n  6: '٦',\n  7: '٧',\n  8: '٨',\n  9: '٩',\n  0: '٠'\n}\n\nconst arabicToEnglishNumbersMap = {\n  '١': '1',\n  '٢': '2',\n  '٣': '3',\n  '٤': '4',\n  '٥': '5',\n  '٦': '6',\n  '٧': '7',\n  '٨': '8',\n  '٩': '9',\n  '٠': '0'\n}\n\nconst months = [\n  'کانوونی دووەم',\n  'شوبات',\n  'ئادار',\n  'نیسان',\n  'ئایار',\n  'حوزەیران',\n  'تەممووز',\n  'ئاب',\n  'ئەیلوول',\n  'تشرینی یەکەم',\n  'تشرینی دووەم',\n  'کانوونی یەکەم'\n]\n\nconst locale = {\n  name: 'ku',\n  months,\n  monthsShort: months,\n  weekdays: 'یەکشەممە_دووشەممە_سێشەممە_چوارشەممە_پێنجشەممە_هەینی_شەممە'.split('_'),\n  weekdaysShort: 'یەکشەم_دووشەم_سێشەم_چوارشەم_پێنجشەم_هەینی_شەممە'.split('_'),\n  weekStart: 6,\n  weekdaysMin: 'ی_د_س_چ_پ_هـ_ش'.split('_'),\n  preparse(string) {\n    return string\n      .replace(/[١٢٣٤٥٦٧٨٩٠]/g, match => arabicToEnglishNumbersMap[match])\n      .replace(/،/g, ',')\n  },\n  postformat(string) {\n    return string\n      .replace(/\\d/g, match => englishToArabicNumbersMap[match])\n      .replace(/,/g, '،')\n  },\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  meridiem: hour => (hour < 12 ? 'پ.ن' : 'د.ن'),\n  relativeTime: {\n    future: 'لە %s',\n    past: 'لەمەوپێش %s',\n    s: 'چەند چرکەیەک',\n    m: 'یەک خولەک',\n    mm: '%d خولەک',\n    h: 'یەک کاتژمێر',\n    hh: '%d کاتژمێر',\n    d: 'یەک ڕۆژ',\n    dd: '%d ڕۆژ',\n    M: 'یەک مانگ',\n    MM: '%d مانگ',\n    y: 'یەک ساڵ',\n    yy: '%d ساڵ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ky.js",
    "content": "// Kyrgyz [ky]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ky',\n  weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n  months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n  monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n  weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s ичинде',\n    past: '%s мурун',\n    s: 'бирнече секунд',\n    m: 'бир мүнөт',\n    mm: '%d мүнөт',\n    h: 'бир саат',\n    hh: '%d саат',\n    d: 'бир күн',\n    dd: '%d күн',\n    M: 'бир ай',\n    MM: '%d ай',\n    y: 'бир жыл',\n    yy: '%d жыл'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/lb.js",
    "content": "// Luxembourgish [lb]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'lb',\n  weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n  months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n  monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n  weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'H:mm [Auer]',\n    LTS: 'H:mm:ss [Auer]',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm [Auer]',\n    LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/lo.js",
    "content": "// Lao [lo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'lo',\n  weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n  months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n  weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n  monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n  weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'ວັນdddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'ອີກ %s',\n    past: '%sຜ່ານມາ',\n    s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n    m: '1 ນາທີ',\n    mm: '%d ນາທີ',\n    h: '1 ຊົ່ວໂມງ',\n    hh: '%d ຊົ່ວໂມງ',\n    d: '1 ມື້',\n    dd: '%d ມື້',\n    M: '1 ເດືອນ',\n    MM: '%d ເດືອນ',\n    y: '1 ປີ',\n    yy: '%d ປີ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/lt.js",
    "content": "// Lithuanian [lt]\nimport dayjs from 'dayjs'\n\nconst monthFormat = 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_')\nconst monthStandalone = 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_')\n// eslint-disable-next-line no-useless-escape\nconst MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst locale = {\n  name: 'lt',\n  weekdays: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n  weekdaysShort: 'sek_pir_ant_tre_ket_pen_šeš'.split('_'),\n  weekdaysMin: 's_p_a_t_k_pn_š'.split('_'),\n  months,\n  monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  relativeTime: {\n    future: 'už %s',\n    past: 'prieš %s',\n    s: 'kelias sekundes',\n    m: 'minutę',\n    mm: '%d minutes',\n    h: 'valandą',\n    hh: '%d valandas',\n    d: 'dieną',\n    dd: '%d dienas',\n    M: 'mėnesį',\n    MM: '%d mėnesius',\n    y: 'metus',\n    yy: '%d metus'\n  },\n  format: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'YYYY [m.] MMMM D [d.]',\n    LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n    LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n    l: 'YYYY-MM-DD',\n    ll: 'YYYY [m.] MMMM D [d.]',\n    lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n    llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'YYYY [m.] MMMM D [d.]',\n    LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n    LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n    l: 'YYYY-MM-DD',\n    ll: 'YYYY [m.] MMMM D [d.]',\n    lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n    llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/lv.js",
    "content": "// Latvian [lv]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'lv',\n  weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n  months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n  weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY.',\n    LL: 'YYYY. [gada] D. MMMM',\n    LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n    LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n  },\n  relativeTime: {\n    future: 'pēc %s',\n    past: 'pirms %s',\n    s: 'dažām sekundēm',\n    m: 'minūtes',\n    mm: '%d minūtēm',\n    h: 'stundas',\n    hh: '%d stundām',\n    d: 'dienas',\n    dd: '%d dienām',\n    M: 'mēneša',\n    MM: '%d mēnešiem',\n    y: 'gada',\n    yy: '%d gadiem'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/me.js",
    "content": "// Montenegrin [me]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'me',\n  weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n  months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n  monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n  weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd, D. MMMM YYYY H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/mi.js",
    "content": "// Maori [mi]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'mi',\n  weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n  months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n  monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n  weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY [i] HH:mm',\n    LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n  },\n  relativeTime: {\n    future: 'i roto i %s',\n    past: '%s i mua',\n    s: 'te hēkona ruarua',\n    m: 'he meneti',\n    mm: '%d meneti',\n    h: 'te haora',\n    hh: '%d haora',\n    d: 'he ra',\n    dd: '%d ra',\n    M: 'he marama',\n    MM: '%d marama',\n    y: 'he tau',\n    yy: '%d tau'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/mk.js",
    "content": "// Macedonian [mk]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'mk',\n  weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n  months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n  monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n  weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'D.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY H:mm',\n    LLLL: 'dddd, D MMMM YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'после %s',\n    past: 'пред %s',\n    s: 'неколку секунди',\n    m: 'минута',\n    mm: '%d минути',\n    h: 'час',\n    hh: '%d часа',\n    d: 'ден',\n    dd: '%d дена',\n    M: 'месец',\n    MM: '%d месеци',\n    y: 'година',\n    yy: '%d години'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ml.js",
    "content": "// Malayalam [ml]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ml',\n  weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n  months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n  weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n  monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n  weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm -നു',\n    LTS: 'A h:mm:ss -നു',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm -നു',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm -നു'\n  },\n  relativeTime: {\n    future: '%s കഴിഞ്ഞ്',\n    past: '%s മുൻപ്',\n    s: 'അൽപ നിമിഷങ്ങൾ',\n    m: 'ഒരു മിനിറ്റ്',\n    mm: '%d മിനിറ്റ്',\n    h: 'ഒരു മണിക്കൂർ',\n    hh: '%d മണിക്കൂർ',\n    d: 'ഒരു ദിവസം',\n    dd: '%d ദിവസം',\n    M: 'ഒരു മാസം',\n    MM: '%d മാസം',\n    y: 'ഒരു വർഷം',\n    yy: '%d വർഷം'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/mn.js",
    "content": "// Mongolian [mn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'mn',\n  weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n  months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n  weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n  monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n  weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'YYYY оны MMMMын D',\n    LLL: 'YYYY оны MMMMын D HH:mm',\n    LLLL: 'dddd, YYYY оны MMMMын D HH:mm'\n  },\n  relativeTime: {\n    future: '%s',\n    past: '%s',\n    s: 'саяхан',\n    m: 'м',\n    mm: '%dм',\n    h: '1ц',\n    hh: '%dц',\n    d: '1ө',\n    dd: '%dө',\n    M: '1с',\n    MM: '%dс',\n    y: '1ж',\n    yy: '%dж'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/mr.js",
    "content": "// Marathi [mr]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'mr',\n  weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n  months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n  weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n  monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n  weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm वाजता',\n    LTS: 'A h:mm:ss वाजता',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm वाजता',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ms-my.js",
    "content": "// Malay [ms-my]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ms-my',\n  weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n  months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n  monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n  weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY [pukul] HH.mm',\n    LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n  },\n  relativeTime: {\n    future: 'dalam %s',\n    past: '%s yang lepas',\n    s: 'beberapa saat',\n    m: 'seminit',\n    mm: '%d minit',\n    h: 'sejam',\n    hh: '%d jam',\n    d: 'sehari',\n    dd: '%d hari',\n    M: 'sebulan',\n    MM: '%d bulan',\n    y: 'setahun',\n    yy: '%d tahun'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ms.js",
    "content": "// Malay [ms]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ms',\n  weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n  weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n  weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n  months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n  monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH.mm',\n    LLLL: 'dddd, D MMMM YYYY HH.mm'\n  },\n  relativeTime: {\n    future: 'dalam %s',\n    past: '%s yang lepas',\n    s: 'beberapa saat',\n    m: 'seminit',\n    mm: '%d minit',\n    h: 'sejam',\n    hh: '%d jam',\n    d: 'sehari',\n    dd: '%d hari',\n    M: 'sebulan',\n    MM: '%d bulan',\n    y: 'setahun',\n    yy: '%d tahun'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/mt.js",
    "content": "// Maltese (Malta) [mt]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'mt',\n  weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n  months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n  monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n  weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'f’ %s',\n    past: '%s ilu',\n    s: 'ftit sekondi',\n    m: 'minuta',\n    mm: '%d minuti',\n    h: 'siegħa',\n    hh: '%d siegħat',\n    d: 'ġurnata',\n    dd: '%d ġranet',\n    M: 'xahar',\n    MM: '%d xhur',\n    y: 'sena',\n    yy: '%d sni'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/my.js",
    "content": "// Burmese [my]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'my',\n  weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n  months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n  monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n  weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'လာမည့် %s မှာ',\n    past: 'လွန်ခဲ့သော %s က',\n    s: 'စက္ကန်.အနည်းငယ်',\n    m: 'တစ်မိနစ်',\n    mm: '%d မိနစ်',\n    h: 'တစ်နာရီ',\n    hh: '%d နာရီ',\n    d: 'တစ်ရက်',\n    dd: '%d ရက်',\n    M: 'တစ်လ',\n    MM: '%d လ',\n    y: 'တစ်နှစ်',\n    yy: '%d နှစ်'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/nb.js",
    "content": "// Norwegian Bokmål [nb]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'nb',\n  weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n  weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n  weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n  months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n  monthsShort: 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY [kl.] HH:mm',\n    LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n  },\n  relativeTime: {\n    future: 'om %s',\n    past: '%s siden',\n    s: 'noen sekunder',\n    m: 'ett minutt',\n    mm: '%d minutter',\n    h: 'en time',\n    hh: '%d timer',\n    d: 'en dag',\n    dd: '%d dager',\n    M: 'en måned',\n    MM: '%d måneder',\n    y: 'ett år',\n    yy: '%d år'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ne.js",
    "content": "// Nepalese [ne]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ne',\n  weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n  weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n  weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n  months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n  monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n  relativeTime: {\n    future: '%s पछि',\n    past: '%s अघि',\n    s: 'सेकेन्ड',\n    m: 'एक मिनेट',\n    mm: '%d मिनेट',\n    h: 'घन्टा',\n    hh: '%d घन्टा',\n    d: 'एक दिन',\n    dd: '%d दिन',\n    M: 'एक महिना',\n    MM: '%d महिना',\n    y: 'एक वर्ष',\n    yy: '%d वर्ष'\n  },\n  ordinal: n => `${n}`.replace(/\\d/g, i => '०१२३४५६७८९'[i]),\n  formats: {\n    LT: 'Aको h:mm बजे',\n    LTS: 'Aको h:mm:ss बजे',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, Aको h:mm बजे',\n    LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/nl-be.js",
    "content": "// Dutch (Belgium) [nl-be]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'nl-be',\n  weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n  months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n  monthsShort: 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n  weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'over %s',\n    past: '%s geleden',\n    s: 'een paar seconden',\n    m: 'één minuut',\n    mm: '%d minuten',\n    h: 'één uur',\n    hh: '%d uur',\n    d: 'één dag',\n    dd: '%d dagen',\n    M: 'één maand',\n    MM: '%d maanden',\n    y: 'één jaar',\n    yy: '%d jaar'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/nl.js",
    "content": "// Dutch [nl]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'nl',\n  weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n  weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n  weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n  months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n  monthsShort: 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n  ordinal: n => `[${n}${n === 1 || n === 8 || n >= 20 ? 'ste' : 'de'}]`,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD-MM-YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'over %s',\n    past: '%s geleden',\n    s: 'een paar seconden',\n    m: 'een minuut',\n    mm: '%d minuten',\n    h: 'een uur',\n    hh: '%d uur',\n    d: 'een dag',\n    dd: '%d dagen',\n    M: 'een maand',\n    MM: '%d maanden',\n    y: 'een jaar',\n    yy: '%d jaar'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/nn.js",
    "content": "// Nynorsk [nn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'nn',\n  weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n  weekdaysShort: 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n  weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n  months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  relativeTime: {\n    future: 'om %s',\n    past: 'for %s sidan',\n    s: 'nokre sekund',\n    m: 'eitt minutt',\n    mm: '%d minutt',\n    h: 'ein time',\n    hh: '%d timar',\n    d: 'ein dag',\n    dd: '%d dagar',\n    M: 'ein månad',\n    MM: '%d månadar',\n    y: 'eitt år',\n    yy: '%d år'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY [kl.] H:mm',\n    LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/oc-lnc.js",
    "content": "// Occitan, lengadocian dialecte [oc-lnc]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'oc-lnc',\n  weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split('_'),\n  weekdaysShort: 'Dg_Dl_Dm_Dc_Dj_Dv_Ds'.split('_'),\n  weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n  months: 'genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split('_'),\n  monthsShort: 'gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM [de] YYYY',\n    LLL: 'D MMMM [de] YYYY [a] H:mm',\n    LLLL: 'dddd D MMMM [de] YYYY [a] H:mm'\n  },\n  relativeTime: {\n    future: 'd\\'aquí %s',\n    past: 'fa %s',\n    s: 'unas segondas',\n    m: 'una minuta',\n    mm: '%d minutas',\n    h: 'una ora',\n    hh: '%d oras',\n    d: 'un jorn',\n    dd: '%d jorns',\n    M: 'un mes',\n    MM: '%d meses',\n    y: 'un an',\n    yy: '%d ans'\n  },\n  ordinal: n => `${n}º`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/pa-in.js",
    "content": "// Punjabi (India) [pa-in]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'pa-in',\n  weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n  months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n  weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n  monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n  weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm ਵਜੇ',\n    LTS: 'A h:mm:ss ਵਜੇ',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n  },\n  relativeTime: {\n    future: '%s ਵਿੱਚ',\n    past: '%s ਪਿਛਲੇ',\n    s: 'ਕੁਝ ਸਕਿੰਟ',\n    m: 'ਇਕ ਮਿੰਟ',\n    mm: '%d ਮਿੰਟ',\n    h: 'ਇੱਕ ਘੰਟਾ',\n    hh: '%d ਘੰਟੇ',\n    d: 'ਇੱਕ ਦਿਨ',\n    dd: '%d ਦਿਨ',\n    M: 'ਇੱਕ ਮਹੀਨਾ',\n    MM: '%d ਮਹੀਨੇ',\n    y: 'ਇੱਕ ਸਾਲ',\n    yy: '%d ਸਾਲ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/pl.js",
    "content": "// Polish [pl]\nimport dayjs from 'dayjs'\n\nfunction plural(n) {\n  return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1) // eslint-disable-line\n}\n/* eslint-disable */ \nfunction translate(number, withoutSuffix, key) {\n  const result = `${number} `\n  switch (key) {\n    case 'm':\n      return withoutSuffix ? 'minuta' : 'minutę'\n    case 'mm':\n      return result + (plural(number) ? 'minuty' : 'minut')\n    case 'h':\n      return withoutSuffix ? 'godzina' : 'godzinę'\n    case 'hh':\n      return result + (plural(number) ? 'godziny' : 'godzin')\n    case 'MM':\n      return result + (plural(number) ? 'miesiące' : 'miesięcy')\n    case 'yy':\n      return result + (plural(number) ? 'lata' : 'lat')\n  }\n}\n/* eslint-enable */\n\nconst monthFormat = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_')\nconst monthStandalone = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_')\nconst MONTHS_IN_FORMAT = /D MMMM/\n\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst locale = {\n  name: 'pl',\n  weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n  weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n  weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n  months,\n  monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n  ordinal: n => `${n}.`,\n  weekStart: 1,\n  yearStart: 4,\n  relativeTime: {\n    future: 'za %s',\n    past: '%s temu',\n    s: 'kilka sekund',\n    m: translate,\n    mm: translate,\n    h: translate,\n    hh: translate,\n    d: '1 dzień',\n    dd: '%d dni',\n    M: 'miesiąc',\n    MM: translate,\n    y: 'rok',\n    yy: translate\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/pt-br.js",
    "content": "// Portuguese (Brazil) [pt-br]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'pt-br',\n  weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),\n  weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n  weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n  months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n  monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n  ordinal: n => `${n}º`,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n  },\n  relativeTime: {\n    future: 'em %s',\n    past: 'há %s',\n    s: 'poucos segundos',\n    m: 'um minuto',\n    mm: '%d minutos',\n    h: 'uma hora',\n    hh: '%d horas',\n    d: 'um dia',\n    dd: '%d dias',\n    M: 'um mês',\n    MM: '%d meses',\n    y: 'um ano',\n    yy: '%d anos'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/pt.js",
    "content": "// Portuguese [pt]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'pt',\n  weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),\n  weekdaysShort: 'dom_seg_ter_qua_qui_sex_sab'.split('_'),\n  weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sa'.split('_'),\n  months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n  monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n  ordinal: n => `${n}º`,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D [de] MMMM [de] YYYY',\n    LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n    LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n  },\n  relativeTime: {\n    future: 'em %s',\n    past: 'há %s',\n    s: 'alguns segundos',\n    m: 'um minuto',\n    mm: '%d minutos',\n    h: 'uma hora',\n    hh: '%d horas',\n    d: 'um dia',\n    dd: '%d dias',\n    M: 'um mês',\n    MM: '%d meses',\n    y: 'um ano',\n    yy: '%d anos'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/rn.js",
    "content": "// Kirundi [rn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'rn',\n  weekdays: 'Ku wa Mungu_Ku wa Mbere_Ku wa Kabiri_Ku wa Gatatu_Ku wa Kane_Ku wa Gatanu_Ku wa Gatandatu'.split('_'),\n  weekdaysShort: 'Kngu_Kmbr_Kbri_Ktat_Kkan_Ktan_Kdat'.split('_'),\n  weekdaysMin: 'K7_K1_K2_K3_K4_K5_K6'.split('_'),\n  months: 'Nzero_Ruhuhuma_Ntwarante_Ndamukiza_Rusama_Ruhenshi_Mukakaro_Myandagaro_Nyakanga_Gitugutu_Munyonyo_Kigarama'.split('_'),\n  monthsShort: 'Nzer_Ruhuh_Ntwar_Ndam_Rus_Ruhen_Muk_Myand_Nyak_Git_Muny_Kig'.split('_'),\n  weekStart: 1,\n  ordinal: n => n,\n  relativeTime: {\n    future: 'mu %s',\n    past: '%s',\n    s: 'amasegonda',\n    m: 'Umunota',\n    mm: '%d iminota',\n    h: 'isaha',\n    hh: '%d amasaha',\n    d: 'Umunsi',\n    dd: '%d iminsi',\n    M: 'ukwezi',\n    MM: '%d amezi',\n    y: 'umwaka',\n    yy: '%d imyaka'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ro.js",
    "content": "// Romanian [ro]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ro',\n  weekdays: 'Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă'.split('_'),\n  weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n  weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n  months: 'Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie'.split('_'),\n  monthsShort: 'Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY H:mm',\n    LLLL: 'dddd, D MMMM YYYY H:mm'\n  },\n  relativeTime: {\n    future: 'peste %s',\n    past: 'acum %s',\n    s: 'câteva secunde',\n    m: 'un minut',\n    mm: '%d minute',\n    h: 'o oră',\n    hh: '%d ore',\n    d: 'o zi',\n    dd: '%d zile',\n    M: 'o lună',\n    MM: '%d luni',\n    y: 'un an',\n    yy: '%d ani'\n  },\n  ordinal: n => n\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ru.js",
    "content": "// Russian [ru]\nimport dayjs from 'dayjs'\n\nconst monthFormat = 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')\nconst monthStandalone = 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n\nconst monthShortFormat = 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_')\nconst monthShortStandalone = 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n\nconst MONTHS_IN_FORMAT = /D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/\n\nfunction plural(word, num) {\n  const forms = word.split('_')\n  return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]) // eslint-disable-line\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n  const format = {\n    mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n    hh: 'час_часа_часов',\n    dd: 'день_дня_дней',\n    MM: 'месяц_месяца_месяцев',\n    yy: 'год_года_лет'\n  }\n  if (key === 'm') {\n    return withoutSuffix ? 'минута' : 'минуту'\n  }\n\n  return `${number} ${plural(format[key], +number)}`\n}\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst monthsShort = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthShortFormat[dayjsInstance.month()]\n  }\n  return monthShortStandalone[dayjsInstance.month()]\n}\nmonthsShort.s = monthShortStandalone\nmonthsShort.f = monthShortFormat\n\nconst locale = {\n  name: 'ru',\n  weekdays: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n  weekdaysShort: 'вск_пнд_втр_срд_чтв_птн_сбт'.split('_'),\n  weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n  months,\n  monthsShort,\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY г.',\n    LLL: 'D MMMM YYYY г., H:mm',\n    LLLL: 'dddd, D MMMM YYYY г., H:mm'\n  },\n  relativeTime: {\n    future: 'через %s',\n    past: '%s назад',\n    s: 'несколько секунд',\n    m: relativeTimeWithPlural,\n    mm: relativeTimeWithPlural,\n    h: 'час',\n    hh: relativeTimeWithPlural,\n    d: 'день',\n    dd: relativeTimeWithPlural,\n    M: 'месяц',\n    MM: relativeTimeWithPlural,\n    y: 'год',\n    yy: relativeTimeWithPlural\n  },\n  ordinal: n => n,\n  meridiem: (hour) => {\n    if (hour < 4) {\n      return 'ночи'\n    } else if (hour < 12) {\n      return 'утра'\n    } else if (hour < 17) {\n      return 'дня'\n    }\n    return 'вечера'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/rw.js",
    "content": "// Kinyarwanda (Rwanda) [rw]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'rw',\n  weekdays: 'Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu'.split('_'),\n  months: 'Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza'.split('_'),\n  relativeTime: {\n    future: 'mu %s',\n    past: '%s',\n    s: 'amasegonda',\n    m: 'Umunota',\n    mm: '%d iminota',\n    h: 'isaha',\n    hh: '%d amasaha',\n    d: 'Umunsi',\n    dd: '%d iminsi',\n    M: 'ukwezi',\n    MM: '%d amezi',\n    y: 'umwaka',\n    yy: '%d imyaka'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  ordinal: n => n\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/sd.js",
    "content": "// Sindhi [sd]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'sd',\n  weekdays: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'),\n  months: 'جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'),\n  monthsShort: 'جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر'.split('_'),\n  weekdaysMin: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd، D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s پوء',\n    past: '%s اڳ',\n    s: 'چند سيڪنڊ',\n    m: 'هڪ منٽ',\n    mm: '%d منٽ',\n    h: 'هڪ ڪلاڪ',\n    hh: '%d ڪلاڪ',\n    d: 'هڪ ڏينهن',\n    dd: '%d ڏينهن',\n    M: 'هڪ مهينو',\n    MM: '%d مهينا',\n    y: 'هڪ سال',\n    yy: '%d سال'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/se.js",
    "content": "// Northern Sami [se]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'se',\n  weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n  months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n  monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n  weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'MMMM D. [b.] YYYY',\n    LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n    LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n  },\n  relativeTime: {\n    future: '%s geažes',\n    past: 'maŋit %s',\n    s: 'moadde sekunddat',\n    m: 'okta minuhta',\n    mm: '%d minuhtat',\n    h: 'okta diimmu',\n    hh: '%d diimmut',\n    d: 'okta beaivi',\n    dd: '%d beaivvit',\n    M: 'okta mánnu',\n    MM: '%d mánut',\n    y: 'okta jahki',\n    yy: '%d jagit'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/si.js",
    "content": "// Sinhalese [si]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'si',\n  weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n  months: 'දුරුතු_නවම්_මැදින්_බක්_වෙසක්_පොසොන්_ඇසළ_නිකිණි_බිනර_වප්_ඉල්_උඳුවප්'.split('_'),\n  weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n  monthsShort: 'දුරු_නව_මැදි_බක්_වෙස_පොසො_ඇස_නිකි_බින_වප්_ඉල්_උඳු'.split('_'),\n  weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'a h:mm',\n    LTS: 'a h:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY MMMM D',\n    LLL: 'YYYY MMMM D, a h:mm',\n    LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n  },\n  relativeTime: {\n    future: '%sකින්',\n    past: '%sකට පෙර',\n    s: 'තත්පර කිහිපය',\n    m: 'විනාඩිය',\n    mm: 'විනාඩි %d',\n    h: 'පැය',\n    hh: 'පැය %d',\n    d: 'දිනය',\n    dd: 'දින %d',\n    M: 'මාසය',\n    MM: 'මාස %d',\n    y: 'වසර',\n    yy: 'වසර %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/sk.js",
    "content": "// Slovak [sk]\nimport dayjs from 'dayjs'\n\nfunction plural(n) {\n  return (n > 1) && (n < 5) && (~~(n / 10) !== 1) // eslint-disable-line\n}\n\n/* eslint-disable */\nfunction translate(number, withoutSuffix, key, isFuture) {\n  const result = `${number} `\n  switch (key) {\n    case 's': // a few seconds / in a few seconds / a few seconds ago\n      return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'\n    case 'm': // a minute / in a minute / a minute ago\n      return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou')\n    case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'minúty' : 'minút')\n      }\n      return `${result}minútami`\n    case 'h': // an hour / in an hour / an hour ago\n      return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou')\n    case 'hh': // 9 hours / in 9 hours / 9 hours ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'hodiny' : 'hodín')\n      }\n      return `${result}hodinami`\n    case 'd': // a day / in a day / a day ago\n      return (withoutSuffix || isFuture) ? 'deň' : 'dňom'\n    case 'dd': // 9 days / in 9 days / 9 days ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'dni' : 'dní')\n      }\n      return `${result}dňami`\n    case 'M': // a month / in a month / a month ago\n      return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'\n    case 'MM': // 9 months / in 9 months / 9 months ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'mesiace' : 'mesiacov')\n      }\n      return `${result}mesiacmi`\n    case 'y': // a year / in a year / a year ago\n      return (withoutSuffix || isFuture) ? 'rok' : 'rokom'\n    case 'yy': // 9 years / in 9 years / 9 years ago\n      if (withoutSuffix || isFuture) {\n        return result + (plural(number) ? 'roky' : 'rokov')\n      }\n      return `${result}rokmi`\n  }\n}\n/* eslint-enable */\nconst locale = {\n  name: 'sk',\n  weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n  weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n  weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n  months: 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd D. MMMM YYYY H:mm',\n    l: 'D. M. YYYY'\n  },\n  relativeTime: {\n    future: 'za %s', // Should be `o %s` (change when moment/moment#5408 is fixed)\n    past: 'pred %s',\n    s: translate,\n    m: translate,\n    mm: translate,\n    h: translate,\n    hh: translate,\n    d: translate,\n    dd: translate,\n    M: translate,\n    MM: translate,\n    y: translate,\n    yy: translate\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/sl.js",
    "content": "// Slovenian [sl]\nimport dayjs from 'dayjs'\n\nfunction dual(n) {\n  return (n % 100) == 2 // eslint-disable-line\n}\n\nfunction threeFour(n) {\n  return (n % 100) == 3 || (n % 100) == 4 // eslint-disable-line\n}\n\n/* eslint-disable */\nfunction translate(number, withoutSuffix, key, isFuture) {\n  const result = `${number} `\n  switch (key) {\n    case 's': // a few seconds / in a few seconds / a few seconds ago\n      return (withoutSuffix || isFuture) ? 'nekaj sekund' : 'nekaj sekundami'\n    case 'm': // a minute / in a minute / a minute ago\n      return withoutSuffix ? 'ena minuta' : 'eno minuto'\n    case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n      if (dual(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'minuti' : 'minutama')\n      }\n      if (threeFour(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'minute' : 'minutami')\n      }\n      return result + ((withoutSuffix || isFuture) ? 'minut' : 'minutami')\n    case 'h': // an hour / in an hour / an hour ago\n      return withoutSuffix ? 'ena ura' : (isFuture ? 'eno uro' : 'eno uro')\n    case 'hh': // 9 hours / in 9 hours / 9 hours ago\n      if (dual(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'uri' : 'urama')\n      }\n      if (threeFour(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'ure' : 'urami')\n      }\n      return result + ((withoutSuffix || isFuture) ? 'ur' : 'urami')\n    case 'd': // a day / in a day / a day ago\n      return (withoutSuffix || isFuture) ? 'en dan' : 'enim dnem'\n    case 'dd': // 9 days / in 9 days / 9 days ago\n      if (dual(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'dneva' : 'dnevoma')\n      }\n      return result + ((withoutSuffix || isFuture) ? 'dni' : 'dnevi')\n    case 'M': // a month / in a month / a month ago\n      return (withoutSuffix || isFuture) ? 'en mesec' : 'enim mesecem'\n    case 'MM': // 9 months / in 9 months / 9 months ago\n      if (dual(number)) { // 2 minutes / in 2 minutes\n        return result + ((withoutSuffix || isFuture) ? 'meseca' : 'mesecema')\n      }\n      if (threeFour(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'mesece' : 'meseci')\n      }\n      return result + ((withoutSuffix || isFuture) ? 'mesecev' : 'meseci')\n    case 'y': // a year / in a year / a year ago\n      return (withoutSuffix || isFuture) ? 'eno leto' : 'enim letom'\n    case 'yy': // 9 years / in 9 years / 9 years ago\n      if (dual(number)) { // 2 minutes / in 2 minutes\n        return result + ((withoutSuffix || isFuture) ? 'leti' : 'letoma')\n      }\n      if (threeFour(number)) {\n        return result + ((withoutSuffix || isFuture) ? 'leta' : 'leti')\n      }\n      return result + ((withoutSuffix || isFuture) ? 'let' : 'leti')\n  }\n}\n\n/* eslint-enable */\nconst locale = {\n  name: 'sl',\n  weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n  months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n  monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n  weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY H:mm',\n    LLLL: 'dddd, D. MMMM YYYY H:mm',\n    l: 'D. M. YYYY'\n  },\n  relativeTime: {\n    future: 'čez %s',\n    past: 'pred %s',\n    s: translate,\n    m: translate,\n    mm: translate,\n    h: translate,\n    hh: translate,\n    d: translate,\n    dd: translate,\n    M: translate,\n    MM: translate,\n    y: translate,\n    yy: translate\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/sq.js",
    "content": "// Albanian [sq]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'sq',\n  weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n  months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n  monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n  weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'në %s',\n    past: '%s më parë',\n    s: 'disa sekonda',\n    m: 'një minutë',\n    mm: '%d minuta',\n    h: 'një orë',\n    hh: '%d orë',\n    d: 'një ditë',\n    dd: '%d ditë',\n    M: 'një muaj',\n    MM: '%d muaj',\n    y: 'një vit',\n    yy: '%d vite'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/sr-cyrl.js",
    "content": "// Serbian Cyrillic [sr-cyrl]\nimport dayjs from 'dayjs'\n\nconst translator = {\n  words: {\n    m: ['један минут', 'једног минута'],\n    mm: ['%d минут', '%d минута', '%d минута'],\n    h: ['један сат', 'једног сата'],\n    hh: ['%d сат', '%d сата', '%d сати'],\n    d: ['један дан', 'једног дана'],\n    dd: ['%d дан', '%d дана', '%d дана'],\n    M: ['један месец', 'једног месеца'],\n    MM: ['%d месец', '%d месеца', '%d месеци'],\n    y: ['једну годину', 'једне године'],\n    yy: ['%d годину', '%d године', '%d година']\n  },\n  correctGrammarCase(number, wordKey) {\n    if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) {\n      return number % 10 === 1 ? wordKey[0] : wordKey[1]\n    }\n    return wordKey[2]\n  },\n  relativeTimeFormatter(number, withoutSuffix, key, isFuture) {\n    const wordKey = translator.words[key]\n\n    if (key.length === 1) {\n      // Nominativ\n      if (key === 'y' && withoutSuffix) return 'једна година'\n      return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]\n    }\n\n    const word = translator.correctGrammarCase(number, wordKey)\n    // Nominativ\n    if (key === 'yy' && withoutSuffix && word === '%d годину') return `${number} година`\n\n    return word.replace('%d', number)\n  }\n}\n\nconst locale = {\n  name: 'sr-cyrl',\n  weekdays: 'Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота'.split('_'),\n  weekdaysShort: 'Нед._Пон._Уто._Сре._Чет._Пет._Суб.'.split('_'),\n  weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n  months: 'Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар'.split('_'),\n  monthsShort: 'Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.'.split('_'),\n  weekStart: 1,\n  relativeTime: {\n    future: 'за %s',\n    past: 'пре %s',\n    s: 'неколико секунди',\n    m: translator.relativeTimeFormatter,\n    mm: translator.relativeTimeFormatter,\n    h: translator.relativeTimeFormatter,\n    hh: translator.relativeTimeFormatter,\n    d: translator.relativeTimeFormatter,\n    dd: translator.relativeTimeFormatter,\n    M: translator.relativeTimeFormatter,\n    MM: translator.relativeTimeFormatter,\n    y: translator.relativeTimeFormatter,\n    yy: translator.relativeTimeFormatter\n  },\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'D. M. YYYY.',\n    LL: 'D. MMMM YYYY.',\n    LLL: 'D. MMMM YYYY. H:mm',\n    LLLL: 'dddd, D. MMMM YYYY. H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/sr.js",
    "content": "// Serbian [sr]\nimport dayjs from 'dayjs'\n\nconst translator = {\n  words: {\n    m: ['jedan minut', 'jednog minuta'],\n    mm: ['%d minut', '%d minuta', '%d minuta'],\n    h: ['jedan sat', 'jednog sata'],\n    hh: ['%d sat', '%d sata', '%d sati'],\n    d: ['jedan dan', 'jednog dana'],\n    dd: ['%d dan', '%d dana', '%d dana'],\n    M: ['jedan mesec', 'jednog meseca'],\n    MM: ['%d mesec', '%d meseca', '%d meseci'],\n    y: ['jednu godinu', 'jedne godine'],\n    yy: ['%d godinu', '%d godine', '%d godina']\n  },\n  correctGrammarCase(number, wordKey) {\n    if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) {\n      return number % 10 === 1 ? wordKey[0] : wordKey[1]\n    }\n    return wordKey[2]\n  },\n  relativeTimeFormatter(number, withoutSuffix, key, isFuture) {\n    const wordKey = translator.words[key]\n\n    if (key.length === 1) {\n      // Nominativ\n      if (key === 'y' && withoutSuffix) return 'jedna godina'\n      return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]\n    }\n\n    const word = translator.correctGrammarCase(number, wordKey)\n    // Nominativ\n    if (key === 'yy' && withoutSuffix && word === '%d godinu') return `${number} godina`\n\n    return word.replace('%d', number)\n  }\n}\n\nconst locale = {\n  name: 'sr',\n  weekdays: 'Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota'.split('_'),\n  weekdaysShort: 'Ned._Pon._Uto._Sre._Čet._Pet._Sub.'.split('_'),\n  weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n  months: 'Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar'.split('_'),\n  monthsShort: 'Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.'.split('_'),\n  weekStart: 1,\n  relativeTime: {\n    future: 'za %s',\n    past: 'pre %s',\n    s: 'nekoliko sekundi',\n    m: translator.relativeTimeFormatter,\n    mm: translator.relativeTimeFormatter,\n    h: translator.relativeTimeFormatter,\n    hh: translator.relativeTimeFormatter,\n    d: translator.relativeTimeFormatter,\n    dd: translator.relativeTimeFormatter,\n    M: translator.relativeTimeFormatter,\n    MM: translator.relativeTimeFormatter,\n    y: translator.relativeTimeFormatter,\n    yy: translator.relativeTimeFormatter\n  },\n  ordinal: n => `${n}.`,\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'D. M. YYYY.',\n    LL: 'D. MMMM YYYY.',\n    LLL: 'D. MMMM YYYY. H:mm',\n    LLLL: 'dddd, D. MMMM YYYY. H:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/ss.js",
    "content": "// siSwati [ss]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ss',\n  weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n  months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n  monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n  weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'nga %s',\n    past: 'wenteka nga %s',\n    s: 'emizuzwana lomcane',\n    m: 'umzuzu',\n    mm: '%d emizuzu',\n    h: 'lihora',\n    hh: '%d emahora',\n    d: 'lilanga',\n    dd: '%d emalanga',\n    M: 'inyanga',\n    MM: '%d tinyanga',\n    y: 'umnyaka',\n    yy: '%d iminyaka'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/sv-fi.js",
    "content": "// Finland Swedish [sv-fi]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'sv-fi',\n  weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n  weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n  weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n  months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  ordinal: (n) => {\n    const b = n % 10\n    const o = (b === 1) || (b === 2) ? 'a' : 'e'\n    return `[${n}${o}]`\n  },\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM YYYY',\n    LLL: 'D. MMMM YYYY, [kl.] HH.mm',\n    LLLL: 'dddd, D. MMMM YYYY, [kl.] HH.mm',\n    l: 'D.M.YYYY',\n    ll: 'D. MMM YYYY',\n    lll: 'D. MMM YYYY, [kl.] HH.mm',\n    llll: 'ddd, D. MMM YYYY, [kl.] HH.mm'\n  },\n  relativeTime: {\n    future: 'om %s',\n    past: 'för %s sedan',\n    s: 'några sekunder',\n    m: 'en minut',\n    mm: '%d minuter',\n    h: 'en timme',\n    hh: '%d timmar',\n    d: 'en dag',\n    dd: '%d dagar',\n    M: 'en månad',\n    MM: '%d månader',\n    y: 'ett år',\n    yy: '%d år'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/sv.js",
    "content": "// Swedish [sv]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'sv',\n  weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n  weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n  weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n  months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n  monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n  weekStart: 1,\n  yearStart: 4,\n  ordinal: (n) => {\n    const b = n % 10\n    const o = (b === 1) || (b === 2) ? 'a' : 'e'\n    return `[${n}${o}]`\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY [kl.] HH:mm',\n    LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n    lll: 'D MMM YYYY HH:mm',\n    llll: 'ddd D MMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'om %s',\n    past: 'för %s sedan',\n    s: 'några sekunder',\n    m: 'en minut',\n    mm: '%d minuter',\n    h: 'en timme',\n    hh: '%d timmar',\n    d: 'en dag',\n    dd: '%d dagar',\n    M: 'en månad',\n    MM: '%d månader',\n    y: 'ett år',\n    yy: '%d år'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/sw.js",
    "content": "// Swahili [sw]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'sw',\n  weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n  weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n  weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n  months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n  monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n  weekStart: 1,\n  ordinal: n => n,\n  relativeTime: {\n    future: '%s baadaye',\n    past: 'tokea %s',\n    s: 'hivi punde',\n    m: 'dakika moja',\n    mm: 'dakika %d',\n    h: 'saa limoja',\n    hh: 'masaa %d',\n    d: 'siku moja',\n    dd: 'masiku %d',\n    M: 'mwezi mmoja',\n    MM: 'miezi %d',\n    y: 'mwaka mmoja',\n    yy: 'miaka %d'\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ta.js",
    "content": "// Tamil [ta]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ta',\n  weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n  months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n  weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n  monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n  weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, HH:mm',\n    LLLL: 'dddd, D MMMM YYYY, HH:mm'\n  },\n  relativeTime: {\n    future: '%s இல்',\n    past: '%s முன்',\n    s: 'ஒரு சில விநாடிகள்',\n    m: 'ஒரு நிமிடம்',\n    mm: '%d நிமிடங்கள்',\n    h: 'ஒரு மணி நேரம்',\n    hh: '%d மணி நேரம்',\n    d: 'ஒரு நாள்',\n    dd: '%d நாட்கள்',\n    M: 'ஒரு மாதம்',\n    MM: '%d மாதங்கள்',\n    y: 'ஒரு வருடம்',\n    yy: '%d ஆண்டுகள்'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/te.js",
    "content": "// Telugu [te]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'te',\n  weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n  months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n  weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n  monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n  weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'A h:mm',\n    LTS: 'A h:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY, A h:mm',\n    LLLL: 'dddd, D MMMM YYYY, A h:mm'\n  },\n  relativeTime: {\n    future: '%s లో',\n    past: '%s క్రితం',\n    s: 'కొన్ని క్షణాలు',\n    m: 'ఒక నిమిషం',\n    mm: '%d నిమిషాలు',\n    h: 'ఒక గంట',\n    hh: '%d గంటలు',\n    d: 'ఒక రోజు',\n    dd: '%d రోజులు',\n    M: 'ఒక నెల',\n    MM: '%d నెలలు',\n    y: 'ఒక సంవత్సరం',\n    yy: '%d సంవత్సరాలు'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tet.js",
    "content": "// Tetun Dili (East Timor) [tet]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tet',\n  weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n  months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n  monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n  weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'iha %s',\n    past: '%s liuba',\n    s: 'minutu balun',\n    m: 'minutu ida',\n    mm: 'minutu %d',\n    h: 'oras ida',\n    hh: 'oras %d',\n    d: 'loron ida',\n    dd: 'loron %d',\n    M: 'fulan ida',\n    MM: 'fulan %d',\n    y: 'tinan ida',\n    yy: 'tinan %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tg.js",
    "content": "// Tajik [tg]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tg',\n  weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n  months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n  monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n  weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'баъди %s',\n    past: '%s пеш',\n    s: 'якчанд сония',\n    m: 'як дақиқа',\n    mm: '%d дақиқа',\n    h: 'як соат',\n    hh: '%d соат',\n    d: 'як рӯз',\n    dd: '%d рӯз',\n    M: 'як моҳ',\n    MM: '%d моҳ',\n    y: 'як сол',\n    yy: '%d сол'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/th.js",
    "content": "// Thai [th]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'th',\n  weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n  weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'),\n  weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n  months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n  monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n  formats: {\n    LT: 'H:mm',\n    LTS: 'H:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY เวลา H:mm',\n    LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm'\n  },\n  relativeTime: {\n    future: 'อีก %s',\n    past: '%sที่แล้ว',\n    s: 'ไม่กี่วินาที',\n    m: '1 นาที',\n    mm: '%d นาที',\n    h: '1 ชั่วโมง',\n    hh: '%d ชั่วโมง',\n    d: '1 วัน',\n    dd: '%d วัน',\n    M: '1 เดือน',\n    MM: '%d เดือน',\n    y: '1 ปี',\n    yy: '%d ปี'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tk.js",
    "content": "// Turkmen [tk]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tk',\n  weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split('_'),\n  weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n  weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n  months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split('_'),\n  monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s soň',\n    past: '%s öň',\n    s: 'birnäçe sekunt',\n    m: 'bir minut',\n    mm: '%d minut',\n    h: 'bir sagat',\n    hh: '%d sagat',\n    d: 'bir gün',\n    dd: '%d gün',\n    M: 'bir aý',\n    MM: '%d aý',\n    y: 'bir ýyl',\n    yy: '%d ýyl'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/tl-ph.js",
    "content": "// Tagalog (Philippines) [tl-ph]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tl-ph',\n  weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n  months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n  monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n  weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'MM/D/YYYY',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY HH:mm',\n    LLLL: 'dddd, MMMM DD, YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'sa loob ng %s',\n    past: '%s ang nakalipas',\n    s: 'ilang segundo',\n    m: 'isang minuto',\n    mm: '%d minuto',\n    h: 'isang oras',\n    hh: '%d oras',\n    d: 'isang araw',\n    dd: '%d araw',\n    M: 'isang buwan',\n    MM: '%d buwan',\n    y: 'isang taon',\n    yy: '%d taon'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tlh.js",
    "content": "// Klingon [tlh]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tlh',\n  weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n  months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n  monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n  weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tr.js",
    "content": "// Turkish [tr]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tr',\n  weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n  weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n  weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n  months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n  monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n  weekStart: 1,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s sonra',\n    past: '%s önce',\n    s: 'birkaç saniye',\n    m: 'bir dakika',\n    mm: '%d dakika',\n    h: 'bir saat',\n    hh: '%d saat',\n    d: 'bir gün',\n    dd: '%d gün',\n    M: 'bir ay',\n    MM: '%d ay',\n    y: 'bir yıl',\n    yy: '%d yıl'\n  },\n  ordinal: n => `${n}.`\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/tzl.js",
    "content": "// Talossan [tzl]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tzl',\n  weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n  months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n  monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n  weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH.mm',\n    LTS: 'HH.mm.ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D. MMMM [dallas] YYYY',\n    LLL: 'D. MMMM [dallas] YYYY HH.mm',\n    LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tzm-latn.js",
    "content": "// Central Atlas Tamazight Latin [tzm-latn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tzm-latn',\n  weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n  months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n  weekStart: 6,\n  weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n  monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n  weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'dadkh s yan %s',\n    past: 'yan %s',\n    s: 'imik',\n    m: 'minuḍ',\n    mm: '%d minuḍ',\n    h: 'saɛa',\n    hh: '%d tassaɛin',\n    d: 'ass',\n    dd: '%d ossan',\n    M: 'ayowr',\n    MM: '%d iyyirn',\n    y: 'asgas',\n    yy: '%d isgasn'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/tzm.js",
    "content": "// Central Atlas Tamazight [tzm]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'tzm',\n  weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n  months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n  weekStart: 6,\n  weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n  monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n  weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n    past: 'ⵢⴰⵏ %s',\n    s: 'ⵉⵎⵉⴽ',\n    m: 'ⵎⵉⵏⵓⴺ',\n    mm: '%d ⵎⵉⵏⵓⴺ',\n    h: 'ⵙⴰⵄⴰ',\n    hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n    d: 'ⴰⵙⵙ',\n    dd: '%d oⵙⵙⴰⵏ',\n    M: 'ⴰⵢoⵓⵔ',\n    MM: '%d ⵉⵢⵢⵉⵔⵏ',\n    y: 'ⴰⵙⴳⴰⵙ',\n    yy: '%d ⵉⵙⴳⴰⵙⵏ'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ug-cn.js",
    "content": "// Uyghur (China) [ug-cn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ug-cn',\n  weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split('_'),\n  months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n  monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\n  weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY-MM-DD',\n    LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n    LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n    LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n  },\n  relativeTime: {\n    future: '%s كېيىن',\n    past: '%s بۇرۇن',\n    s: 'نەچچە سېكونت',\n    m: 'بىر مىنۇت',\n    mm: '%d مىنۇت',\n    h: 'بىر سائەت',\n    hh: '%d سائەت',\n    d: 'بىر كۈن',\n    dd: '%d كۈن',\n    M: 'بىر ئاي',\n    MM: '%d ئاي',\n    y: 'بىر يىل',\n    yy: '%d يىل'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/uk.js",
    "content": "// Ukrainian [uk]\nimport dayjs from 'dayjs'\n\nconst monthFormat = 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')\nconst monthStandalone = 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n\nconst MONTHS_IN_FORMAT = /D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/\n\nfunction plural(word, num) {\n  const forms = word.split('_')\n  return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]) // eslint-disable-line\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n  const format = {\n    ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n    mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n    hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n    dd: 'день_дні_днів',\n    MM: 'місяць_місяці_місяців',\n    yy: 'рік_роки_років'\n  }\n  if (key === 'm') {\n    return withoutSuffix ? 'хвилина' : 'хвилину'\n  } else if (key === 'h') {\n    return withoutSuffix ? 'година' : 'годину'\n  }\n\n  return `${number} ${plural(format[key], +number)}`\n}\n\nconst months = (dayjsInstance, format) => {\n  if (MONTHS_IN_FORMAT.test(format)) {\n    return monthFormat[dayjsInstance.month()]\n  }\n  return monthStandalone[dayjsInstance.month()]\n}\nmonths.s = monthStandalone\nmonths.f = monthFormat\n\nconst locale = {\n  name: 'uk',\n  weekdays: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n  weekdaysShort: 'ндл_пнд_втр_срд_чтв_птн_сбт'.split('_'),\n  weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n  months,\n  monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n  weekStart: 1,\n  relativeTime: {\n    future: 'за %s',\n    past: '%s тому',\n    s: 'декілька секунд',\n    m: relativeTimeWithPlural,\n    mm: relativeTimeWithPlural,\n    h: relativeTimeWithPlural,\n    hh: relativeTimeWithPlural,\n    d: 'день',\n    dd: relativeTimeWithPlural,\n    M: 'місяць',\n    MM: relativeTimeWithPlural,\n    y: 'рік',\n    yy: relativeTimeWithPlural\n  },\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD.MM.YYYY',\n    LL: 'D MMMM YYYY р.',\n    LLL: 'D MMMM YYYY р., HH:mm',\n    LLLL: 'dddd, D MMMM YYYY р., HH:mm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/ur.js",
    "content": "// Urdu [ur]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'ur',\n  weekdays: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'),\n  months: 'جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'),\n  monthsShort: 'جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر'.split('_'),\n  weekdaysMin: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd، D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s بعد',\n    past: '%s قبل',\n    s: 'چند سیکنڈ',\n    m: 'ایک منٹ',\n    mm: '%d منٹ',\n    h: 'ایک گھنٹہ',\n    hh: '%d گھنٹے',\n    d: 'ایک دن',\n    dd: '%d دن',\n    M: 'ایک ماہ',\n    MM: '%d ماہ',\n    y: 'ایک سال',\n    yy: '%d سال'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/uz-latn.js",
    "content": "// Uzbek Latin [uz-latn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'uz-latn',\n  weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n  months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n  monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n  weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'D MMMM YYYY, dddd HH:mm'\n  },\n  relativeTime: {\n    future: 'Yaqin %s ichida',\n    past: '%s oldin',\n    s: 'soniya',\n    m: 'bir daqiqa',\n    mm: '%d daqiqa',\n    h: 'bir soat',\n    hh: '%d soat',\n    d: 'bir kun',\n    dd: '%d kun',\n    M: 'bir oy',\n    MM: '%d oy',\n    y: 'bir yil',\n    yy: '%d yil'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/uz.js",
    "content": "// Uzbek [uz]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'uz',\n  weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n  months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n  monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n  weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'D MMMM YYYY, dddd HH:mm'\n  },\n  relativeTime: {\n    future: 'Якин %s ичида',\n    past: '%s олдин',\n    s: 'фурсат',\n    m: 'бир дакика',\n    mm: '%d дакика',\n    h: 'бир соат',\n    hh: '%d соат',\n    d: 'бир кун',\n    dd: '%d кун',\n    M: 'бир ой',\n    MM: '%d ой',\n    y: 'бир йил',\n    yy: '%d йил'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/vi.js",
    "content": "// Vietnamese [vi]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'vi',\n  weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n  months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n  monthsShort: 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n  weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM [năm] YYYY',\n    LLL: 'D MMMM [năm] YYYY HH:mm',\n    LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n    l: 'DD/M/YYYY',\n    ll: 'D MMM YYYY',\n    lll: 'D MMM YYYY HH:mm',\n    llll: 'ddd, D MMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: '%s tới',\n    past: '%s trước',\n    s: 'vài giây',\n    m: 'một phút',\n    mm: '%d phút',\n    h: 'một giờ',\n    hh: '%d giờ',\n    d: 'một ngày',\n    dd: '%d ngày',\n    M: 'một tháng',\n    MM: '%d tháng',\n    y: 'một năm',\n    yy: '%d năm'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/x-pseudo.js",
    "content": "// Pseudo [x-pseudo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'x-pseudo',\n  weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n  months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n  monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n  weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY HH:mm',\n    LLLL: 'dddd, D MMMM YYYY HH:mm'\n  },\n  relativeTime: {\n    future: 'í~ñ %s',\n    past: '%s á~gó',\n    s: 'á ~féw ~sécó~ñds',\n    m: 'á ~míñ~úté',\n    mm: '%d m~íñú~tés',\n    h: 'á~ñ hó~úr',\n    hh: '%d h~óúrs',\n    d: 'á ~dáý',\n    dd: '%d d~áýs',\n    M: 'á ~móñ~th',\n    MM: '%d m~óñt~hs',\n    y: 'á ~ýéár',\n    yy: '%d ý~éárs'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/yo.js",
    "content": "// Yoruba Nigeria [yo]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'yo',\n  weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n  months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n  weekStart: 1,\n  weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n  monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n  weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n  ordinal: n => n,\n  formats: {\n    LT: 'h:mm A',\n    LTS: 'h:mm:ss A',\n    L: 'DD/MM/YYYY',\n    LL: 'D MMMM YYYY',\n    LLL: 'D MMMM YYYY h:mm A',\n    LLLL: 'dddd, D MMMM YYYY h:mm A'\n  },\n  relativeTime: {\n    future: 'ní %s',\n    past: '%s kọjá',\n    s: 'ìsẹjú aayá die',\n    m: 'ìsẹjú kan',\n    mm: 'ìsẹjú %d',\n    h: 'wákati kan',\n    hh: 'wákati %d',\n    d: 'ọjọ́ kan',\n    dd: 'ọjọ́ %d',\n    M: 'osù kan',\n    MM: 'osù %d',\n    y: 'ọdún kan',\n    yy: 'ọdún %d'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/zh-cn.js",
    "content": "// Chinese (China) [zh-cn]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'zh-cn',\n  weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n  weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n  weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n  months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n  monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  ordinal: (number, period) => {\n    switch (period) {\n      case 'W':\n        return `${number}周`\n      default:\n        return `${number}日`\n    }\n  },\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY年M月D日',\n    LLL: 'YYYY年M月D日Ah点mm分',\n    LLLL: 'YYYY年M月D日ddddAh点mm分',\n    l: 'YYYY/M/D',\n    ll: 'YYYY年M月D日',\n    lll: 'YYYY年M月D日 HH:mm',\n    llll: 'YYYY年M月D日dddd HH:mm'\n  },\n  relativeTime: {\n    future: '%s内',\n    past: '%s前',\n    s: '几秒',\n    m: '1 分钟',\n    mm: '%d 分钟',\n    h: '1 小时',\n    hh: '%d 小时',\n    d: '1 天',\n    dd: '%d 天',\n    M: '1 个月',\n    MM: '%d 个月',\n    y: '1 年',\n    yy: '%d 年'\n  },\n  meridiem: (hour, minute) => {\n    const hm = (hour * 100) + minute\n    if (hm < 600) {\n      return '凌晨'\n    } else if (hm < 900) {\n      return '早上'\n    } else if (hm < 1100) {\n      return '上午'\n    } else if (hm < 1300) {\n      return '中午'\n    } else if (hm < 1800) {\n      return '下午'\n    }\n    return '晚上'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/zh-hk.js",
    "content": "// Chinese (Hong Kong) [zh-hk]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'zh-hk',\n  months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n  monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n  weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n  weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n  ordinal: (number, period) => {\n    switch (period) {\n      case 'W':\n        return `${number}週`\n      default:\n        return `${number}日`\n    }\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY年M月D日',\n    LLL: 'YYYY年M月D日 HH:mm',\n    LLLL: 'YYYY年M月D日dddd HH:mm',\n    l: 'YYYY/M/D',\n    ll: 'YYYY年M月D日',\n    lll: 'YYYY年M月D日 HH:mm',\n    llll: 'YYYY年M月D日dddd HH:mm'\n  },\n  relativeTime: {\n    future: '%s內',\n    past: '%s前',\n    s: '幾秒',\n    m: '一分鐘',\n    mm: '%d 分鐘',\n    h: '一小時',\n    hh: '%d 小時',\n    d: '一天',\n    dd: '%d 天',\n    M: '一個月',\n    MM: '%d 個月',\n    y: '一年',\n    yy: '%d 年'\n  },\n  meridiem: (hour, minute) => {\n    const hm = (hour * 100) + minute\n    if (hm < 600) {\n      return '凌晨'\n    } else if (hm < 900) {\n      return '早上'\n    } else if (hm < 1100) {\n      return '上午'\n    } else if (hm < 1300) {\n      return '中午'\n    } else if (hm < 1800) {\n      return '下午'\n    }\n    return '晚上'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n\n"
  },
  {
    "path": "src/locale/zh-tw.js",
    "content": "// Chinese (Taiwan) [zh-tw]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'zh-tw',\n  weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n  weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n  weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n  months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n  monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  ordinal: (number, period) => {\n    switch (period) {\n      case 'W':\n        return `${number}週`\n      default:\n        return `${number}日`\n    }\n  },\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY年M月D日',\n    LLL: 'YYYY年M月D日 HH:mm',\n    LLLL: 'YYYY年M月D日dddd HH:mm',\n    l: 'YYYY/M/D',\n    ll: 'YYYY年M月D日',\n    lll: 'YYYY年M月D日 HH:mm',\n    llll: 'YYYY年M月D日dddd HH:mm'\n  },\n  relativeTime: {\n    future: '%s內',\n    past: '%s前',\n    s: '幾秒',\n    m: '1 分鐘',\n    mm: '%d 分鐘',\n    h: '1 小時',\n    hh: '%d 小時',\n    d: '1 天',\n    dd: '%d 天',\n    M: '1 個月',\n    MM: '%d 個月',\n    y: '1 年',\n    yy: '%d 年'\n  },\n  meridiem: (hour, minute) => {\n    const hm = (hour * 100) + minute\n    if (hm < 600) {\n      return '凌晨'\n    } else if (hm < 900) {\n      return '早上'\n    } else if (hm < 1100) {\n      return '上午'\n    } else if (hm < 1300) {\n      return '中午'\n    } else if (hm < 1800) {\n      return '下午'\n    }\n    return '晚上'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/locale/zh.js",
    "content": "// Chinese [zh]\nimport dayjs from 'dayjs'\n\nconst locale = {\n  name: 'zh',\n  weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n  weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n  weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n  months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n  monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n  ordinal: (number, period) => {\n    switch (period) {\n      case 'W':\n        return `${number}周`\n      default:\n        return `${number}日`\n    }\n  },\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: 'HH:mm',\n    LTS: 'HH:mm:ss',\n    L: 'YYYY/MM/DD',\n    LL: 'YYYY年M月D日',\n    LLL: 'YYYY年M月D日Ah点mm分',\n    LLLL: 'YYYY年M月D日ddddAh点mm分',\n    l: 'YYYY/M/D',\n    ll: 'YYYY年M月D日',\n    lll: 'YYYY年M月D日 HH:mm',\n    llll: 'YYYY年M月D日dddd HH:mm'\n  },\n  relativeTime: {\n    future: '%s后',\n    past: '%s前',\n    s: '几秒',\n    m: '1 分钟',\n    mm: '%d 分钟',\n    h: '1 小时',\n    hh: '%d 小时',\n    d: '1 天',\n    dd: '%d 天',\n    M: '1 个月',\n    MM: '%d 个月',\n    y: '1 年',\n    yy: '%d 年'\n  },\n  meridiem: (hour, minute) => {\n    const hm = (hour * 100) + minute\n    if (hm < 600) {\n      return '凌晨'\n    } else if (hm < 900) {\n      return '早上'\n    } else if (hm < 1100) {\n      return '上午'\n    } else if (hm < 1300) {\n      return '中午'\n    } else if (hm < 1800) {\n      return '下午'\n    }\n    return '晚上'\n  }\n}\n\ndayjs.locale(locale, null, true)\n\nexport default locale\n"
  },
  {
    "path": "src/plugin/advancedFormat/index.js",
    "content": "import { FORMAT_DEFAULT } from '../../constant'\n\nexport default (o, c) => { // locale needed later\n  const proto = c.prototype\n  const oldFormat = proto.format\n  proto.format = function (formatStr) {\n    const locale = this.$locale()\n\n    if (!this.isValid()) {\n      return oldFormat.bind(this)(formatStr)\n    }\n\n    const utils = this.$utils()\n    const str = formatStr || FORMAT_DEFAULT\n    const result = str.replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (match) => {\n      switch (match) {\n        case 'Q':\n          return Math.ceil((this.$M + 1) / 3)\n        case 'Do':\n          return locale.ordinal(this.$D)\n        case 'gggg':\n          return this.weekYear()\n        case 'GGGG':\n          return this.isoWeekYear()\n        case 'wo':\n          return locale.ordinal(this.week(), 'W') // W for week\n        case 'w':\n        case 'ww':\n          return utils.s(this.week(), match === 'w' ? 1 : 2, '0')\n        case 'W':\n        case 'WW':\n          return utils.s(this.isoWeek(), match === 'W' ? 1 : 2, '0')\n        case 'k':\n        case 'kk':\n          return utils.s(String(this.$H === 0 ? 24 : this.$H), match === 'k' ? 1 : 2, '0')\n        case 'X':\n          return Math.floor(this.$d.getTime() / 1000)\n        case 'x':\n          return this.$d.getTime()\n        case 'z':\n          return `[${this.offsetName()}]`\n        case 'zzz':\n          return `[${this.offsetName('long')}]`\n        default:\n          return match\n      }\n    })\n    return oldFormat.bind(this)(result)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/arraySupport/index.js",
    "content": "export default (o, c, dayjs) => {\n  const proto = c.prototype\n  const parseDate = (cfg) => {\n    const { date, utc } = cfg\n    if (Array.isArray(date)) {\n      if (utc) {\n        if (!date.length) {\n          return new Date()\n        }\n        return new Date(Date.UTC.apply(null, date))\n      }\n      if (date.length === 1) {\n        return dayjs(String(date[0])).toDate()\n      }\n      return new (Function.prototype.bind.apply(Date, [null].concat(date)))()\n    }\n    return date\n  }\n\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    cfg.date = parseDate.bind(this)(cfg)\n    oldParse.bind(this)(cfg)\n  }\n}\n"
  },
  {
    "path": "src/plugin/badMutable/index.js",
    "content": "export default (o, c) => { // locale needed later\n  const proto = c.prototype\n  proto.$g = function (input, get, set) {\n    if (this.$utils().u(input)) return this[get]\n    return this.$set(set, input)\n  }\n\n  proto.set = function (string, int) {\n    return this.$set(string, int)\n  }\n\n  const oldStartOf = proto.startOf\n  proto.startOf = function (units, startOf) {\n    this.$d = oldStartOf.bind(this)(units, startOf).toDate()\n    this.init()\n    return this\n  }\n\n  const oldAdd = proto.add\n  proto.add = function (number, units) {\n    this.$d = oldAdd.bind(this)(number, units).toDate()\n    this.init()\n    return this\n  }\n\n  const oldLocale = proto.locale\n  proto.locale = function (preset, object) {\n    if (!preset) return this.$L\n    this.$L = oldLocale.bind(this)(preset, object).$L\n    return this\n  }\n\n  const oldDaysInMonth = proto.daysInMonth\n  proto.daysInMonth = function () {\n    return oldDaysInMonth.bind(this.clone())()\n  }\n\n  const oldIsSame = proto.isSame\n  proto.isSame = function (that, units) {\n    return oldIsSame.bind(this.clone())(that, units)\n  }\n\n  const oldIsBefore = proto.isBefore\n  proto.isBefore = function (that, units) {\n    return oldIsBefore.bind(this.clone())(that, units)\n  }\n\n  const oldIsAfter = proto.isAfter\n  proto.isAfter = function (that, units) {\n    return oldIsAfter.bind(this.clone())(that, units)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/bigIntSupport/index.js",
    "content": "// eslint-disable-next-line valid-typeof\nconst isBigInt = num => typeof num === 'bigint'\nexport default (o, c, dayjs) => {\n  const proto = c.prototype\n  const parseDate = (cfg) => {\n    const { date } = cfg\n    if (isBigInt(date)) {\n      return Number(date)\n    }\n    return date\n  }\n\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    cfg.date = parseDate.bind(this)(cfg)\n    oldParse.bind(this)(cfg)\n  }\n\n\n  const oldUnix = dayjs.unix\n  dayjs.unix = function (timestamp) {\n    const ts = isBigInt(timestamp) ? Number(timestamp) : timestamp\n    return oldUnix(ts)\n  }\n}\n"
  },
  {
    "path": "src/plugin/buddhistEra/index.js",
    "content": "import { FORMAT_DEFAULT } from '../../constant'\n\nexport default (o, c) => { // locale needed later\n  const proto = c.prototype\n  const oldFormat = proto.format\n  // extend en locale here\n  proto.format = function (formatStr) {\n    const yearBias = 543\n    const str = formatStr || FORMAT_DEFAULT\n    const result = str.replace(/(\\[[^\\]]+])|BBBB|BB/g, (match, a) => {\n      const year = String(this.$y + yearBias)\n      const args = match === 'BB' ? [year.slice(-2), 2] : [year, 4]\n      return a || this.$utils().s(...args, '0')\n    })\n    return oldFormat.bind(this)(result)\n  }\n}\n"
  },
  {
    "path": "src/plugin/calendar/index.js",
    "content": "export default (o, c, d) => {\n  const LT = 'h:mm A'\n  const L = 'MM/DD/YYYY'\n  const calendarFormat = {\n    lastDay: `[Yesterday at] ${LT}`,\n    sameDay: `[Today at] ${LT}`,\n    nextDay: `[Tomorrow at] ${LT}`,\n    nextWeek: `dddd [at] ${LT}`,\n    lastWeek: `[Last] dddd [at] ${LT}`,\n    sameElse: L\n  }\n  const proto = c.prototype\n  proto.calendar = function (referenceTime, formats) {\n    const format = formats || this.$locale().calendar || calendarFormat\n    const referenceStartOfDay = d(referenceTime || undefined).startOf('d')\n    const diff = this.diff(referenceStartOfDay, 'd', true)\n    const sameElse = 'sameElse'\n    /* eslint-disable no-nested-ternary */\n    const retVal = diff < -6 ? sameElse :\n      diff < -1 ? 'lastWeek' :\n        diff < 0 ? 'lastDay' :\n          diff < 1 ? 'sameDay' :\n            diff < 2 ? 'nextDay' :\n              diff < 7 ? 'nextWeek' : sameElse\n    /* eslint-enable no-nested-ternary */\n    const currentFormat = format[retVal] || calendarFormat[retVal]\n    if (typeof currentFormat === 'function') {\n      return currentFormat.call(this, d())\n    }\n    return this.format(currentFormat)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/customParseFormat/index.js",
    "content": "import { u } from '../localizedFormat/utils'\n\nconst formattingTokens = /(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g\n\nconst match1 = /\\d/ // 0 - 9\nconst match2 = /\\d\\d/ // 00 - 99\nconst match3 = /\\d{3}/ // 000 - 999\nconst match4 = /\\d{4}/ // 0000 - 9999\nconst match1to2 = /\\d\\d?/ // 0 - 99\nconst matchSigned = /[+-]?\\d+/ // -inf - inf\nconst matchOffset = /[+-]\\d\\d:?(\\d\\d)?|Z/ // +00:00 -00:00 +0000 or -0000 +00 or Z\nconst matchWord = /\\d*[^-_:/,()\\s\\d]+/ // Word\n\nlet locale = {}\n\nlet parseTwoDigitYear = function (input) {\n  input = +input\n  return input + (input > 68 ? 1900 : 2000)\n}\n\nfunction offsetFromString(string) {\n  if (!string) return 0\n  if (string === 'Z') return 0\n  const parts = string.match(/([+-]|\\d\\d)/g)\n  const minutes = +(parts[1] * 60) + (+parts[2] || 0)\n  return minutes === 0 ? 0 : parts[0] === '+' ? -minutes : minutes // eslint-disable-line no-nested-ternary\n}\n\nconst addInput = function (property) {\n  return function (input) {\n    this[property] = +input\n  }\n}\n\nconst zoneExpressions = [matchOffset, function (input) {\n  const zone = this.zone || (this.zone = {})\n  zone.offset = offsetFromString(input)\n}]\n\nconst getLocalePart = (name) => {\n  const part = locale[name]\n  return part && (\n    part.indexOf ? part : part.s.concat(part.f)\n  )\n}\nconst meridiemMatch = (input, isLowerCase) => {\n  let isAfternoon\n  const { meridiem } = locale\n  if (!meridiem) {\n    isAfternoon = input === (isLowerCase ? 'pm' : 'PM')\n  } else {\n    for (let i = 1; i <= 24; i += 1) {\n      // todo: fix input === meridiem(i, 0, isLowerCase)\n      if (input.indexOf(meridiem(i, 0, isLowerCase)) > -1) {\n        isAfternoon = i > 12\n        break\n      }\n    }\n  }\n  return isAfternoon\n}\nconst expressions = {\n  A: [matchWord, function (input) {\n    this.afternoon = meridiemMatch(input, false)\n  }],\n  a: [matchWord, function (input) {\n    this.afternoon = meridiemMatch(input, true)\n  }],\n  Q: [match1, function (input) {\n    this.month = ((input - 1) * 3) + 1\n  }],\n  S: [match1, function (input) {\n    this.milliseconds = +input * 100\n  }],\n  SS: [match2, function (input) {\n    this.milliseconds = +input * 10\n  }],\n  SSS: [match3, function (input) {\n    this.milliseconds = +input\n  }],\n  s: [match1to2, addInput('seconds')],\n  ss: [match1to2, addInput('seconds')],\n  m: [match1to2, addInput('minutes')],\n  mm: [match1to2, addInput('minutes')],\n  H: [match1to2, addInput('hours')],\n  h: [match1to2, addInput('hours')],\n  HH: [match1to2, addInput('hours')],\n  hh: [match1to2, addInput('hours')],\n  D: [match1to2, addInput('day')],\n  DD: [match2, addInput('day')],\n  Do: [matchWord, function (input) {\n    const { ordinal } = locale;\n    [this.day] = input.match(/\\d+/)\n    if (!ordinal) return\n    for (let i = 1; i <= 31; i += 1) {\n      if (ordinal(i).replace(/\\[|\\]/g, '') === input) {\n        this.day = i\n      }\n    }\n  }],\n  w: [match1to2, addInput('week')],\n  ww: [match2, addInput('week')],\n  M: [match1to2, addInput('month')],\n  MM: [match2, addInput('month')],\n  MMM: [matchWord, function (input) {\n    const months = getLocalePart('months')\n    const monthsShort = getLocalePart('monthsShort')\n    const matchIndex = (monthsShort || months.map(_ => _.slice(0, 3))).indexOf(input) + 1\n    if (matchIndex < 1) {\n      throw new Error()\n    }\n    this.month = (matchIndex % 12) || matchIndex\n  }],\n  MMMM: [matchWord, function (input) {\n    const months = getLocalePart('months')\n    const matchIndex = months.indexOf(input) + 1\n    if (matchIndex < 1) {\n      throw new Error()\n    }\n    this.month = (matchIndex % 12) || matchIndex\n  }],\n  Y: [matchSigned, addInput('year')],\n  YY: [match2, function (input) {\n    this.year = parseTwoDigitYear(input)\n  }],\n  YYYY: [match4, addInput('year')],\n  Z: zoneExpressions,\n  ZZ: zoneExpressions\n}\n\nfunction correctHours(time) {\n  const { afternoon } = time\n  if (afternoon !== undefined) {\n    const { hours } = time\n    if (afternoon) {\n      if (hours < 12) {\n        time.hours += 12\n      }\n    } else if (hours === 12) {\n      time.hours = 0\n    }\n    delete time.afternoon\n  }\n}\n\nfunction makeParser(format) {\n  format = u(format, locale && locale.formats)\n  const array = format.match(formattingTokens)\n  const { length } = array\n  for (let i = 0; i < length; i += 1) {\n    const token = array[i]\n    const parseTo = expressions[token]\n    const regex = parseTo && parseTo[0]\n    const parser = parseTo && parseTo[1]\n    if (parser) {\n      array[i] = { regex, parser }\n    } else {\n      array[i] = token.replace(/^\\[|\\]$/g, '')\n    }\n  }\n  return function (input) {\n    const time = {}\n    for (let i = 0, start = 0; i < length; i += 1) {\n      const token = array[i]\n      if (typeof token === 'string') {\n        start += token.length\n      } else {\n        const { regex, parser } = token\n        const part = input.slice(start)\n        const match = regex.exec(part)\n        const value = match[0]\n        parser.call(time, value)\n        input = input.replace(value, '')\n      }\n    }\n    correctHours(time)\n    return time\n  }\n}\n\nconst parseFormattedInput = (input, format, utc, dayjs) => {\n  try {\n    if (['x', 'X'].indexOf(format) > -1) return new Date((format === 'X' ? 1000 : 1) * input)\n    const parser = makeParser(format)\n    const {\n      year, month, day, hours, minutes, seconds, milliseconds, zone, week\n    } = parser(input)\n    const now = new Date()\n    const d = day || ((!year && !month) ? now.getDate() : 1)\n    const y = year || now.getFullYear()\n    let M = 0\n    if (!(year && !month)) {\n      M = month > 0 ? month - 1 : now.getMonth()\n    }\n    const h = hours || 0\n    const m = minutes || 0\n    const s = seconds || 0\n    const ms = milliseconds || 0\n    if (zone) {\n      return new Date(Date.UTC(y, M, d, h, m, s, ms + (zone.offset * 60 * 1000)))\n    }\n    if (utc) {\n      return new Date(Date.UTC(y, M, d, h, m, s, ms))\n    }\n    let newDate\n    newDate = new Date(y, M, d, h, m, s, ms)\n    if (week) {\n      newDate = dayjs(newDate).week(week).toDate()\n    }\n    return newDate\n  } catch (e) {\n    return new Date('') // Invalid Date\n  }\n}\n\n\nexport default (o, C, d) => {\n  d.p.customParseFormat = true\n  if (o && o.parseTwoDigitYear) {\n    ({ parseTwoDigitYear } = o)\n  }\n  const proto = C.prototype\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    const {\n      date,\n      utc,\n      args\n    } = cfg\n    this.$u = utc\n    const format = args[1]\n    if (typeof format === 'string') {\n      const isStrictWithoutLocale = args[2] === true\n      const isStrictWithLocale = args[3] === true\n      const isStrict = isStrictWithoutLocale || isStrictWithLocale\n      let pl = args[2]\n      if (isStrictWithLocale) [, , pl] = args\n      locale = this.$locale()\n      if (!isStrictWithoutLocale && pl) {\n        locale = d.Ls[pl]\n      }\n      this.$d = parseFormattedInput(date, format, utc, d)\n      this.init()\n      if (pl && pl !== true) this.$L = this.locale(pl).$L\n      // use != to treat\n      // input number 1410715640579 and format string '1410715640579' equal\n      // eslint-disable-next-line eqeqeq\n      if (isStrict && date != this.format(format)) {\n        this.$d = new Date('')\n      }\n      // reset global locale to make parallel unit test\n      locale = {}\n    } else if (format instanceof Array) {\n      const len = format.length\n      for (let i = 1; i <= len; i += 1) {\n        args[1] = format[i - 1]\n        const result = d.apply(this, args)\n        if (result.isValid()) {\n          this.$d = result.$d\n          this.$L = result.$L\n          this.init()\n          break\n        }\n        if (i === len) this.$d = new Date('')\n      }\n    } else {\n      oldParse.call(this, cfg)\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugin/dayOfYear/index.js",
    "content": "export default (o, c, d) => {\n  const proto = c.prototype\n  proto.dayOfYear = function (input) {\n    // d(this) is for badMutable\n    const dayOfYear = Math.round((d(this).startOf('day') - d(this).startOf('year')) / 864e5) + 1\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'day')\n  }\n}\n"
  },
  {
    "path": "src/plugin/devHelper/index.js",
    "content": "/* eslint-disable no-console */\nexport default (o, c, d) => {\n  /* istanbul ignore next line */\n  if (!process || process.env.NODE_ENV !== 'production') {\n    const proto = c.prototype\n    const oldParse = proto.parse\n    proto.parse = function (cfg) {\n      const { date } = cfg\n      if (typeof date === 'string' && date.length === 13) {\n        console.warn(`To parse a Unix timestamp like ${date}, you should pass it as a Number. https://day.js.org/docs/en/parse/unix-timestamp-milliseconds`)\n      }\n      if (typeof date === 'number' && String(date).length === 4) {\n        console.warn(`Guessing you may want to parse the Year ${date}, you should pass it as a String ${date}, not a Number. Otherwise, ${date} will be treated as a Unix timestamp`)\n      }\n      if (cfg.args.length >= 2 && !d.p.customParseFormat) {\n        console.warn(`To parse a date-time string like ${date} using the given format, you should enable customParseFormat plugin first. https://day.js.org/docs/en/parse/string-format`)\n      }\n      return oldParse.bind(this)(cfg)\n    }\n    const oldLocale = d.locale\n    d.locale = function (preset, object, isLocal) {\n      if (typeof object === 'undefined' && typeof preset === 'string') {\n        if (!d.Ls[preset]) {\n          console.warn(`Guessing you may want to use locale ${preset}, you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs`)\n        }\n      }\n      return oldLocale(preset, object, isLocal)\n    }\n\n    const oldDiff = proto.diff\n    proto.diff = function (date, unit, float) {\n      const isInvalidDate = !date || !d(date).isValid()\n      if (isInvalidDate) {\n        console.warn('Invalid usage: diff() requires a valid comparison date as the first argument. https://day.js.org/docs/en/display/difference')\n      }\n\n      return oldDiff.call(this, date, unit, float)\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugin/duration/index.js",
    "content": "import {\n  MILLISECONDS_A_DAY,\n  MILLISECONDS_A_HOUR,\n  MILLISECONDS_A_MINUTE,\n  MILLISECONDS_A_SECOND,\n  MILLISECONDS_A_WEEK\n} from '../../constant'\n\nconst MILLISECONDS_A_YEAR = MILLISECONDS_A_DAY * 365\nconst MILLISECONDS_A_MONTH = MILLISECONDS_A_YEAR / 12\n\nconst DURATION_REGEX_PARSE = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/\nconst DURATION_REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY|Y|M{1,2}|D{1,2}|H{1,2}|m{1,2}|s{1,2}|SSS/g\n\nconst unitToMS = {\n  years: MILLISECONDS_A_YEAR,\n  months: MILLISECONDS_A_MONTH,\n  days: MILLISECONDS_A_DAY,\n  hours: MILLISECONDS_A_HOUR,\n  minutes: MILLISECONDS_A_MINUTE,\n  seconds: MILLISECONDS_A_SECOND,\n  milliseconds: 1,\n  weeks: MILLISECONDS_A_WEEK\n}\n\nconst isDuration = d => d instanceof Duration // eslint-disable-line no-use-before-define\n\nlet $d\nlet $u\n\nconst wrapper = (input, instance, unit) =>\n  new Duration(input, unit, instance.$l) // eslint-disable-line no-use-before-define\n\nconst prettyUnit = unit => `${$u.p(unit)}s`\nconst isNegative = number => number < 0\nconst roundNumber = number =>\n  (isNegative(number) ? Math.ceil(number) : Math.floor(number))\nconst absolute = number => Math.abs(number)\nconst getNumberUnitFormat = (number, unit) => {\n  if (!number) {\n    return {\n      negative: false,\n      format: ''\n    }\n  }\n\n  if (isNegative(number)) {\n    return {\n      negative: true,\n      format: `${absolute(number)}${unit}`\n    }\n  }\n\n  return {\n    negative: false,\n    format: `${number}${unit}`\n  }\n}\n\nclass Duration {\n  constructor(input, unit, locale) {\n    this.$d = {}\n    this.$l = locale\n    if (input === undefined) {\n      this.$ms = 0\n      this.parseFromMilliseconds()\n    }\n    if (unit) {\n      return wrapper(input * unitToMS[prettyUnit(unit)], this)\n    }\n    if (typeof input === 'number') {\n      this.$ms = input\n      this.parseFromMilliseconds()\n      return this\n    }\n    if (typeof input === 'object') {\n      Object.keys(input).forEach((k) => {\n        this.$d[prettyUnit(k)] = input[k]\n      })\n      this.calMilliseconds()\n      return this\n    }\n    if (typeof input === 'string') {\n      const d = input.match(DURATION_REGEX_PARSE)\n      if (d) {\n        const properties = d.slice(2)\n        const numberD = properties.map(value => (value != null ? Number(value) : 0));\n        [\n          this.$d.years,\n          this.$d.months,\n          this.$d.weeks,\n          this.$d.days,\n          this.$d.hours,\n          this.$d.minutes,\n          this.$d.seconds\n        ] = numberD\n        this.calMilliseconds()\n        return this\n      }\n    }\n    return this\n  }\n\n  calMilliseconds() {\n    this.$ms = Object.keys(this.$d).reduce((total, unit) => (\n      total + ((this.$d[unit] || 0) * (unitToMS[unit]))\n    ), 0)\n  }\n\n  parseFromMilliseconds() {\n    let { $ms } = this\n    this.$d.years = roundNumber($ms / MILLISECONDS_A_YEAR)\n    $ms %= MILLISECONDS_A_YEAR\n    this.$d.months = roundNumber($ms / MILLISECONDS_A_MONTH)\n    $ms %= MILLISECONDS_A_MONTH\n    this.$d.days = roundNumber($ms / MILLISECONDS_A_DAY)\n    $ms %= MILLISECONDS_A_DAY\n    this.$d.hours = roundNumber($ms / MILLISECONDS_A_HOUR)\n    $ms %= MILLISECONDS_A_HOUR\n    this.$d.minutes = roundNumber($ms / MILLISECONDS_A_MINUTE)\n    $ms %= MILLISECONDS_A_MINUTE\n    this.$d.seconds = roundNumber($ms / MILLISECONDS_A_SECOND)\n    $ms %= MILLISECONDS_A_SECOND\n    this.$d.milliseconds = $ms\n  }\n\n  toISOString() {\n    const Y = getNumberUnitFormat(this.$d.years, 'Y')\n    const M = getNumberUnitFormat(this.$d.months, 'M')\n\n    let days = +this.$d.days || 0\n    if (this.$d.weeks) {\n      days += this.$d.weeks * 7\n    }\n\n    const D = getNumberUnitFormat(days, 'D')\n    const H = getNumberUnitFormat(this.$d.hours, 'H')\n    const m = getNumberUnitFormat(this.$d.minutes, 'M')\n\n    let seconds = this.$d.seconds || 0\n    if (this.$d.milliseconds) {\n      seconds += this.$d.milliseconds / 1000\n      seconds = Math.round(seconds * 1000) / 1000\n    }\n\n    const S = getNumberUnitFormat(seconds, 'S')\n\n    const negativeMode =\n      Y.negative ||\n      M.negative ||\n      D.negative ||\n      H.negative ||\n      m.negative ||\n      S.negative\n\n    const T = H.format || m.format || S.format ? 'T' : ''\n    const P = negativeMode ? '-' : ''\n\n    const result = `${P}P${Y.format}${M.format}${D.format}${T}${H.format}${m.format}${S.format}`\n    return result === 'P' || result === '-P' ? 'P0D' : result\n  }\n\n  toJSON() {\n    return this.toISOString()\n  }\n\n  format(formatStr) {\n    const str = formatStr || 'YYYY-MM-DDTHH:mm:ss'\n    const matches = {\n      Y: this.$d.years,\n      YY: $u.s(this.$d.years, 2, '0'),\n      YYYY: $u.s(this.$d.years, 4, '0'),\n      M: this.$d.months,\n      MM: $u.s(this.$d.months, 2, '0'),\n      D: this.$d.days,\n      DD: $u.s(this.$d.days, 2, '0'),\n      H: this.$d.hours,\n      HH: $u.s(this.$d.hours, 2, '0'),\n      m: this.$d.minutes,\n      mm: $u.s(this.$d.minutes, 2, '0'),\n      s: this.$d.seconds,\n      ss: $u.s(this.$d.seconds, 2, '0'),\n      SSS: $u.s(this.$d.milliseconds, 3, '0')\n    }\n    return str.replace(DURATION_REGEX_FORMAT, (match, $1) => $1 || String(matches[match]))\n  }\n\n  as(unit) {\n    return this.$ms / (unitToMS[prettyUnit(unit)])\n  }\n\n  get(unit) {\n    let base = this.$ms\n    const pUnit = prettyUnit(unit)\n    if (pUnit === 'milliseconds') {\n      base %= 1000\n    } else if (pUnit === 'weeks') {\n      base = roundNumber(base / unitToMS[pUnit])\n    } else {\n      base = this.$d[pUnit]\n    }\n    return base || 0 // a === 0 will be true on both 0 and -0\n  }\n\n  add(input, unit, isSubtract) {\n    let another\n    if (unit) {\n      another = input * unitToMS[prettyUnit(unit)]\n    } else if (isDuration(input)) {\n      another = input.$ms\n    } else {\n      another = wrapper(input, this).$ms\n    }\n\n    return wrapper(this.$ms + (another * (isSubtract ? -1 : 1)), this)\n  }\n\n  subtract(input, unit) {\n    return this.add(input, unit, true)\n  }\n\n  locale(l) {\n    const that = this.clone()\n    that.$l = l\n    return that\n  }\n\n  clone() {\n    return wrapper(this.$ms, this)\n  }\n\n  humanize(withSuffix) {\n    return $d()\n      .add(this.$ms, 'ms')\n      .locale(this.$l)\n      .fromNow(!withSuffix)\n  }\n\n  valueOf() {\n    return this.asMilliseconds()\n  }\n\n  milliseconds() { return this.get('milliseconds') }\n  asMilliseconds() { return this.as('milliseconds') }\n  seconds() { return this.get('seconds') }\n  asSeconds() { return this.as('seconds') }\n  minutes() { return this.get('minutes') }\n  asMinutes() { return this.as('minutes') }\n  hours() { return this.get('hours') }\n  asHours() { return this.as('hours') }\n  days() { return this.get('days') }\n  asDays() { return this.as('days') }\n  weeks() { return this.get('weeks') }\n  asWeeks() { return this.as('weeks') }\n  months() { return this.get('months') }\n  asMonths() { return this.as('months') }\n  years() { return this.get('years') }\n  asYears() { return this.as('years') }\n}\n\nconst manipulateDuration = (date, duration, k) =>\n  date.add(duration.years() * k, 'y')\n    .add(duration.months() * k, 'M')\n    .add(duration.days() * k, 'd')\n    .add(duration.hours() * k, 'h')\n    .add(duration.minutes() * k, 'm')\n    .add(duration.seconds() * k, 's')\n    .add(duration.milliseconds() * k, 'ms')\n\nexport default (option, Dayjs, dayjs) => {\n  $d = dayjs\n  $u = dayjs().$utils()\n  dayjs.duration = function (input, unit) {\n    const $l = dayjs.locale()\n    return wrapper(input, { $l }, unit)\n  }\n  dayjs.isDuration = isDuration\n\n  const oldAdd = Dayjs.prototype.add\n  const oldSubtract = Dayjs.prototype.subtract\n\n  Dayjs.prototype.add = function (value, unit) {\n    if (isDuration(value)) {\n      return manipulateDuration(this, value, 1)\n    }\n\n    return oldAdd.bind(this)(value, unit)\n  }\n\n  Dayjs.prototype.subtract = function (value, unit) {\n    if (isDuration(value)) {\n      return manipulateDuration(this, value, -1)\n    }\n\n    return oldSubtract.bind(this)(value, unit)\n  }\n}\n"
  },
  {
    "path": "src/plugin/isBetween/index.js",
    "content": "export default (o, c, d) => {\n  c.prototype.isBetween = function (a, b, u, i) {\n    const dA = d(a)\n    const dB = d(b)\n    i = i || '()'\n    const dAi = i[0] === '('\n    const dBi = i[1] === ')'\n\n    return ((dAi ? this.isAfter(dA, u) : !this.isBefore(dA, u)) &&\n           (dBi ? this.isBefore(dB, u) : !this.isAfter(dB, u)))\n        || ((dAi ? this.isBefore(dA, u) : !this.isAfter(dA, u)) &&\n           (dBi ? this.isAfter(dB, u) : !this.isBefore(dB, u)))\n  }\n}\n"
  },
  {
    "path": "src/plugin/isLeapYear/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.isLeapYear = function () {\n    return ((this.$y % 4 === 0) && (this.$y % 100 !== 0)) || (this.$y % 400 === 0)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/isMoment/index.js",
    "content": "export default (o, c, f) => {\n  f.isMoment = function (input) {\n    return f.isDayjs(input)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/isSameOrAfter/index.js",
    "content": "export default (o, c) => {\n  c.prototype.isSameOrAfter = function (that, units) {\n    return this.isSame(that, units) || this.isAfter(that, units)\n  }\n}\n"
  },
  {
    "path": "src/plugin/isSameOrBefore/index.js",
    "content": "export default (o, c) => {\n  c.prototype.isSameOrBefore = function (that, units) {\n    return this.isSame(that, units) || this.isBefore(that, units)\n  }\n}\n"
  },
  {
    "path": "src/plugin/isToday/index.js",
    "content": "export default (o, c, d) => {\n  const proto = c.prototype\n  proto.isToday = function () {\n    const comparisonTemplate = 'YYYY-MM-DD'\n    const now = d()\n\n    return this.format(comparisonTemplate) === now.format(comparisonTemplate)\n  }\n}\n"
  },
  {
    "path": "src/plugin/isTomorrow/index.js",
    "content": "export default (o, c, d) => {\n  const proto = c.prototype\n  proto.isTomorrow = function () {\n    const comparisonTemplate = 'YYYY-MM-DD'\n    const tomorrow = d().add(1, 'day')\n\n    return (\n      this.format(comparisonTemplate) === tomorrow.format(comparisonTemplate)\n    )\n  }\n}\n"
  },
  {
    "path": "src/plugin/isYesterday/index.js",
    "content": "export default (o, c, d) => {\n  const proto = c.prototype\n  proto.isYesterday = function () {\n    const comparisonTemplate = 'YYYY-MM-DD'\n    const yesterday = d().subtract(1, 'day')\n\n    return (\n      this.format(comparisonTemplate) === yesterday.format(comparisonTemplate)\n    )\n  }\n}\n"
  },
  {
    "path": "src/plugin/isoWeek/index.js",
    "content": "import { D, W, Y } from '../../constant'\n\nconst isoWeekPrettyUnit = 'isoweek'\n\nexport default (o, c, d) => {\n  const getYearFirstThursday = (year, isUtc) => {\n    const yearFirstDay = (isUtc ? d.utc : d)().year(year).startOf(Y)\n    let addDiffDays = 4 - yearFirstDay.isoWeekday()\n    if (yearFirstDay.isoWeekday() > 4) {\n      addDiffDays += 7\n    }\n    return yearFirstDay.add(addDiffDays, D)\n  }\n\n  const getCurrentWeekThursday = ins => ins.add((4 - ins.isoWeekday()), D)\n\n  const proto = c.prototype\n\n  proto.isoWeekYear = function () {\n    const nowWeekThursday = getCurrentWeekThursday(this)\n    return nowWeekThursday.year()\n  }\n\n  proto.isoWeek = function (week) {\n    if (!this.$utils().u(week)) {\n      return this.add((week - this.isoWeek()) * 7, D)\n    }\n    const nowWeekThursday = getCurrentWeekThursday(this)\n    const diffWeekThursday = getYearFirstThursday(this.isoWeekYear(), this.$u)\n    return nowWeekThursday.diff(diffWeekThursday, W) + 1\n  }\n\n  proto.isoWeekday = function (week) {\n    if (!this.$utils().u(week)) {\n      return this.day(this.day() % 7 ? week : week - 7)\n    }\n    return this.day() || 7\n  }\n\n  const oldStartOf = proto.startOf\n  proto.startOf = function (units, startOf) {\n    const utils = this.$utils()\n    const isStartOf = !utils.u(startOf) ? startOf : true\n    const unit = utils.p(units)\n    if (unit === isoWeekPrettyUnit) {\n      return isStartOf ? this.date(this.date() - (this.isoWeekday() - 1)).startOf('day') :\n        this.date((this.date() - 1 - (this.isoWeekday() - 1)) + 7).endOf('day')\n    }\n    return oldStartOf.bind(this)(units, startOf)\n  }\n}\n"
  },
  {
    "path": "src/plugin/isoWeeksInYear/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.isoWeeksInYear = function () {\n    const isLeapYear = this.isLeapYear()\n    const last = this.endOf('y')\n    const day = last.day()\n    if (day === 4 || (isLeapYear && day === 5)) {\n      return 53\n    }\n    return 52\n  }\n}\n"
  },
  {
    "path": "src/plugin/localeData/index.js",
    "content": "import { t } from '../localizedFormat/utils'\n\nexport default (o, c, dayjs) => { // locale needed later\n  const proto = c.prototype\n  const getLocalePart = part => (part && (part.indexOf ? part : part.s))\n  const getShort = (ins, target, full, num, localeOrder) => {\n    const locale = ins.name ? ins : ins.$locale()\n    const targetLocale = getLocalePart(locale[target])\n    const fullLocale = getLocalePart(locale[full])\n    const result = targetLocale || fullLocale.map(f => f.slice(0, num))\n    if (!localeOrder) return result\n    const { weekStart } = locale\n    return result.map((_, index) => (result[(index + (weekStart || 0)) % 7]))\n  }\n  const getDayjsLocaleObject = () => dayjs.Ls[dayjs.locale()]\n  const getLongDateFormat = (l, format) =>\n    l.formats[format] || t(l.formats[format.toUpperCase()])\n\n  const localeData = function () {\n    return {\n      months: instance =>\n        (instance ? instance.format('MMMM') : getShort(this, 'months')),\n      monthsShort: instance =>\n        (instance ? instance.format('MMM') : getShort(this, 'monthsShort', 'months', 3)),\n      firstDayOfWeek: () => this.$locale().weekStart || 0,\n      weekdays: instance => (instance ? instance.format('dddd') : getShort(this, 'weekdays')),\n      weekdaysMin: instance =>\n        (instance ? instance.format('dd') : getShort(this, 'weekdaysMin', 'weekdays', 2)),\n      weekdaysShort: instance =>\n        (instance ? instance.format('ddd') : getShort(this, 'weekdaysShort', 'weekdays', 3)),\n      longDateFormat: format => getLongDateFormat(this.$locale(), format),\n      meridiem: this.$locale().meridiem,\n      ordinal: this.$locale().ordinal\n    }\n  }\n  proto.localeData = function () {\n    return localeData.bind(this)()\n  }\n\n  dayjs.localeData = () => {\n    const localeObject = getDayjsLocaleObject()\n    return {\n      firstDayOfWeek: () => localeObject.weekStart || 0,\n      weekdays: () => dayjs.weekdays(),\n      weekdaysShort: () => dayjs.weekdaysShort(),\n      weekdaysMin: () => dayjs.weekdaysMin(),\n      months: () => dayjs.months(),\n      monthsShort: () => dayjs.monthsShort(),\n      longDateFormat: format => getLongDateFormat(localeObject, format),\n      meridiem: localeObject.meridiem,\n      ordinal: localeObject.ordinal\n    }\n  }\n\n  dayjs.months = () => getShort(getDayjsLocaleObject(), 'months')\n\n  dayjs.monthsShort = () => getShort(getDayjsLocaleObject(), 'monthsShort', 'months', 3)\n\n  dayjs.weekdays = localeOrder => getShort(getDayjsLocaleObject(), 'weekdays', null, null, localeOrder)\n\n  dayjs.weekdaysShort = localeOrder => getShort(getDayjsLocaleObject(), 'weekdaysShort', 'weekdays', 3, localeOrder)\n\n  dayjs.weekdaysMin = localeOrder => getShort(getDayjsLocaleObject(), 'weekdaysMin', 'weekdays', 2, localeOrder)\n}\n"
  },
  {
    "path": "src/plugin/localizedFormat/index.js",
    "content": "import { FORMAT_DEFAULT } from '../../constant'\nimport { u, englishFormats } from './utils'\n\nexport default (o, c, d) => {\n  const proto = c.prototype\n  const oldFormat = proto.format\n\n  d.en.formats = englishFormats\n  proto.format = function (formatStr = FORMAT_DEFAULT) {\n    const { formats = {} } = this.$locale()\n    const result = u(formatStr, formats)\n    return oldFormat.call(this, result)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/localizedFormat/utils.js",
    "content": "// eslint-disable-next-line import/prefer-default-export\nexport const t = format =>\n  format.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g, (_, a, b) => a || b.slice(1))\n\nexport const englishFormats = {\n  LTS: 'h:mm:ss A',\n  LT: 'h:mm A',\n  L: 'MM/DD/YYYY',\n  LL: 'MMMM D, YYYY',\n  LLL: 'MMMM D, YYYY h:mm A',\n  LLLL: 'dddd, MMMM D, YYYY h:mm A'\n}\n\nexport const u = (formatStr, formats) => formatStr.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g, (_, a, b) => {\n  const B = b && b.toUpperCase()\n  return a || formats[b] || englishFormats[b] || t(formats[B])\n})\n"
  },
  {
    "path": "src/plugin/minMax/index.js",
    "content": "export default (o, c, d) => {\n  const sortBy = (method, dates) => {\n    if (\n      !dates ||\n      !dates.length ||\n      (dates.length === 1 && !dates[0]) ||\n      (dates.length === 1 && Array.isArray(dates[0]) && !dates[0].length)\n    ) {\n      return null\n    }\n    if (dates.length === 1 && dates[0].length > 0) {\n      [dates] = dates\n    }\n    dates = dates.filter(date => date)\n    let result;\n    [result] = dates\n    for (let i = 1; i < dates.length; i += 1) {\n      if (!dates[i].isValid() || dates[i][method](result)) {\n        result = dates[i]\n      }\n    }\n    return result\n  }\n\n  d.max = function () {\n    const args = [].slice.call(arguments, 0) // eslint-disable-line prefer-rest-params\n    return sortBy('isAfter', args)\n  }\n  d.min = function () {\n    const args = [].slice.call(arguments, 0) // eslint-disable-line prefer-rest-params\n    return sortBy('isBefore', args)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/negativeYear/index.js",
    "content": "export default (_, c, dayjs) => {\n  const proto = c.prototype\n\n  const parseDate = (cfg) => {\n    const { date, utc } = cfg\n    if (typeof date === 'string' && date.charAt(0) === '-') {\n      const normalData = date.slice(1)\n      let newDate = dayjs(normalData)\n      if (utc) {\n        newDate = dayjs.utc(normalData)\n      } else {\n        newDate = dayjs(normalData)\n      }\n      const fullYear = newDate.year()\n      if (date.indexOf(`-${fullYear}`) !== -1) {\n        return dayjs(newDate).subtract(fullYear * 2, 'year').toDate()\n      }\n      return date\n    }\n    return date\n  }\n\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    cfg.date = parseDate.bind(this)(cfg)\n    oldParse.bind(this)(cfg)\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/objectSupport/index.js",
    "content": "export default (o, c, dayjs) => {\n  const proto = c.prototype\n  const isObject = obj => obj !== null && !(obj instanceof Date) && !(obj instanceof Array)\n        && !proto.$utils().u(obj) && (obj.constructor.name === 'Object')\n  const prettyUnit = (u) => {\n    const unit = proto.$utils().p(u)\n    return unit === 'date' ? 'day' : unit\n  }\n  const parseDate = (cfg) => {\n    const { date, utc } = cfg\n    const $d = {}\n    if (isObject(date)) {\n      if (!Object.keys(date).length) {\n        return new Date()\n      }\n      const now = utc ? dayjs.utc() : dayjs()\n      Object.keys(date).forEach((k) => {\n        $d[prettyUnit(k)] = date[k]\n      })\n      const d = $d.day || ((!$d.year && !($d.month >= 0)) ? now.date() : 1)\n      const y = $d.year || now.year()\n      const M = $d.month >= 0 ? $d.month : ((!$d.year && !$d.day) ? now.month() : 0)// eslint-disable-line no-nested-ternary,max-len\n      const h = $d.hour || 0\n      const m = $d.minute || 0\n      const s = $d.second || 0\n      const ms = $d.millisecond || 0\n      if (utc) {\n        return new Date(Date.UTC(y, M, d, h, m, s, ms))\n      }\n      return new Date(y, M, d, h, m, s, ms)\n    }\n    return date\n  }\n\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    cfg.date = parseDate.bind(this)(cfg)\n    oldParse.bind(this)(cfg)\n  }\n\n  const oldSet = proto.set\n  const oldAdd = proto.add\n  const oldSubtract = proto.subtract\n\n  const callObject = function (call, argument, string, offset = 1) {\n    const keys = Object.keys(argument)\n    let chain = this\n    keys.forEach((key) => {\n      chain = call.bind(chain)(argument[key] * offset, key)\n    })\n    return chain\n  }\n\n  proto.set = function (unit, value) {\n    value = value === undefined ? unit : value\n    if (unit.constructor.name === 'Object') {\n      return callObject.bind(this)(function (i, s) {\n        return oldSet.bind(this)(s, i)\n      }, value, unit)\n    }\n    return oldSet.bind(this)(unit, value)\n  }\n  proto.add = function (value, unit) {\n    if (value.constructor.name === 'Object') {\n      return callObject.bind(this)(oldAdd, value, unit)\n    }\n    return oldAdd.bind(this)(value, unit)\n  }\n  proto.subtract = function (value, unit) {\n    if (value.constructor.name === 'Object') {\n      return callObject.bind(this)(oldAdd, value, unit, -1)\n    }\n    return oldSubtract.bind(this)(value, unit)\n  }\n}\n"
  },
  {
    "path": "src/plugin/pluralGetSet/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n\n  const pluralAliases = [\n    'milliseconds',\n    'seconds',\n    'minutes',\n    'hours',\n    'days',\n    'weeks',\n    'isoWeeks',\n    'months',\n    'quarters',\n    'years',\n    'dates'\n  ]\n\n  pluralAliases.forEach((alias) => {\n    proto[alias] = proto[alias.replace(/s$/, '')]\n  })\n}\n"
  },
  {
    "path": "src/plugin/preParsePostFormat/index.js",
    "content": "// Plugin template from https://day.js.org/docs/en/plugin/plugin\nexport default (option, dayjsClass) => {\n  const oldParse = dayjsClass.prototype.parse\n  dayjsClass.prototype.parse = function (cfg) {\n    if (typeof cfg.date === 'string') {\n      const locale = this.$locale()\n      cfg.date =\n        locale && locale.preparse ? locale.preparse(cfg.date) : cfg.date\n    }\n    // original parse result\n    return oldParse.bind(this)(cfg)\n  }\n\n  // // overriding existing API\n  // // e.g. extend dayjs().format()\n  const oldFormat = dayjsClass.prototype.format\n  dayjsClass.prototype.format = function (...args) {\n    // original format result\n    const result = oldFormat.call(this, ...args)\n    // return modified result\n    const locale = this.$locale()\n    return locale && locale.postformat ? locale.postformat(result) : result\n  }\n\n  const oldFromTo = dayjsClass.prototype.fromToBase\n\n  if (oldFromTo) {\n    dayjsClass.prototype.fromToBase = function (\n      input,\n      withoutSuffix,\n      instance,\n      isFrom\n    ) {\n      const locale = this.$locale() || instance.$locale()\n\n      // original format result\n      return oldFromTo.call(\n        this,\n        input,\n        withoutSuffix,\n        instance,\n        isFrom,\n        locale && locale.postformat\n      )\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugin/quarterOfYear/index.js",
    "content": "import { Q, M, D } from '../../constant'\n\nexport default (o, c) => {\n  const proto = c.prototype\n  proto.quarter = function (quarter) {\n    if (!this.$utils().u(quarter)) {\n      return this.month((this.month() % 3) + ((quarter - 1) * 3))\n    }\n    return Math.ceil((this.month() + 1) / 3)\n  }\n\n  const oldAdd = proto.add\n  proto.add = function (number, units) {\n    number = Number(number) // eslint-disable-line no-param-reassign\n    const unit = this.$utils().p(units)\n    if (unit === Q) {\n      return this.add(number * 3, M)\n    }\n    return oldAdd.bind(this)(number, units)\n  }\n\n  const oldStartOf = proto.startOf\n  proto.startOf = function (units, startOf) {\n    const utils = this.$utils()\n    const isStartOf = !utils.u(startOf) ? startOf : true\n    const unit = utils.p(units)\n    if (unit === Q) {\n      const quarter = this.quarter() - 1\n      return isStartOf ? this.month(quarter * 3)\n        .startOf(M).startOf(D) :\n        this.month((quarter * 3) + 2).endOf(M).endOf(D)\n    }\n    return oldStartOf.bind(this)(units, startOf)\n  }\n}\n"
  },
  {
    "path": "src/plugin/relativeTime/index.js",
    "content": "import * as C from '../../constant'\n\nexport default (o, c, d) => {\n  o = o || {}\n  const proto = c.prototype\n  const relObj = {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  }\n  d.en.relativeTime = relObj\n  proto.fromToBase = (input, withoutSuffix, instance, isFrom, postFormat) => {\n    const loc = instance.$locale().relativeTime || relObj\n    const T = o.thresholds || [\n      { l: 's', r: 44, d: C.S },\n      { l: 'm', r: 89 },\n      { l: 'mm', r: 44, d: C.MIN },\n      { l: 'h', r: 89 },\n      { l: 'hh', r: 21, d: C.H },\n      { l: 'd', r: 35 },\n      { l: 'dd', r: 25, d: C.D },\n      { l: 'M', r: 45 },\n      { l: 'MM', r: 10, d: C.M },\n      { l: 'y', r: 17 },\n      { l: 'yy', d: C.Y }\n    ]\n    const Tl = T.length\n    let result\n    let out\n    let isFuture\n\n    for (let i = 0; i < Tl; i += 1) {\n      let t = T[i]\n      if (t.d) {\n        result = isFrom\n          ? d(input).diff(instance, t.d, true)\n          : instance.diff(input, t.d, true)\n      }\n      let abs = (o.rounding || Math.round)(Math.abs(result))\n      isFuture = result > 0\n      if (abs <= t.r || !t.r) {\n        if (abs <= 1 && i > 0) t = T[i - 1] // 1 minutes -> a minute, 0 seconds -> 0 second\n        const format = loc[t.l]\n        if (postFormat) {\n          abs = postFormat(`${abs}`)\n        }\n        if (typeof format === 'string') {\n          out = format.replace('%d', abs)\n        } else {\n          out = format(abs, withoutSuffix, t.l, isFuture)\n        }\n        break\n      }\n    }\n    if (withoutSuffix) return out\n    const pastOrFuture = isFuture ? loc.future : loc.past\n    if (typeof pastOrFuture === 'function') {\n      return pastOrFuture(out)\n    }\n    return pastOrFuture.replace('%s', out)\n  }\n\n  function fromTo(input, withoutSuffix, instance, isFrom) {\n    return proto.fromToBase(input, withoutSuffix, instance, isFrom)\n  }\n\n  proto.to = function (input, withoutSuffix) {\n    return fromTo(input, withoutSuffix, this, true)\n  }\n  proto.from = function (input, withoutSuffix) {\n    return fromTo(input, withoutSuffix, this)\n  }\n\n  const makeNow = thisDay => (thisDay.$u ? d.utc() : d())\n\n  proto.toNow = function (withoutSuffix) {\n    return this.to(makeNow(this), withoutSuffix)\n  }\n  proto.fromNow = function (withoutSuffix) {\n    return this.from(makeNow(this), withoutSuffix)\n  }\n}\n"
  },
  {
    "path": "src/plugin/timezone/index.js",
    "content": "import { MIN, MS } from '../../constant'\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  hour: 3,\n  minute: 4,\n  second: 5\n}\n\n// Cache time-zone lookups from Intl.DateTimeFormat,\n// as it is a *very* slow method.\nconst dtfCache = {}\nconst getDateTimeFormat = (timezone, options = {}) => {\n  const timeZoneName = options.timeZoneName || 'short'\n  const key = `${timezone}|${timeZoneName}`\n  let dtf = dtfCache[key]\n  if (!dtf) {\n    dtf = new Intl.DateTimeFormat('en-US', {\n      hour12: false,\n      timeZone: timezone,\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n      timeZoneName\n    })\n    dtfCache[key] = dtf\n  }\n  return dtf\n}\n\nexport default (o, c, d) => {\n  let defaultTimezone\n\n  const makeFormatParts = (timestamp, timezone, options = {}) => {\n    const date = new Date(timestamp)\n    const dtf = getDateTimeFormat(timezone, options)\n    return dtf.formatToParts(date)\n  }\n\n  const tzOffset = (timestamp, timezone) => {\n    const formatResult = makeFormatParts(timestamp, timezone)\n    const filled = []\n    for (let i = 0; i < formatResult.length; i += 1) {\n      const { type, value } = formatResult[i]\n      const pos = typeToPos[type]\n\n      if (pos >= 0) {\n        filled[pos] = parseInt(value, 10)\n      }\n    }\n    const hour = filled[3]\n    // Workaround for the same behavior in different node version\n    // https://github.com/nodejs/node/issues/33027\n    /* istanbul ignore next */\n    const fixedHour = hour === 24 ? 0 : hour\n    const utcString = `${filled[0]}-${filled[1]}-${filled[2]} ${fixedHour}:${filled[4]}:${filled[5]}:000`\n    const utcTs = d.utc(utcString).valueOf()\n    let asTS = +timestamp\n    const over = asTS % 1000\n    asTS -= over\n    return (utcTs - asTS) / (60 * 1000)\n  }\n\n  // find the right offset a given local time. The o input is our guess, which determines which\n  // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\n  // https://github.com/moment/luxon/blob/master/src/datetime.js#L76\n  const fixOffset = (localTS, o0, tz) => {\n    // Our UTC time is just a guess because our offset is just a guess\n    let utcGuess = localTS - (o0 * 60 * 1000)\n    // Test whether the zone matches the offset for this ts\n    const o2 = tzOffset(utcGuess, tz)\n    // If so, offset didn't change and we're done\n    if (o0 === o2) {\n      return [utcGuess, o0]\n    }\n    // If not, change the ts by the difference in the offset\n    utcGuess -= (o2 - o0) * 60 * 1000\n    // If that gives us the local time we want, we're done\n    const o3 = tzOffset(utcGuess, tz)\n    if (o2 === o3) {\n      return [utcGuess, o2]\n    }\n    // If it's different, we're in a hole time.\n    // The offset has changed, but the we don't adjust the time\n    return [localTS - (Math.min(o2, o3) * 60 * 1000), Math.max(o2, o3)]\n  }\n\n  const proto = c.prototype\n\n  proto.tz = function (timezone = defaultTimezone, keepLocalTime) {\n    const oldOffset = this.utcOffset()\n    const date = this.toDate()\n    const target = date.toLocaleString('en-US', { timeZone: timezone })\n    const diff = Math.round((date - new Date(target)) / 1000 / 60)\n    const offset = (-Math.round(date.getTimezoneOffset() / 15) * 15) - diff\n    const isUTC = !Number(offset)\n    let ins\n    if (isUTC) { // if utcOffset is 0, turn it to UTC mode\n      ins = this.utcOffset(0, keepLocalTime)\n    } else {\n      ins = d(target, { locale: this.$L }).$set(MS, this.$ms)\n        .utcOffset(offset, true)\n      if (keepLocalTime) {\n        const newOffset = ins.utcOffset()\n        ins = ins.add(oldOffset - newOffset, MIN)\n      }\n    }\n    ins.$x.$timezone = timezone\n    return ins\n  }\n\n  proto.offsetName = function (type) {\n    // type: short(default) / long\n    const zone = this.$x.$timezone || d.tz.guess()\n    const result = makeFormatParts(this.valueOf(), zone, { timeZoneName: type }).find(m => m.type.toLowerCase() === 'timezonename')\n    return result && result.value\n  }\n\n  const oldStartOf = proto.startOf\n  proto.startOf = function (units, startOf) {\n    if (!this.$x || !this.$x.$timezone) {\n      return oldStartOf.call(this, units, startOf)\n    }\n\n    const withoutTz = d(this.format('YYYY-MM-DD HH:mm:ss:SSS'), { locale: this.$L })\n    const startOfWithoutTz = oldStartOf.call(withoutTz, units, startOf)\n    return startOfWithoutTz.tz(this.$x.$timezone, true)\n  }\n\n  d.tz = function (input, arg1, arg2) {\n    const parseFormat = arg2 && arg1\n    const timezone = arg2 || arg1 || defaultTimezone\n    const previousOffset = tzOffset(+d(), timezone)\n    if (typeof input !== 'string') {\n      // timestamp number || js Date || Day.js\n      return d(input).tz(timezone)\n    }\n    const localTs = d.utc(input, parseFormat).valueOf()\n    const [targetTs, targetOffset] = fixOffset(localTs, previousOffset, timezone)\n    const ins = d(targetTs).utcOffset(targetOffset)\n    ins.$x.$timezone = timezone\n    return ins\n  }\n\n  d.tz.guess = function () {\n    return Intl.DateTimeFormat().resolvedOptions().timeZone\n  }\n\n  d.tz.setDefault = function (timezone) {\n    defaultTimezone = timezone\n  }\n}\n"
  },
  {
    "path": "src/plugin/toArray/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.toArray = function () {\n    return [\n      this.$y,\n      this.$M,\n      this.$D,\n      this.$H,\n      this.$m,\n      this.$s,\n      this.$ms\n    ]\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/toObject/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.toObject = function () {\n    return {\n      years: this.$y,\n      months: this.$M,\n      date: this.$D,\n      hours: this.$H,\n      minutes: this.$m,\n      seconds: this.$s,\n      milliseconds: this.$ms\n    }\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/updateLocale/index.js",
    "content": "export default (option, Dayjs, dayjs) => {\n  dayjs.updateLocale = function (locale, customConfig) {\n    const localeList = dayjs.Ls\n    const localeConfig = localeList[locale]\n    if (!localeConfig) return\n    const customConfigKeys = customConfig ? Object.keys(customConfig) : []\n    customConfigKeys.forEach((c) => {\n      if (localeConfig[c] && customConfig[c] && typeof localeConfig[c] === 'object' && typeof customConfig[c] === 'object'\n        && !Array.isArray(localeConfig[c])) {\n        localeConfig[c] = {\n          ...localeConfig[c],\n          ...customConfig[c]\n        }\n      } else {\n        localeConfig[c] = customConfig[c]\n      }\n    })\n    return localeConfig // eslint-disable-line consistent-return\n  }\n}\n\n"
  },
  {
    "path": "src/plugin/utc/index.js",
    "content": "import { MILLISECONDS_A_MINUTE, MIN } from '../../constant'\n\nconst REGEX_VALID_OFFSET_FORMAT = /[+-]\\d\\d(?::?\\d\\d)?/g\nconst REGEX_OFFSET_HOURS_MINUTES_FORMAT = /([+-]|\\d\\d)/g\n\nfunction offsetFromString(value = '') {\n  const offset = value.match(REGEX_VALID_OFFSET_FORMAT)\n\n  if (!offset) {\n    return null\n  }\n\n  const [indicator, hoursOffset, minutesOffset] = `${offset[0]}`.match(REGEX_OFFSET_HOURS_MINUTES_FORMAT) || ['-', 0, 0]\n  const totalOffsetInMinutes = (+hoursOffset * 60) + (+minutesOffset)\n\n  if (totalOffsetInMinutes === 0) {\n    return 0\n  }\n\n  return indicator === '+' ? totalOffsetInMinutes : -totalOffsetInMinutes\n}\n\n\nexport default (option, Dayjs, dayjs) => {\n  const proto = Dayjs.prototype\n  dayjs.utc = function (date) {\n    const cfg = { date, utc: true, args: arguments } // eslint-disable-line prefer-rest-params\n    return new Dayjs(cfg) // eslint-disable-line no-use-before-define\n  }\n\n  proto.utc = function (keepLocalTime) {\n    const ins = dayjs(this.toDate(), { locale: this.$L, utc: true })\n    if (keepLocalTime) {\n      return ins.add(this.utcOffset(), MIN)\n    }\n    return ins\n  }\n\n  proto.local = function () {\n    return dayjs(this.toDate(), { locale: this.$L, utc: false })\n  }\n\n  const oldParse = proto.parse\n  proto.parse = function (cfg) {\n    if (cfg.utc) {\n      this.$u = true\n    }\n    if (!this.$utils().u(cfg.$offset)) {\n      this.$offset = cfg.$offset\n    }\n    oldParse.call(this, cfg)\n  }\n\n  const oldInit = proto.init\n  proto.init = function () {\n    if (this.$u) {\n      const { $d } = this\n      this.$y = $d.getUTCFullYear()\n      this.$M = $d.getUTCMonth()\n      this.$D = $d.getUTCDate()\n      this.$W = $d.getUTCDay()\n      this.$H = $d.getUTCHours()\n      this.$m = $d.getUTCMinutes()\n      this.$s = $d.getUTCSeconds()\n      this.$ms = $d.getUTCMilliseconds()\n    } else {\n      oldInit.call(this)\n    }\n  }\n\n  const oldUtcOffset = proto.utcOffset\n  proto.utcOffset = function (input, keepLocalTime) {\n    const { u } = this.$utils()\n    if (u(input)) {\n      if (this.$u) {\n        return 0\n      }\n      if (!u(this.$offset)) {\n        return this.$offset\n      }\n      return oldUtcOffset.call(this)\n    }\n    if (typeof input === 'string') {\n      input = offsetFromString(input)\n      if (input === null) {\n        return this\n      }\n    }\n    const offset = Math.abs(input) <= 16 ? input * 60 : input\n\n    if (offset === 0) {\n      return this.utc(keepLocalTime)\n    }\n\n    let ins = this.clone()\n\n    if (keepLocalTime) {\n      ins.$offset = offset\n      ins.$u = false\n      return ins\n    }\n\n    const localTimezoneOffset = this.$u\n      ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset()\n    ins = this.local().add(offset + localTimezoneOffset, MIN)\n    ins.$offset = offset\n    ins.$x.$localOffset = localTimezoneOffset\n\n    return ins\n  }\n\n  const oldFormat = proto.format\n  const UTC_FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ss[Z]'\n  proto.format = function (formatStr) {\n    const str = formatStr || (this.$u ? UTC_FORMAT_DEFAULT : '')\n    return oldFormat.call(this, str)\n  }\n\n  proto.valueOf = function () {\n    const addedOffset = !this.$utils().u(this.$offset)\n      ? this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()) : 0\n    return this.$d.valueOf() - (addedOffset * MILLISECONDS_A_MINUTE)\n  }\n\n  proto.isUTC = function () {\n    return !!this.$u\n  }\n\n  proto.toISOString = function () {\n    return this.toDate().toISOString()\n  }\n\n  proto.toString = function () {\n    return this.toDate().toUTCString()\n  }\n\n  const oldToDate = proto.toDate\n  proto.toDate = function (type) {\n    if (type === 's' && this.$offset) {\n      return dayjs(this.format('YYYY-MM-DD HH:mm:ss:SSS')).toDate()\n    }\n    return oldToDate.call(this)\n  }\n  const oldDiff = proto.diff\n  proto.diff = function (input, units, float) {\n    if (input && this.$u === input.$u) {\n      return oldDiff.call(this, input, units, float)\n    }\n    const localThis = this.local()\n    const localInput = dayjs(input).local()\n    return oldDiff.call(localThis, localInput, units, float)\n  }\n}\n"
  },
  {
    "path": "src/plugin/weekOfYear/index.js",
    "content": "import { MS, Y, D, W } from '../../constant'\n\nexport default (o, c, d) => {\n  const proto = c.prototype\n  proto.week = function (week = null) {\n    if (week !== null) {\n      return this.add((week - this.week()) * 7, D)\n    }\n    const yearStart = this.$locale().yearStart || 1\n    if (this.month() === 11 && this.date() > 25) {\n      // d(this) is for badMutable\n      const nextYearStartDay = d(this).startOf(Y).add(1, Y).date(yearStart)\n      const thisEndOfWeek = d(this).endOf(W)\n      if (nextYearStartDay.isBefore(thisEndOfWeek)) {\n        return 1\n      }\n    }\n    const yearStartDay = d(this).startOf(Y).date(yearStart)\n    const yearStartWeek = yearStartDay.startOf(W).subtract(1, MS)\n    const diffInWeek = this.diff(yearStartWeek, W, true)\n    if (diffInWeek < 0) {\n      return d(this).startOf('week').week()\n    }\n    return Math.ceil(diffInWeek)\n  }\n\n  proto.weeks = function (week = null) {\n    return this.week(week)\n  }\n}\n"
  },
  {
    "path": "src/plugin/weekYear/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.weekYear = function () {\n    const month = this.month()\n    const weekOfYear = this.week()\n    const year = this.year()\n    if (weekOfYear === 1 && month === 11) {\n      return year + 1\n    }\n    if (month === 0 && weekOfYear >= 52) {\n      return year - 1\n    }\n    return year\n  }\n}\n"
  },
  {
    "path": "src/plugin/weekday/index.js",
    "content": "export default (o, c) => {\n  const proto = c.prototype\n  proto.weekday = function (input) {\n    const weekStart = this.$locale().weekStart || 0\n    const { $W } = this\n    const weekday = ($W < weekStart ? $W + 7 : $W) - weekStart\n    if (this.$utils().u(input)) {\n      return weekday\n    }\n    return this.subtract(weekday, 'day').add(input, 'day')\n  }\n}\n\n"
  },
  {
    "path": "src/utils.js",
    "content": "import * as C from './constant'\n\nconst padStart = (string, length, pad) => {\n  const s = String(string)\n  if (!s || s.length >= length) return string\n  return `${Array((length + 1) - s.length).join(pad)}${string}`\n}\n\nconst padZoneStr = (instance) => {\n  const negMinutes = -instance.utcOffset()\n  const minutes = Math.abs(negMinutes)\n  const hourOffset = Math.floor(minutes / 60)\n  const minuteOffset = minutes % 60\n  return `${negMinutes <= 0 ? '+' : '-'}${padStart(hourOffset, 2, '0')}:${padStart(minuteOffset, 2, '0')}`\n}\n\nconst monthDiff = (a, b) => {\n  // function from moment.js in order to keep the same result\n  if (a.date() < b.date()) return -monthDiff(b, a)\n  const wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month())\n  const anchor = a.clone().add(wholeMonthDiff, C.M)\n  const c = b - anchor < 0\n  const anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M)\n  return +(-(wholeMonthDiff + ((b - anchor) / (c ? (anchor - anchor2) :\n    (anchor2 - anchor)))) || 0)\n}\n\nconst absFloor = n => (n < 0 ? Math.ceil(n) || 0 : Math.floor(n))\n\nconst prettyUnit = (u) => {\n  const special = {\n    M: C.M,\n    y: C.Y,\n    w: C.W,\n    d: C.D,\n    D: C.DATE,\n    h: C.H,\n    m: C.MIN,\n    s: C.S,\n    ms: C.MS,\n    Q: C.Q\n  }\n  return special[u] || String(u || '').toLowerCase().replace(/s$/, '')\n}\n\nconst isUndefined = s => s === undefined\n\nexport default {\n  s: padStart,\n  z: padZoneStr,\n  m: monthDiff,\n  a: absFloor,\n  p: prettyUnit,\n  u: isUndefined\n}\n"
  },
  {
    "path": "test/__mocks__/dayjs.js",
    "content": "const dayjs = require('../../src')\n\nmodule.exports = dayjs\n"
  },
  {
    "path": "test/browser.spec.js",
    "content": "/* eslint-disable prefer-arrow-callback,func-names */\n// Please do NOT modify or change this file\n// Checkout our unit test files in test/*.test.js\ndescribe('Install', function () {\n  it('window.dayjs ', function () {\n    if (!window.dayjs) throw new Error('No window.dayjs')\n  })\n})\n\ndescribe('Core APIs', function () {\n  it('Chain Methods', function () {\n    expect(dayjs('2011-02-05T14:48:00.000Z')\n      .clone()\n      .set('month', 3)\n      .set('second', 30)\n      .endOf('month')\n      .startOf('week')\n      .add(1, 'day')\n      .subtract(1, 'year')\n      .format('{YYYY} MM-DDTHH:mm:ss')).toBe('{2010} 04-25T00:00:00')\n  })\n\n  it('Date parse - nonstandard date string', function () {\n    expect(dayjs('2018-4-1 1:1:1:22').format('YYYY-MM-DD hh:mm:ss'))\n      .toBe('2018-04-01 01:01:01')\n    expect(dayjs('2018-4-1').format('YYYY-MM-DD hh:mm:ss'))\n      .toBe('2018-04-01 12:00:00')\n    expect(dayjs('2018-4-1 11:49').format('YYYY-MM-DD hh:mm:ss')) // fix ios bug\n      .toBe('2018-04-01 11:49:00')\n  })\n})\n"
  },
  {
    "path": "test/comparison.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../src'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ntest('is same without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n\n  expect(m.isSame(dayjs(new Date(2012, 3, 2, 3, 5, 5, 10)))).toBe(false, 'year is later')\n  expect(m.isSame(dayjs(new Date(2010, 3, 2, 3, 3, 5, 10)))).toBe(false, 'year is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)))).toBe(false, 'month is later')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)))).toBe(false, 'month is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)))).toBe(false, 'day is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)))).toBe(false, 'day is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)))).toBe(false, 'hour is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)))).toBe(false, 'hour is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)))).toBe(false, 'minute is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)))).toBe(false, 'minute is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)))).toBe(false, 'second is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 4, 11)))).toBe(false, 'second is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)))).toBe(true, 'millisecond match')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 5, 11)))).toBe(false, 'millisecond is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)))).toBe(false, 'millisecond is earlier')\n  expect(m.isSame(m)).toBe(true, 'moments are the same as themselves')\n  expect(+m).toEqual(+mCopy, 'isSame second should not change moment')\n})\n\ntest('is same year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year match')\n  expect(m.isSame(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year')).toBe(true, 'exact start of year')\n  expect(m.isSame(dayjs(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'exact end of year')\n  expect(m.isSame(dayjs(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year')).toBe(false, 'start of next year')\n  expect(m.isSame(dayjs(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'end of previous year')\n  expect(m.isSame(m, 'year')).toBe(true, 'same moments are in the same year')\n  expect(+m).toEqual(+mCopy, 'isSame year should not change moment')\n})\n\ntest('is same month', () => {\n  const m = dayjs(new Date(2011, 2, 3, 4, 5, 6, 7))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month match')\n  expect(m.isSame(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month')).toBe(true, 'exact start of month')\n  expect(m.isSame(dayjs(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month')).toBe(true, 'exact end of month')\n  expect(m.isSame(dayjs(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month')).toBe(false, 'start of next month')\n  expect(m.isSame(dayjs(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month')).toBe(false, 'end of previous month')\n  expect(m.isSame(m, 'month')).toBe(true, 'same moments are in the same month')\n  expect(+m).toEqual(+mCopy, 'isSame month should not change moment')\n})\n\ntest('is same day', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'day match')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'month mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day')).toBe(false, 'day mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day')).toBe(true, 'exact start of day')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day')).toBe(true, 'exact end of day')\n  expect(m.isSame(dayjs(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day')).toBe(false, 'start of next day')\n  expect(m.isSame(dayjs(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day')).toBe(false, 'end of previous day')\n  expect(m.isSame(m, 'day')).toBe(true, 'same moments are in the same day')\n  expect(+m).toEqual(+mCopy, 'isSame day should not change moment')\n})\n\ntest('is same hour', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'hour match')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'month mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour')).toBe(false, 'day mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour')).toBe(false, 'hour mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour')).toBe(true, 'exact start of hour')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour')).toBe(true, 'exact end of hour')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour')).toBe(false, 'start of next hour')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour')).toBe(false, 'end of previous hour')\n  expect(m.isSame(m, 'hour')).toBe(true, 'same moments are in the same hour')\n  expect(+m).toEqual(+mCopy, 'isSame hour should not change moment')\n})\n\ntest('is same minute', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'minute match')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'month mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute')).toBe(false, 'day mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute')).toBe(false, 'hour mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute')).toBe(false, 'minute mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute')).toBe(true, 'exact start of minute')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute')).toBe(true, 'exact end of minute')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute')).toBe(false, 'start of next minute')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute')).toBe(false, 'end of previous minute')\n  expect(m.isSame(m, 'minute')).toBe(true, 'same moments are in the same minute')\n  expect(+m).toEqual(+mCopy, 'isSame minute should not change moment')\n})\n\ntest('is same second', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'second match')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'year mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'month mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second')).toBe(false, 'day mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second')).toBe(false, 'hour mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second')).toBe(false, 'minute mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second')).toBe(false, 'second mismatch')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second')).toBe(true, 'exact start of second')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second')).toBe(true, 'exact end of second')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second')).toBe(false, 'start of next second')\n  expect(m.isSame(dayjs(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second')).toBe(false, 'end of previous second')\n  expect(m.isSame(m, 'second')).toBe(true, 'same moments are in the same second')\n  expect(+m).toEqual(+mCopy, 'isSame second should not change moment')\n})\n\ntest('is same millisecond', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'millisecond match')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds')).toBe(true, 'plural should work')\n  expect(m.isSame(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is later')\n  expect(m.isSame(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is later')\n  expect(m.isSame(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'day is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond')).toBe(false, 'day is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond')).toBe(false, 'hour is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond')).toBe(false, 'hour is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond')).toBe(false, 'minute is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond')).toBe(false, 'minute is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond')).toBe(false, 'second is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond')).toBe(false, 'second is earlier')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond')).toBe(false, 'millisecond is later')\n  expect(m.isSame(dayjs(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond')).toBe(false, 'millisecond is earlier')\n  expect(m.isSame(m, 'millisecond')).toBe(true, 'same moments are in the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isSame millisecond should not change moment')\n})\n\ntest('is same with invalid moments', () => {\n  expect(dayjs(null).isSame(dayjs('2018-01-01'))).toBe(false, 'invalid moments are not considered equal')\n  expect(dayjs('2018-01-01').isSame(dayjs(null))).toBe(false, 'invalid moments are not considered equal')\n})\n\n\n// isAfter()\n\ntest('is after year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year match')\n  expect(m.isAfter(dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)), 'years')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year')).toBe(false, 'exact start of year')\n  expect(m.isAfter(dayjs(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'exact end of year')\n  expect(m.isAfter(dayjs(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year')).toBe(false, 'start of next year')\n  expect(m.isAfter(dayjs(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'end of previous year')\n  expect(m.isAfter(dayjs(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'end of year far before')\n  expect(m.isAfter(m, 'year')).toBe(false, 'same moments are not after the same year')\n  expect(+m).toEqual(+mCopy, 'isAfter year should not change moment')\n})\n\ntest('is after month', () => {\n  const m = dayjs(new Date(2011, 2, 3, 4, 5, 6, 7))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month match')\n  expect(m.isAfter(dayjs(new Date(2010, 2, 6, 7, 8, 9, 10)), 'months')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month')).toBe(false, 'exact start of month')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month')).toBe(false, 'exact end of month')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month')).toBe(false, 'start of next month')\n  expect(m.isAfter(dayjs(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month')).toBe(true, 'end of previous month')\n  expect(m.isAfter(dayjs(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month')).toBe(true, 'later month but earlier year')\n  expect(m.isAfter(m, 'month')).toBe(false, 'same moments are not after the same month')\n  expect(+m).toEqual(+mCopy, 'isAfter month should not change moment')\n})\n\ntest('is after day', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'day match')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 7, 8, 9, 10)), 'days')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day')).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day')).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day')).toBe(false, 'exact start of day')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day')).toBe(false, 'exact end of day')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day')).toBe(false, 'start of next day')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day')).toBe(true, 'end of previous day')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day')).toBe(true, 'later day but earlier year')\n  expect(m.isAfter(m, 'day')).toBe(false, 'same moments are not after the same day')\n  expect(+m).toEqual(+mCopy, 'isAfter day should not change moment')\n})\n\ntest('is after hour', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'hour match')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hours')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour')).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour')).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour')).toBe(false, 'hour is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'hour is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour')).toBe(false, 'exact start of hour')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour')).toBe(false, 'exact end of hour')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour')).toBe(false, 'start of next hour')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour')).toBe(true, 'end of previous hour')\n  expect(m.isAfter(m, 'hour')).toBe(false, 'same moments are not after the same hour')\n  expect(+m).toEqual(+mCopy, 'isAfter hour should not change moment')\n})\n\ntest('is after minute', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'minute match')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minutes')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute')).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute')).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute')).toBe(false, 'hour is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute')).toBe(true, 'hour is earler')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute')).toBe(false, 'minute is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute')).toBe(true, 'minute is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute')).toBe(false, 'exact start of minute')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute')).toBe(false, 'exact end of minute')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute')).toBe(false, 'start of next minute')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute')).toBe(true, 'end of previous minute')\n  expect(m.isAfter(m, 'minute')).toBe(false, 'same moments are not after the same minute')\n  expect(+m).toEqual(+mCopy, 'isAfter minute should not change moment')\n})\n\ntest('is after second', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'second match')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'seconds')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second')).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second')).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second')).toBe(false, 'hour is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second')).toBe(true, 'hour is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second')).toBe(false, 'minute is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second')).toBe(true, 'minute is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second')).toBe(false, 'second is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second')).toBe(true, 'second is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second')).toBe(false, 'exact start of second')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second')).toBe(false, 'exact end of second')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second')).toBe(false, 'start of next second')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second')).toBe(true, 'end of previous second')\n  expect(m.isAfter(m, 'second')).toBe(false, 'same moments are not after the same second')\n  expect(+m).toEqual(+mCopy, 'isAfter second should not change moment')\n})\n\ntest('is after millisecond', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'millisecond match')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds')).toBe(true, 'plural should work')\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond')).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond')).toBe(false, 'hour is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond')).toBe(true, 'hour is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond')).toBe(false, 'minute is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond')).toBe(true, 'minute is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond')).toBe(false, 'second is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond')).toBe(true, 'second is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond')).toBe(false, 'millisecond is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond')).toBe(true, 'millisecond is earlier')\n  expect(m.isAfter(m, 'millisecond')).toBe(false, 'same moments are not after the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isAfter millisecond should not change moment')\n})\n\n\ntest('is after without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isAfter(dayjs(new Date(2012, 3, 2, 3, 5, 5, 10)))).toBe(false, 'year is later')\n  expect(m.isAfter(dayjs(new Date(2010, 3, 2, 3, 3, 5, 10)))).toBe(true, 'year is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)))).toBe(false, 'month is later')\n  expect(m.isAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)))).toBe(true, 'month is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)))).toBe(false, 'day is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)))).toBe(true, 'day is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)))).toBe(false, 'hour is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)))).toBe(true, 'hour is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)))).toBe(false, 'minute is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)))).toBe(true, 'minute is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)))).toBe(false, 'second is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 11)))).toBe(true, 'second is earlier')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)))).toBe(false, 'millisecond match')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 11)))).toBe(false, 'millisecond is later')\n  expect(m.isAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)))).toBe(true, 'millisecond is earlier')\n  expect(m.isAfter(m)).toBe(false, 'moments are not after themselves')\n  expect(+m).toEqual(+mCopy, 'isAfter second should not change moment')\n})\n\ntest('is after invalid', () => {\n  const m = dayjs()\n  const invalid = dayjs(null)\n  expect(m.isAfter(invalid)).toBe(false, 'valid moment is not after invalid moment')\n  expect(invalid.isAfter(m)).toBe(false, 'invalid moment is not after valid moment')\n  expect(m.isAfter(invalid, 'year')).toBe(false, 'invalid moment year')\n  expect(m.isAfter(invalid, 'month')).toBe(false, 'invalid moment month')\n  expect(m.isAfter(invalid, 'day')).toBe(false, 'invalid moment day')\n  expect(m.isAfter(invalid, 'hour')).toBe(false, 'invalid moment hour')\n  expect(m.isAfter(invalid, 'minute')).toBe(false, 'invalid moment minute')\n  expect(m.isAfter(invalid, 'second')).toBe(false, 'invalid moment second')\n  expect(m.isAfter(invalid, 'milliseconds')).toBe(false, 'invalid moment milliseconds')\n})\n\n// isBefore()\n\ntest('is after without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 5, 5, 10)))).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 3, 5, 10)))).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)))).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)))).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)))).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)))).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)))).toBe(true, 'hour is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)))).toBe(false, 'hour is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)))).toBe(true, 'minute is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)))).toBe(false, 'minute is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)))).toBe(true, 'second is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 11)))).toBe(false, 'second is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)))).toBe(false, 'millisecond match')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 11)))).toBe(true, 'millisecond is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)))).toBe(false, 'millisecond is earlier')\n  expect(m.isBefore(m)).toBe(false, 'moments are not before themselves')\n  expect(+m).toEqual(+mCopy, 'isBefore second should not change moment')\n})\n\ntest('is before year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year match')\n  expect(m.isBefore(dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year')).toBe(false, 'exact start of year')\n  expect(m.isBefore(dayjs(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'exact end of year')\n  expect(m.isBefore(dayjs(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year')).toBe(true, 'start of next year')\n  expect(m.isBefore(dayjs(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'end of previous year')\n  expect(m.isBefore(dayjs(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'end of year far before')\n  expect(m.isBefore(m, 'year')).toBe(false, 'same moments are not before the same year')\n  expect(+m).toEqual(+mCopy, 'isBefore year should not change moment')\n})\n\ntest('is before month', () => {\n  const m = dayjs(new Date(2011, 2, 3, 4, 5, 6, 7))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month match')\n  expect(m.isBefore(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'months')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month')).toBe(false, 'exact start of month')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month')).toBe(false, 'exact end of month')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month')).toBe(true, 'start of next month')\n  expect(m.isBefore(dayjs(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month')).toBe(false, 'end of previous month')\n  expect(m.isBefore(dayjs(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month')).toBe(false, 'later month but earlier year')\n  expect(m.isBefore(m, 'month')).toBe(false, 'same moments are not before the same month')\n  expect(+m).toEqual(+mCopy, 'isBefore month should not change moment')\n})\n\ntest('is before day', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'day match')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 7, 8, 9, 10)), 'days')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day')).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day')).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day')).toBe(false, 'exact start of day')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day')).toBe(false, 'exact end of day')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day')).toBe(true, 'start of next day')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day')).toBe(false, 'end of previous day')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day')).toBe(false, 'later day but earlier year')\n  expect(m.isBefore(m, 'day')).toBe(false, 'same moments are not before the same day')\n  expect(+m).toEqual(+mCopy, 'isBefore day should not change moment')\n})\n\ntest('is before hour', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'hour match')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hours')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour')).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour')).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour')).toBe(true, 'hour is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'hour is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour')).toBe(false, 'exact start of hour')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour')).toBe(false, 'exact end of hour')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour')).toBe(true, 'start of next hour')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour')).toBe(false, 'end of previous hour')\n  expect(m.isBefore(m, 'hour')).toBe(false, 'same moments are not before the same hour')\n  expect(+m).toEqual(+mCopy, 'isBefore hour should not change moment')\n})\n\ntest('is before minute', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'minute match')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minutes')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute')).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute')).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute')).toBe(true, 'hour is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute')).toBe(false, 'hour is earler')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute')).toBe(true, 'minute is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute')).toBe(false, 'minute is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute')).toBe(false, 'exact start of minute')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute')).toBe(false, 'exact end of minute')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute')).toBe(true, 'start of next minute')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute')).toBe(false, 'end of previous minute')\n  expect(m.isBefore(m, 'minute')).toBe(false, 'same moments are not before the same minute')\n  expect(+m).toEqual(+mCopy, 'isBefore minute should not change moment')\n})\n\ntest('is before second', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'second match')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'seconds')).toBe(true, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second')).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second')).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second')).toBe(true, 'hour is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second')).toBe(false, 'hour is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second')).toBe(true, 'minute is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second')).toBe(false, 'minute is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second')).toBe(true, 'second is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second')).toBe(false, 'second is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second')).toBe(false, 'exact start of second')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second')).toBe(false, 'exact end of second')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second')).toBe(true, 'start of next second')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second')).toBe(false, 'end of previous second')\n  expect(m.isBefore(m, 'second')).toBe(false, 'same moments are not before the same second')\n  expect(+m).toEqual(+mCopy, 'isBefore second should not change moment')\n})\n\ntest('is before millisecond', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'millisecond match')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds')).toBe(false, 'plural should work')\n  expect(m.isBefore(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'year is later')\n  expect(m.isBefore(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'month is later')\n  expect(m.isBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'day is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond')).toBe(false, 'day is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond')).toBe(true, 'hour is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond')).toBe(false, 'hour is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond')).toBe(true, 'minute is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond')).toBe(false, 'minute is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond')).toBe(true, 'second is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond')).toBe(false, 'second is earlier')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond')).toBe(true, 'millisecond is later')\n  expect(m.isBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond')).toBe(false, 'millisecond is earlier')\n  expect(m.isBefore(m, 'millisecond')).toBe(false, 'same moments are not before the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isBefore millisecond should not change moment')\n})\n\ntest('is before invalid', () => {\n  const m = dayjs()\n  const invalid = dayjs(null)\n  expect(m.isBefore(invalid)).toBe(false, 'valid moment is not before invalid moment')\n  expect(invalid.isBefore(m)).toBe(false, 'invalid moment is not before valid moment')\n  expect(m.isBefore(invalid, 'year')).toBe(false, 'invalid moment year')\n  expect(m.isBefore(invalid, 'month')).toBe(false, 'invalid moment month')\n  expect(m.isBefore(invalid, 'day')).toBe(false, 'invalid moment day')\n  expect(m.isBefore(invalid, 'hour')).toBe(false, 'invalid moment hour')\n  expect(m.isBefore(invalid, 'minute')).toBe(false, 'invalid moment minute')\n  expect(m.isBefore(invalid, 'second')).toBe(false, 'invalid moment second')\n  expect(m.isBefore(invalid, 'milliseconds')).toBe(false, 'invalid moment milliseconds')\n})\n"
  },
  {
    "path": "test/constructor.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../src'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('supports instanceof dayjs', () => {\n  expect(dayjs() instanceof dayjs).toBeTruthy()\n})\n\nit('$isDayjsObject', () => {\n  const mockOtherVersionDayjsObj = {\n    $isDayjsObject: true\n  }\n  expect(dayjs.isDayjs(mockOtherVersionDayjsObj)).toBeTruthy()\n})\n\nit('does not break isDayjs', () => {\n  expect(dayjs.isDayjs(dayjs())).toBeTruthy()\n  expect(dayjs.isDayjs(new Date())).toBeFalsy()\n})\n"
  },
  {
    "path": "test/display.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../src'\nimport th from '../src/locale/th'\nimport '../src/locale/ja'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format no formatStr', () => {\n  expect(dayjs().format()).toBe(moment().format())\n})\n\nit('Format invalid date', () => {\n  expect(dayjs('').format()).toBe(new Date('').toString())\n  expect(dayjs('otherString').format()).toBe(new Date('otherString').toString())\n})\n\nit('Format Year YY YYYY', () => {\n  expect(dayjs().format('YY')).toBe(moment().format('YY'))\n  expect(dayjs().format('YYYY')).toBe(moment().format('YYYY'))\n  expect(dayjs().format('Y')).toBe('Y')\n  expect(dayjs().format('YYY')).toBe(`${moment().format('YY')}Y`)\n})\n\nit('Format Month M MM MMM MMMM', () => {\n  expect(dayjs().format('M')).toBe(moment().format('M'))\n  expect(dayjs().format('MM')).toBe(moment().format('MM'))\n  expect(dayjs().format('MMM')).toBe(moment().format('MMM'))\n  expect(dayjs().format('MMMM')).toBe(moment().format('MMMM'))\n})\n\nit('Format Day of Month D DD 1 - 31', () => {\n  expect(dayjs().format('D')).toBe(moment().format('D'))\n  expect(dayjs().format('DD')).toBe(moment().format('DD'))\n})\n\nit('Format Day of Week d Sun - Sat', () => {\n  expect(dayjs().format('d')).toBe(moment().format('d'))\n  expect(dayjs().format('dd')).toBe(moment().format('dd'))\n  expect(dayjs().format('ddd')).toBe(moment().format('ddd'))\n  expect(dayjs().format('dddd')).toBe(moment().format('dddd'))\n})\n\nit('Format Hour H HH 24-hour', () => {\n  expect(dayjs().format('H')).toBe(moment().format('H'))\n  expect(dayjs().format('HH')).toBe(moment().format('HH'))\n})\n\nit('Format Hour h hh 12-hour', () => {\n  const time = '2018-05-02T00:00:00.000'\n  const expected = '12'\n  expect(dayjs(time).format('h')).toBe(expected)\n  expect(dayjs(time).format('h')).toBe(moment(time).format('h'))\n  expect(dayjs(time).format('hh')).toBe(expected)\n  expect(dayjs(time).format('hh')).toBe(moment(time).format('hh'))\n\n  const time2 = '2018-05-02T01:00:00.000'\n  expect(dayjs(time2).format('h')).toBe(moment(time2).format('h'))\n  expect(dayjs(time2).format('h')).toBe('1')\n  expect(dayjs(time2).format('hh')).toBe(moment(time2).format('hh'))\n  expect(dayjs(time2).format('hh')).toBe('01')\n\n  const time3 = '2018-05-02T23:00:00.000'\n  const expected3 = '11'\n  expect(dayjs(time3).format('h')).toBe(moment(time3).format('h'))\n  expect(dayjs(time3).format('h')).toBe(expected3)\n  expect(dayjs(time3).format('hh')).toBe(moment(time3).format('hh'))\n  expect(dayjs(time3).format('hh')).toBe(expected3)\n})\n\nit('Format meridiens a A am / pm', () => {\n  const time = '2018-05-02T01:00:00.000'\n  expect(dayjs(time).format('a')).toBe('am')\n  expect(dayjs(time).format('a')).toBe(moment(time).format('a'))\n  expect(dayjs(time).format('A')).toBe('AM')\n  expect(dayjs(time).format('A')).toBe(moment(time).format('A'))\n  expect(dayjs(time).locale('ja').format('a')).toBe('午前')\n  expect(dayjs(time).locale('ja').format('a'))\n    .toBe(moment(time).locale('ja').format('a'))\n\n  const time2 = '2018-05-02T23:00:00.000'\n  expect(dayjs(time2).format('a')).toBe('pm')\n  expect(dayjs(time2).format('a')).toBe(moment(time2).format('a'))\n  expect(dayjs(time2).format('A')).toBe('PM')\n  expect(dayjs(time2).format('A')).toBe(moment(time2).format('A'))\n  expect(dayjs(time2).locale('ja').format('a')).toBe('午後')\n  expect(dayjs(time2).locale('ja').format('a'))\n    .toBe(moment(time2).locale('ja').format('a'))\n})\n\nit('Format Minute m mm', () => {\n  expect(dayjs().format('m')).toBe(moment().format('m'))\n  expect(dayjs().format('mm')).toBe(moment().format('mm'))\n})\n\nit('Format Second s ss SSS', () => {\n  expect(dayjs().format('s')).toBe(moment().format('s'))\n  expect(dayjs().format('ss')).toBe(moment().format('ss'))\n  expect(dayjs().format('SSS')).toBe(moment().format('SSS'))\n  const date = '2011-11-05T14:48:01.002Z'\n  expect(dayjs(date).format('s-ss-SSS')).toBe(moment(date).format('s-ss-SSS'))\n})\n\nit('Format Time Zone ZZ', () => {\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 60 * 8)\n  expect(dayjs().format('Z')).toBe(moment().format('Z'))\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 60 * 8 * -1)\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 0)\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 60 * 10)\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 60 * 11 * -1)\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n  MockDate.set(new Date('2018-05-02T23:00:00.000'), 60 * 5.5 * -1)\n  expect(dayjs().format('ZZ')).toBe(moment().format('ZZ'))\n})\n\nit('Format ddd dd MMM with short locale', () => {\n  expect(dayjs()\n    .locale(th)\n    .format('dd')).toBe(moment()\n    .locale('th')\n    .format('dd'))\n  expect(dayjs()\n    .locale(th)\n    .format('ddd')).toBe(moment()\n    .locale('th')\n    .format('ddd'))\n  expect(dayjs()\n    .locale(th)\n    .format('MMM')).toBe(moment()\n    .locale('th')\n    .format('MMM'))\n})\n\nit('Format token value is 0', () => {\n  const sundayDate = '2000-01-02'\n  const sundayStr = 'd H m s'\n  expect(dayjs(sundayDate).format(sundayStr))\n    .toBe(moment(sundayDate).format(sundayStr))\n})\n\nit('Format Complex with other string - : / ', () => {\n  const string = 'YY-M-D / HH:mm:ss'\n  expect(dayjs().format(string)).toBe(moment().format(string))\n})\n\nit('Format Escaping characters', () => {\n  let string = '[Z] Z'\n  expect(dayjs().format(string)).toBe(moment().format(string))\n  string = '[Z] Z [Z]'\n  expect(dayjs().format(string)).toBe(moment().format(string))\n})\n\ndescribe('Difference', () => {\n  it('empty -> default milliseconds', () => {\n    const dateString = '20110101'\n    const dayjsA = dayjs()\n    const dayjsB = dayjs(dateString)\n    const momentA = moment()\n    const momentB = moment(dateString)\n    expect(dayjsA.diff(dayjsB)).toBe(momentA.diff(momentB))\n  })\n\n  it('diff -> none dayjs object', () => {\n    const dateString = '2013-02-08'\n    const dayjsA = dayjs()\n    const dayjsB = new Date(dateString)\n    const momentA = moment()\n    const momentB = new Date(dateString)\n    expect(dayjsA.diff(dayjsB)).toBe(momentA.diff(momentB))\n  })\n\n  it('diff -> in seconds, minutes, hours, days, weeks, months, quarters, years ', () => {\n    const dayjsA = dayjs()\n    const dayjsB = dayjs().add(1000, 'days')\n    const dayjsC = dayjs().subtract(1000, 'days')\n    const momentA = moment()\n    const momentB = moment().add(1000, 'days')\n    const momentC = moment().subtract(1000, 'days')\n    const units = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'quarters', 'years']\n    units.forEach((unit) => {\n      expect(dayjsA.diff(dayjsB, unit)).toBe(momentA.diff(momentB, unit))\n      expect(dayjsA.diff(dayjsB, unit, true)).toBe(momentA.diff(momentB, unit, true))\n      expect(dayjsA.diff(dayjsC, unit)).toBe(momentA.diff(momentC, unit))\n      expect(dayjsA.diff(dayjsC, unit, true)).toBe(momentA.diff(momentC, unit, true))\n    })\n  })\n\n  it('Special diff in month according to moment.js', () => {\n    const dayjsA = dayjs('20160115')\n    const dayjsB = dayjs('20160215')\n    const dayjsC = dayjs('20170115')\n    const momentA = moment('20160115')\n    const momentB = moment('20160215')\n    const momentC = moment('20170115')\n    const units = ['months', 'quarters', 'years']\n    units.forEach((unit) => {\n      expect(dayjsA.diff(dayjsB, unit)).toBe(momentA.diff(momentB, unit))\n      expect(dayjsA.diff(dayjsB, unit, true)).toBe(momentA.diff(momentB, unit, true))\n      expect(dayjsA.diff(dayjsC, unit)).toBe(momentA.diff(momentC, unit))\n      expect(dayjsA.diff(dayjsC, unit, true)).toBe(momentA.diff(momentC, unit, true))\n    })\n  })\n\n  it('MonthDiff', () => {\n    expect(dayjs('2018-08-08').diff(dayjs('2018-08-08'), 'month')).toEqual(0)\n    expect(dayjs('2018-09-08').diff(dayjs('2018-08-08'), 'month')).toEqual(1)\n    expect(dayjs('2018-08-08').diff(dayjs('2018-09-08'), 'month')).toEqual(-1)\n    expect(dayjs('2018-01-01').diff(dayjs('2018-01-01'), 'month')).toEqual(0)\n  })\n\n  it('undefined edge case', () => {\n    expect(dayjs().diff(undefined, 'seconds')).toBeDefined()\n  })\n})\n\nit('Unix Timestamp (milliseconds)', () => {\n  expect(dayjs().valueOf()).toBe(moment().valueOf())\n})\n\nit('Unix Timestamp (seconds)', () => {\n  expect(dayjs().unix()).toBe(moment().unix())\n})\n\nit('Days in Month', () => {\n  expect(dayjs().daysInMonth()).toBe(moment().daysInMonth())\n  expect(dayjs('20140201').daysInMonth()).toBe(moment('20140201').daysInMonth())\n})\n\nit('Utc Offset', () => {\n  expect(dayjs('2013-01-01T00:00:00.000').utcOffset()).toBe(moment('2013-01-01T00:00:00.000').utcOffset())\n  expect(dayjs('2013-01-01T05:00:00.000').utcOffset()).toBe(moment('2013-01-01T05:00:00.000').utcOffset())\n})\n\nit('As Javascript Date -> toDate', () => {\n  const base = dayjs()\n  const momentBase = moment()\n  const jsDate = base.toDate()\n  expect(jsDate).toEqual(momentBase.toDate())\n  expect(jsDate).toEqual(new Date())\n\n  jsDate.setFullYear(1970)\n  expect(jsDate.toUTCString()).not.toBe(base.toString())\n})\n\nit('As JSON -> toJSON', () => {\n  expect(dayjs().toJSON()).toBe(moment().toJSON())\n  global.console.warn = jest.genMockFunction()// moment.js otherString will throw warn\n  expect(dayjs('otherString').toJSON()).toBe(moment('otherString').toJSON())\n  expect(dayjs('otherString').toJSON()).toBe(null)\n})\n\nit('As ISO 8601 String -> toISOString e.g. 2013-02-04T22:44:30.652Z', () => {\n  expect(dayjs().toISOString()).toBe(moment().toISOString())\n})\n\nit('Year 1 formatted with YYYY should pad with zeroes', () => {\n  const date = new Date(1, 0, 1)\n  date.setUTCFullYear(1) // Required because 0-99 are parsed as 19xx in JS: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#year\n  const res = dayjs(date).format('YYYY')\n  expect(res.slice(0, 3)).toBe('000') // because of timezone, the result might be 0000 0001 or 0002\n  expect(res).toBe(moment(date).format('YYYY'))\n})\n"
  },
  {
    "path": "test/get-set.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../src'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Year', () => {\n  expect(dayjs().get('year')).toBe(moment().get('year'))\n  expect(dayjs().year()).toBe(moment().year())\n  expect(dayjs().year(0).valueOf()).toBe(moment().year(0).valueOf())\n  expect(dayjs().year(2000).valueOf()).toBe(moment().year(2000).valueOf())\n})\n\nit('Month', () => {\n  expect(dayjs().get('month')).toBe(moment().get('month'))\n  expect(dayjs().month()).toBe(moment().month())\n  expect(dayjs().month(0).valueOf()).toBe(moment().month(0).valueOf())\n  expect(dayjs().month(1).valueOf()).toBe(moment().month(1).valueOf())\n})\n\nit('Day of Week', () => {\n  expect(dayjs().get('day')).toBe(moment().get('day'))\n  expect(dayjs().day()).toBe(moment().day())\n  expect(dayjs().day(0).format()).toBe(moment().day(0).format())\n  expect(dayjs().day(1).format()).toBe(moment().day(1).format())\n})\n\nit('Date', () => {\n  expect(dayjs().get('date')).toBe(moment().get('date'))\n  expect(dayjs().date()).toBe(moment().date())\n  expect(dayjs().date(0).valueOf()).toBe(moment().date(0).valueOf())\n  expect(dayjs().date(1).valueOf()).toBe(moment().date(1).valueOf())\n})\n\nit('Hour', () => {\n  expect(dayjs().get('hour')).toBe(moment().get('hour'))\n  expect(dayjs().hour()).toBe(moment().hour())\n  expect(dayjs().hour(0).valueOf()).toBe(moment().hour(0).valueOf())\n  expect(dayjs().hour(1).valueOf()).toBe(moment().hour(1).valueOf())\n})\n\nit('Minute', () => {\n  expect(dayjs().get('minute')).toBe(moment().get('minute'))\n  expect(dayjs().minute()).toBe(moment().minute())\n  expect(dayjs().minute(0).valueOf()).toBe(moment().minute(0).valueOf())\n  expect(dayjs().minute(1).valueOf()).toBe(moment().minute(1).valueOf())\n})\n\nit('Second', () => {\n  expect(dayjs().get('second')).toBe(moment().get('second'))\n  expect(dayjs().second()).toBe(moment().second())\n  expect(dayjs().second(0).valueOf()).toBe(moment().second(0).valueOf())\n  expect(dayjs().second(1).valueOf()).toBe(moment().second(1).valueOf())\n})\n\nit('Millisecond', () => {\n  expect(dayjs().get('millisecond')).toBe(moment().get('millisecond'))\n  expect(dayjs().millisecond()).toBe(moment().millisecond())\n  expect(dayjs().millisecond(0).valueOf()).toBe(moment().millisecond(0).valueOf())\n  expect(dayjs().millisecond(1).valueOf()).toBe(moment().millisecond(1).valueOf())\n})\n\nit('Set Day', () => {\n  expect(dayjs().set('date', 30).valueOf()).toBe(moment().set('date', 30).valueOf())\n})\n\nit('Set Day of Week', () => {\n  expect(dayjs().set('day', 0).valueOf()).toBe(moment().set('day', 0).valueOf())\n})\n\nit('Set Month', () => {\n  expect(dayjs().set('month', 11).valueOf()).toBe(moment().set('month', 11).valueOf())\n})\n\nit('Set Year', () => {\n  expect(dayjs().set('year', 2008).valueOf()).toBe(moment().set('year', 2008).valueOf())\n})\n\nit('Set Hour', () => {\n  expect(dayjs().set('hour', 6).valueOf()).toBe(moment().set('hour', 6).valueOf())\n})\n\nit('Set Minute', () => {\n  expect(dayjs().set('minute', 59).valueOf()).toBe(moment().set('minute', 59).valueOf())\n})\n\nit('Set Second', () => {\n  expect(dayjs().set('second', 59).valueOf()).toBe(moment().set('second', 59).valueOf())\n})\n\nit('Set Millisecond', () => {\n  expect(dayjs().set('millisecond', 999).valueOf()).toBe(moment().set('millisecond', 999).valueOf())\n})\n\nit('Set Month and Year in last day of month', () => {\n  // 2011-07-31 -> 2011-02-28\n  const origin = dayjs('2011-07-31T14:48:00.000Z')\n  const setMonth = origin.set('month', 1)\n  expect(setMonth.month()).toBe(1)\n  expect(origin.date()).toBe(31)\n  expect(setMonth.date()).toBe(28)\n  // 2000-02-29 -> 2001-02-28\n  const origin2 = dayjs('2000-02-29T14:48:00.000Z')\n  const setYear = origin2.set('year', 2001)\n  expect(setYear.month()).toBe(1)\n  expect(origin2.date()).toBe(29)\n  expect(setYear.date()).toBe(28)\n})\n\nit('Set Unknown String', () => {\n  const newDate = dayjs().set('Unknown String', 1)\n  expect(newDate.valueOf())\n    .toBe(moment().set('Unknown String', 1).valueOf())\n})\n\nit('Immutable Set', () => {\n  const dayjsA = dayjs()\n  const dayjsB = dayjsA.set('year', 2011)\n  const momentA = moment()\n  const momentB = momentA.set('year', 2011)\n  expect(dayjsA.valueOf()).not.toBe(dayjsB.valueOf())\n  expect(momentA.valueOf()).toBe(momentB.valueOf())\n})\n\n"
  },
  {
    "path": "test/issues/issue2027.correct-order.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport duration from '../../src/plugin/duration'\nimport objectSupport from '../../src/plugin/objectSupport'\n\ndayjs.extend(objectSupport)\ndayjs.extend(duration)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\n// issue 2027\ndescribe('issue 2027 - order objectSupport > Duration', () => {\n  it('add Duration object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const durationToAdd = dayjs.duration(6, 'hours')\n    const testDate = baseDate.add(durationToAdd)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 20:01:02.003')\n  })\n  it('subtract Duration object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const durationToAdd = dayjs.duration(6, 'hours')\n    const testDate = baseDate.subtract(durationToAdd)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 08:01:02.003')\n  })\n\n  it('add number with unit returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.add(6, 'hours')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 20:01:02.003')\n  })\n  it('subtract number with unit returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.subtract(6, 'hours')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 08:01:02.003')\n  })\n\n  it('parse string returns correct date', () => {\n    const testDate = dayjs('2022-06-26T14:01:02.003')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 14:01:02.003')\n  })\n  it('parse object returns correct date', () => {\n    const testDate = dayjs({\n      year: '2022',\n      month: '05',\n      day: '26',\n      hour: '14',\n      minute: '01',\n      second: '02',\n      millisecond: '003'\n    })\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 14:01:02.003')\n  })\n\n  it('set hour with number returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.hour(10)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 10:01:02.003')\n  })\n  it('set hour with object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.set({ hour: '10' })\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 10:01:02.003')\n  })\n})\n"
  },
  {
    "path": "test/issues/issue2027.swapped-order.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport duration from '../../src/plugin/duration'\nimport objectSupport from '../../src/plugin/objectSupport'\n\ndayjs.extend(duration)\ndayjs.extend(objectSupport)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\n// issue 2027\ndescribe('issue 2027 - order objectSupport > Duration', () => {\n  it('add Duration object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const durationToAdd = dayjs.duration(6, 'hours')\n    const testDate = baseDate.add(durationToAdd)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 20:01:02.003')\n  })\n\n  it('subtract Duration object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const durationToAdd = dayjs.duration(6, 'hours')\n    const testDate = baseDate.subtract(durationToAdd)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 08:01:02.003')\n  })\n\n  it('add number with unit returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.add(6, 'hours')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 20:01:02.003')\n  })\n  it('subtract number with unit returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.subtract(6, 'hours')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 08:01:02.003')\n  })\n\n  it('parse string returns correct date', () => {\n    const testDate = dayjs('2022-06-26T14:01:02.003')\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 14:01:02.003')\n  })\n  it('parse object returns correct date', () => {\n    const testDate = dayjs({\n      year: '2022',\n      month: '05',\n      day: '26',\n      hour: '14',\n      minute: '01',\n      second: '02',\n      millisecond: '003'\n    })\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 14:01:02.003')\n  })\n\n  it('set hour with number returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.hour(10)\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 10:01:02.003')\n  })\n  it('set hour with object returns correct date', () => {\n    const baseDate = dayjs('2022-06-26T14:01:02.003')\n    const testDate = baseDate.set({ hour: '10' })\n\n    expect(testDate.format('YYYY-MM-DD HH:mm:ss.SSS')).toBe('2022-06-26 10:01:02.003')\n  })\n})\n"
  },
  {
    "path": "test/locale/ar-dz.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-dz'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-dz').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-dz').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-dz').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-dz').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-iq.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-iq'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-iq').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-iq').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-iq').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-iq').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-kw.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-kw'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-kw').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-kw').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-kw').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-kw').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-ly.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-ly'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-ly').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-ly').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-ly').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-ly').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-ma.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-ma'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-ma').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-ma').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-ma').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-ma').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-sa.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-sa'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-sa').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-sa').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-sa').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-sa').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar-tn.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\nimport locale from '../../src/locale/ar-tn'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  dayjs.locale(locale)\n  expect(dayjs('2020-01-01 03:00:00').locale('ar-tn').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 11:00:00').locale('ar-tn').format('A')).toEqual('ص')\n  expect(dayjs('2020-01-01 16:00:00').locale('ar-tn').format('A')).toEqual('م')\n  expect(dayjs('2020-01-01 20:00:00').locale('ar-tn').format('A')).toEqual('م')\n})\n"
  },
  {
    "path": "test/locale/ar.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport preParsePostFormat from '../../src/plugin/preParsePostFormat'\nimport localeData from '../../src/plugin/localeData'\nimport '../../src/locale/ar'\n\ndayjs.extend(localeData)\ndayjs.extend(relativeTime)\ndayjs.extend(preParsePostFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsAR = dayjs().locale('ar').add(i, 'day')\n    const momentAR = moment().locale('ar').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsAR.format(testFormat1)).toEqual(momentAR.format(testFormat1))\n    expect(dayjsAR.format(testFormat2)).toEqual(momentAR.format(testFormat2))\n    expect(dayjsAR.format(testFormat3)).toEqual(momentAR.format(testFormat3))\n  }\n})\n\nit('Preparse with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    dayjs.locale('ar')\n    const momentAR = moment().locale('ar').add(i, 'day')\n    expect(dayjs(momentAR.format()).format()).toEqual(momentAR.format())\n  }\n})\n\nit('RelativeTime: Time from X gets formatted', () => {\n  const T = [\n    [44.4, 'second', 'منذ ثانية واحدة']\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('ar')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(t[2])\n  })\n})\n\nit('Format meridiem with locale function', () => {\n  for (let i = 0; i <= 23; i += 1) {\n    const hour = dayjs()\n      .startOf('day')\n      .add(i, 'hour')\n    const meridiem = i > 12 ? 'م' : 'ص'\n    expect(hour.locale('ar').format('A')).toBe(`${meridiem}`)\n  }\n})\n"
  },
  {
    "path": "test/locale/be.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/be'\nimport relativeTime from '../../src/plugin/relativeTime'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Belarusian locale relative time in past and future with suffix', () => {\n  const cases = [\n    [1, 's', 'праз некалькі секунд'],\n    [-1, 's', 'некалькі секунд таму'],\n    [1, 'm', 'праз хвіліну'],\n    [-1, 'm', 'хвіліну таму'],\n    [1, 'h', 'праз гадзіну'],\n    [-1, 'h', 'гадзіну таму'],\n    [1, 'd', 'праз дзень'],\n    [-1, 'd', 'дзень таму'],\n    [1, 'M', 'праз месяц'],\n    [-1, 'M', 'месяц таму'],\n    [2, 'd', 'праз 2 дні'],\n    [-2, 'd', '2 дні таму'],\n    [10, 'd', 'праз 10 дзён'],\n    [-10, 'd', '10 дзён таму'],\n    [6, 'm', 'праз 6 хвілін'],\n    [-6, 'm', '6 хвілін таму'],\n    [5, 'h', 'праз 5 гадзін'],\n    [-5, 'h', '5 гадзін таму'],\n    [3, 'M', 'праз 3 месяцы'],\n    [-3, 'M', '3 месяцы таму'],\n    [4, 'y', 'праз 4 гады'],\n    [-4, 'y', '4 гады таму']\n  ]\n\n  const locales = ['be']\n  locales.forEach((locale) => {\n    cases.forEach((c) => {\n      expect(dayjs()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow()).toBe(c[2])\n      expect(dayjs()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow()).toBe(moment()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow())\n    })\n  })\n})\n\nit('Belarusian locale relative time in past and future without suffix', () => {\n  const cases = [\n    [1, 's', 'некалькі секунд'],\n    [-1, 's', 'некалькі секунд'],\n\n    [1, 'm', 'хвіліна'],\n    [-1, 'm', 'хвіліна'],\n    [1, 'h', 'гадзіна'],\n    [-1, 'h', 'гадзіна'],\n\n    // Test all plural forms for days\n    [1, 'd', 'дзень'],\n    [21, 'd', '21 дзень'],\n    [31, 'd', 'месяц'],\n    // 2-4 form\n    [2, 'd', '2 дні'],\n    [3, 'd', '3 дні'],\n    [4, 'd', '4 дні'],\n    // 5-20 and other cases\n    [5, 'd', '5 дзён'],\n    [6, 'd', '6 дзён'],\n    // 11-14 special case\n    [11, 'd', '11 дзён'],\n    [12, 'd', '12 дзён'],\n    [13, 'd', '13 дзён'],\n    [14, 'd', '14 дзён'],\n    // 22-24\n    [22, 'd', '22 дні'],\n    [23, 'd', '23 дні'],\n    [24, 'd', '24 дні'],\n\n    // Test all plural forms for months\n    [1, 'M', 'месяц'],\n    [2, 'M', '2 месяцы'],\n    [5, 'M', '5 месяцаў'],\n\n    // Test all plural forms for years\n    [1, 'y', 'год'],\n    [2, 'y', '2 гады'],\n    [5, 'y', '5 гадоў'],\n    [11, 'y', '11 гадоў'],\n    [21, 'y', '21 год']\n  ]\n\n  const locales = ['be']\n  locales.forEach((locale) => {\n    cases.forEach((c) => {\n      expect(dayjs()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow(true)).toBe(c[2])\n      expect(dayjs()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow(true)).toBe(moment()\n        .add(c[0], c[1])\n        .locale(locale)\n        .fromNow(true))\n    })\n  })\n})\n\nit('Belarusian locale formats dates with correct month forms', () => {\n  const tests = [\n    // Full month names\n    { date: '2022-01-19', format: 'dd, D MMMM YYYY г.', expected: 'ср, 19 студзеня 2022 г.' },\n    { date: '2022-01-01', format: 'MMMM', expected: 'студзень' },\n\n    // Short month names in format form (with day)\n    { date: '2022-01-15', format: 'D MMM', expected: '15 студ' },\n    { date: '2022-02-15', format: 'D MMM', expected: '15 лют' },\n\n    // Short month names in standalone form\n    { date: '2022-01-01', format: 'MMM', expected: 'студ' },\n    { date: '2022-02-01', format: 'MMM', expected: 'лют' }\n  ]\n\n  tests.forEach(({ date, format, expected }) => {\n    const dayjsWithLocale = dayjs(date).locale('be')\n    expect(dayjsWithLocale.format(format)).toEqual(expected)\n  })\n})\n"
  },
  {
    "path": "test/locale/bg.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport '../../src/locale/bg'\n\ndayjs.extend(relativeTime)\ndayjs.extend(advancedFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsBG = dayjs().locale('bg').add(i, 'day')\n    const momentBG = moment().locale('bg').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsBG.format(testFormat1)).toEqual(momentBG.format(testFormat1))\n    expect(dayjsBG.format(testFormat2)).toEqual(momentBG.format(testFormat2))\n    expect(dayjsBG.format(testFormat3)).toEqual(momentBG.format(testFormat3))\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [130, 'second'], // two minutes\n    [43, 'minute'], // 44 minutes\n    [1, 'hour'], // 1 hour\n    [21, 'hour'], // 21 hours\n    [2, 'day'], // 2 days\n    [25, 'day'], // 25 days\n    [2, 'month'], // 2 months\n    [10, 'month'], // 10 months\n    [18, 'month'], // 2 years\n    [15, 'year'] // 15 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('bg')\n    moment.locale('bg')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n\nit('Ordinal', () => {\n  dayjs.locale('bg')\n  moment.locale('bg')\n\n  for (let d = 1; d <= 31; d += 1) {\n    const day = d < 10 ? `0${d}` : d\n    const date = `2021-01-${day}`\n    expect(dayjs(date).format('Do')).toBe(moment(date).format('Do'))\n  }\n})\n"
  },
  {
    "path": "test/locale/bn-bd.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport localeData from '../../src/plugin/localeData'\nimport preParsePostFormat from '../../src/plugin/preParsePostFormat'\nimport '../../src/locale/bn-bd'\n\ndayjs.extend(localeData)\ndayjs.extend(relativeTime)\ndayjs.extend(preParsePostFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsBN = dayjs()\n      .locale('bn-bd')\n      .add(i, 'day')\n    const momentBN = moment()\n      .locale('bn-bd')\n      .add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsBN.format(testFormat1)).toEqual(momentBN.format(testFormat1))\n    expect(dayjsBN.format(testFormat2)).toEqual(momentBN.format(testFormat2))\n    expect(dayjsBN.format(testFormat3)).toEqual(momentBN.format(testFormat3))\n  }\n})\n\nit('Month short', () => {\n  const date = '2021-02-01T05:54:32.005Z'\n  const dayjsBN = dayjs(date)\n    .locale('bn-bd')\n  const momentBN = moment(date)\n    .locale('bn-bd')\n  const testFormat1 = 'DD MMMM YYYY MMM'\n  expect(dayjsBN.format(testFormat1)).toEqual(momentBN.format(testFormat1))\n})\n\nit('Preparse with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    dayjs.locale('bn-bd')\n    const momentBN = moment()\n      .locale('bn-bd')\n      .add(i, 'day')\n    expect(dayjs(momentBN.format()).format()).toEqual(momentBN.format())\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [130, 'second'], // two minutes\n    [43, 'minute'], // 44 minutes\n    [1, 'hour'], // 1 hour\n    [21, 'hour'], // 21 hours\n    [2, 'day'], // 2 days\n    [25, 'day'], // 25 days\n    [2, 'month'], // 2 months\n    [10, 'month'], // 10 months\n    [18, 'month'], // 2 years\n    [15, 'year'] // 15 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('bn-bd')\n    moment.locale('bn-bd')\n    expect(dayjs().from(dayjs().add(t[0], t[1]))).toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n"
  },
  {
    "path": "test/locale/bn.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport localeData from '../../src/plugin/localeData'\nimport preParsePostFormat from '../../src/plugin/preParsePostFormat'\nimport '../../src/locale/bn'\n\ndayjs.extend(localeData)\ndayjs.extend(relativeTime)\ndayjs.extend(preParsePostFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsBN = dayjs()\n      .locale('bn')\n      .add(i, 'day')\n    const momentBN = moment()\n      .locale('bn')\n      .add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsBN.format(testFormat1)).toEqual(momentBN.format(testFormat1))\n    expect(dayjsBN.format(testFormat2)).toEqual(momentBN.format(testFormat2))\n    expect(dayjsBN.format(testFormat3)).toEqual(momentBN.format(testFormat3))\n  }\n})\n\nit('Month short', () => {\n  const date = '2021-02-01T05:54:32.005Z'\n  const dayjsBN = dayjs(date)\n    .locale('bn')\n  const momentBN = moment(date)\n    .locale('bn')\n  const testFormat1 = 'DD MMMM YYYY MMM'\n  expect(dayjsBN.format(testFormat1)).toEqual(momentBN.format(testFormat1))\n})\n\nit('Preparse with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    dayjs.locale('bn')\n    const momentBN = moment()\n      .locale('bn')\n      .add(i, 'day')\n    expect(dayjs(momentBN.format()).format()).toEqual(momentBN.format())\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [130, 'second'], // two minutes\n    [43, 'minute'], // 44 minutes\n    [1, 'hour'], // 1 hour\n    [21, 'hour'], // 21 hours\n    [2, 'day'], // 2 days\n    [25, 'day'], // 25 days\n    [2, 'month'], // 2 months\n    [10, 'month'], // 10 months\n    [18, 'month'], // 2 years\n    [15, 'year'] // 15 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('bn')\n    moment.locale('bn')\n    expect(dayjs().from(dayjs().add(t[0], t[1]))).toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n"
  },
  {
    "path": "test/locale/br.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/br'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsBR = dayjs().locale('br').add(i, 'day')\n    const momentBR = moment().locale('br').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsBR.format(testFormat1)).toEqual(momentBR.format(testFormat1))\n    expect(dayjsBR.format(testFormat2)).toEqual(momentBR.format(testFormat2))\n    expect(dayjsBR.format(testFormat3)).toEqual(momentBR.format(testFormat3))\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [130, 'second'], // two minutes\n    [43, 'minute'], // 44 minutes\n    [1, 'hour'], // 1 hour\n    [21, 'hour'], // 21 hours\n    [2, 'day'], // 2 days\n    [25, 'day'], // 25 days\n    [2, 'month'], // 2 months\n    [10, 'month'], // 10 months\n    [18, 'month'], // 2 years\n    [15, 'year'] // 15 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('br')\n    moment.locale('br')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n"
  },
  {
    "path": "test/locale/cs.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/cs'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [2, 'minute'], // 2 minutes\n    [43, 'minute'], // 43 minutes\n    [45, 'minute'], // an hour\n    [3, 'hour'], // 3 hours\n    [21, 'hour'], // 21 hours\n    [1, 'day'], // a day\n    [3, 'day'], // 3 day\n    [25, 'day'], // 25 days\n    [1, 'month'], // a month\n    [2, 'month'], // 2 month\n    [10, 'month'], // 10 month\n    [1, 'year'], // a year\n    [2, 'year'], // 2 year\n    [5, 'year'], // 5 year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('cs')\n    moment.locale('cs')\n    const dayjsDay = dayjs()\n    const momentDay = moment()\n    const dayjsCompare = dayjs().add(t[0], t[1])\n    const momentCompare = moment().add(t[0], t[1])\n    expect(dayjsDay.from(dayjsCompare))\n      .toBe(momentDay.from(momentCompare))\n    expect(dayjsDay.to(dayjsCompare))\n      .toBe(momentDay.to(momentCompare))\n    expect(dayjsDay.from(dayjsCompare, true))\n      .toBe(momentDay.from(momentCompare, true))\n  })\n})\n"
  },
  {
    "path": "test/locale/de.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/de'\nimport '../../src/locale/de-at'\nimport '../../src/locale/de-ch'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('German locale relative time in past and future with suffix', () => {\n  const cases = [\n    [1, 's', 'in ein paar Sekunden'],\n    [-1, 's', 'vor ein paar Sekunden'],\n    [1, 'm', 'in einer Minute'],\n    [-1, 'm', 'vor einer Minute'],\n    [1, 'h', 'in einer Stunde'],\n    [-1, 'h', 'vor einer Stunde'],\n    [1, 'd', 'in einem Tag'],\n    [-1, 'd', 'vor einem Tag'],\n    [1, 'M', 'in einem Monat'],\n    [-1, 'M', 'vor einem Monat'],\n    [2, 'd', 'in 2 Tagen'],\n    [-2, 'd', 'vor 2 Tagen'],\n    [10, 'd', 'in 10 Tagen'],\n    [-10, 'd', 'vor 10 Tagen'],\n    [6, 'm', 'in 6 Minuten'],\n    [-6, 'm', 'vor 6 Minuten'],\n    [5, 'h', 'in 5 Stunden'],\n    [-5, 'h', 'vor 5 Stunden'],\n    [3, 'M', 'in 3 Monaten'],\n    [-3, 'M', 'vor 3 Monaten'],\n    [4, 'y', 'in 4 Jahren'],\n    [-4, 'y', 'vor 4 Jahren']\n  ]\n\n  const locales = ['de', 'de-at', 'de-ch']\n  locales.forEach((locale) => {\n    cases.forEach((c) => {\n      expect(dayjs().add(c[0], c[1]).locale(locale).fromNow())\n        .toBe(c[2])\n      expect(dayjs().add(c[0], c[1]).locale(locale).fromNow())\n        .toBe(moment().add(c[0], c[1]).locale(locale).fromNow())\n    })\n  })\n})\n\nit('German locale relative time in past and future without suffix', () => {\n  const cases = [\n    [1, 's', 'ein paar Sekunden'],\n    [-1, 's', 'ein paar Sekunden'],\n    [1, 'm', 'eine Minute'],\n    [-1, 'm', 'eine Minute'],\n    [1, 'h', 'eine Stunde'],\n    [-1, 'h', 'eine Stunde'],\n    [1, 'd', 'ein Tag'],\n    [-1, 'd', 'ein Tag'],\n    [2, 'd', '2 Tage'],\n    [-2, 'd', '2 Tage'],\n    [10, 'd', '10 Tage'],\n    [-10, 'd', '10 Tage'],\n    [6, 'm', '6 Minuten'],\n    [-6, 'm', '6 Minuten'],\n    [5, 'h', '5 Stunden'],\n    [-5, 'h', '5 Stunden'],\n    [3, 'M', '3 Monate'],\n    [-3, 'M', '3 Monate'],\n    [4, 'y', '4 Jahre'],\n    [-4, 'y', '4 Jahre']\n  ]\n\n  const locales = ['de', 'de-at', 'de-ch']\n  locales.forEach((locale) => {\n    cases.forEach((c) => {\n      expect(dayjs().add(c[0], c[1]).locale(locale).fromNow(true))\n        .toBe(c[2])\n      expect(dayjs().add(c[0], c[1]).locale(locale).fromNow(true))\n        .toBe(moment().add(c[0], c[1]).locale(locale).fromNow(true))\n    })\n  })\n})\n\nit('German locales use region specific names', () => {\n  const locales = [\n    { locale: 'de', expectedFormattedDate: 'Mi., 19. Januar 2022' },\n    { locale: 'de-at', expectedFormattedDate: 'Mi., 19. Jänner 2022' },\n    { locale: 'de-ch', expectedFormattedDate: 'Mi, 19. Januar 2022' }\n  ]\n\n  locales.forEach((locale) => {\n    const dayjsWithLocale = dayjs('2022-01-19').locale(locale.locale)\n    expect(dayjsWithLocale.format('ddd, D. MMMM YYYY')).toEqual(locale.expectedFormattedDate)\n  })\n})\n"
  },
  {
    "path": "test/locale/en.test.js",
    "content": "import dayjs from '../../src'\nimport '../../src/locale/en'\nimport '../../src/locale/en-gb'\nimport '../../src/locale/en-in'\nimport '../../src/locale/en-tt'\nimport localizedFormat from '../../src/plugin/localizedFormat'\n\ndayjs.extend(localizedFormat)\n\nconst locales = [\n  { locale: 'en', expectedDate: '12/25/2019' },\n  { locale: 'en-gb', expectedDate: '25/12/2019' },\n  { locale: 'en-in', expectedDate: '25/12/2019' },\n  { locale: 'en-tt', expectedDate: '25/12/2019' }\n]\n\ndescribe('English date formats', () => {\n  locales.forEach((locale) => {\n    it(`should correctly format date with locale - ${locale.locale}`, () => {\n      const dayjsWithLocale = dayjs('2019-12-25').locale(locale.locale)\n      expect(dayjsWithLocale.format('L')).toEqual(locale.expectedDate)\n    })\n  })\n})\n"
  },
  {
    "path": "test/locale/et.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/et'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [43, 'minute'], // 44 minutes\n    [21, 'hour'], // 21 hours\n    [25, 'day'], // 25 days\n    [10, 'month'], // 2 month\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('et')\n    moment.locale('et')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().subtract(t[0], t[1])))\n      .toBe(moment().from(moment().subtract(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n"
  },
  {
    "path": "test/locale/fi.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/fi'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Finnish locale relative time in past and future', () => {\n  const cases = [\n    [1, 'd', 'päivän päästä'],\n    [-1, 'd', 'päivä sitten'],\n    [2, 'd', 'kahden päivän päästä'],\n    [-2, 'd', 'kaksi päivää sitten'],\n    [10, 'd', '10 päivän päästä'],\n    [-10, 'd', '10 päivää sitten'],\n    [6, 'm', 'kuuden minuutin päästä'],\n    [-6, 'm', 'kuusi minuuttia sitten'],\n    [5, 'h', 'viiden tunnin päästä'],\n    [-5, 'h', 'viisi tuntia sitten'],\n    [3, 'M', 'kolmen kuukauden päästä'],\n    [-3, 'M', 'kolme kuukautta sitten'],\n    [4, 'y', 'neljän vuoden päästä'],\n    [-4, 'y', 'neljä vuotta sitten']\n  ]\n  cases.forEach((c) => {\n    expect(dayjs().add(c[0], c[1]).locale('fi').fromNow())\n      .toBe(c[2])\n    expect(dayjs().add(c[0], c[1]).locale('fi').fromNow())\n      .toBe(moment().add(c[0], c[1]).locale('fi').fromNow())\n  })\n  expect(dayjs().add(-10, 'd').locale('fi').fromNow(true))\n    .toBe('10 päivää')\n  expect(dayjs().add(-10, 'd').locale('fi').fromNow(true))\n    .toBe(moment().add(-10, 'd').locale('fi').fromNow(true))\n})\n"
  },
  {
    "path": "test/locale/he.test.js",
    "content": "import moment from 'moment'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/he'\n\ndayjs.extend(relativeTime)\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [2, 'minute'], // 2 minutes\n    [43, 'minute'], // 43 minutes\n    [45, 'minute'], // an hour\n    [3, 'hour'], // 3 hours\n    [21, 'hour'], // 21 hours\n    [1, 'day'], // a day\n    [3, 'day'], // 3 day\n    [25, 'day'], // 25 days\n    [1, 'month'], // a month\n    [2, 'month'], // 2 month\n    [10, 'month'], // 10 month\n    [1, 'year'], // a year\n    [2, 'year'], // 2 year\n    [5, 'year'], // 5 year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('he')\n    moment.locale('he')\n\n    const dayjsDay = dayjs()\n    const momentDay = moment()\n\n    const dayjsCompare = dayjs().add(t[0], t[1])\n    const momentCompare = moment().add(t[0], t[1])\n\n    expect(dayjsDay.from(dayjsCompare)).toBe(momentDay.from(momentCompare))\n\n    expect(dayjsDay.to(dayjsCompare)).toBe(momentDay.to(momentCompare))\n\n    expect(dayjsDay.from(dayjsCompare, true)).toBe(momentDay.from(momentCompare, true))\n  })\n})\n"
  },
  {
    "path": "test/locale/hr.test.js",
    "content": "import moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/hr'\n\nit('Format month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsUK = dayjs().locale('hr').add(i, 'day')\n    const momentUK = moment().locale('hr').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'dddd, MMMM D YYYY'\n    const testFormat3 = 'MMMM'\n    const testFormat4 = 'MMM'\n    expect(dayjsUK.format(testFormat1)).toEqual(momentUK.format(testFormat1))\n    expect(dayjsUK.format(testFormat2)).toEqual(momentUK.format(testFormat2))\n    expect(dayjsUK.format(testFormat3)).toEqual(momentUK.format(testFormat3))\n    expect(dayjsUK.format(testFormat4)).toEqual(momentUK.format(testFormat4))\n  }\n})\n"
  },
  {
    "path": "test/locale/hu.test.js",
    "content": "import moment from 'moment'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/hu'\n\ndayjs.extend(relativeTime)\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [2, 'minute'], // 2 minutes\n    [43, 'minute'], // 43 minutes\n    [45, 'minute'], // an hour\n    [3, 'hour'], // 3 hours\n    [21, 'hour'], // 21 hours\n    [1, 'day'], // a day\n    [3, 'day'], // 3 day\n    [25, 'day'], // 25 days\n    [1, 'month'], // a month\n    [2, 'month'], // 2 month\n    [10, 'month'], // 10 month\n    [1, 'year'], // a year\n    [2, 'year'], // 2 year\n    [5, 'year'], // 5 year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('hu')\n    moment.locale('hu')\n\n    const dayjsDay = dayjs()\n    const momentDay = moment()\n\n    const dayjsCompare = dayjs().add(t[0], t[1])\n    const momentCompare = moment().add(t[0], t[1])\n\n    expect(dayjsDay.from(dayjsCompare)).toBe(momentDay.from(momentCompare))\n\n    expect(dayjsDay.to(dayjsCompare)).toBe(momentDay.to(momentCompare))\n\n    expect(dayjsDay.from(dayjsCompare, true)).toBe(momentDay.from(momentCompare, true))\n  })\n})\n"
  },
  {
    "path": "test/locale/is.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/is'\nimport relativeTime from '../../src/plugin/relativeTime'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nconst expectations = [\n  [1, 's', 'nokkrar sekúndur', 'fyrir nokkrum sekúndum síðan', 'eftir nokkrar sekúndur'],\n  [1, 'm', 'mínúta', 'fyrir mínútu síðan', 'eftir mínútu'],\n  [1, 'h', 'klukkustund', 'fyrir klukkustund síðan', 'eftir klukkustund'],\n  [1, 'd', 'dagur', 'fyrir degi síðan', 'eftir dag'],\n  [1, 'M', 'mánuður', 'fyrir mánuði síðan', 'eftir mánuð'],\n  [1, 'y', 'ár', 'fyrir ári síðan', 'eftir ár'],\n  [2, 'm', '2 mínútur', 'fyrir 2 mínútum síðan', 'eftir 2 mínútur'],\n  [2, 'h', '2 klukkustundir', 'fyrir 2 klukkustundum síðan', 'eftir 2 klukkustundir'],\n  [2, 'd', '2 dagar', 'fyrir 2 dögum síðan', 'eftir 2 daga'],\n  [2, 'M', '2 mánuðir', 'fyrir 2 mánuðum síðan', 'eftir 2 mánuði'],\n  [2, 'y', '2 ár', 'fyrir 2 árum síðan', 'eftir 2 ár'],\n  [21, 'm', '21 mínúta', 'fyrir 21 mínútu síðan', 'eftir 21 mínútu'],\n  [21, 'h', '21 klukkustund', 'fyrir 21 klukkustund síðan', 'eftir 21 klukkustund'],\n  [21, 'd', '21 dagur', 'fyrir 21 degi síðan', 'eftir 21 dag'],\n  [21, 'y', '21 ár', 'fyrir 21 ári síðan', 'eftir 21 ár']\n]\n\ndescribe('moment compatibility', () => {\n  it('without suffix', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, expectationWithoutSuffix] = expectation\n\n      const momentResult = moment()\n        .add(offset, unit)\n        .locale('is')\n        .fromNow(true)\n\n      expect(expectationWithoutSuffix).toBe(momentResult)\n    })\n  })\n\n  it('past', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, , pastExpectation] = expectation\n\n      const momentResult = moment()\n        .add(-offset, unit)\n        .locale('is')\n        .fromNow()\n\n      expect(pastExpectation).toBe(momentResult)\n    })\n  })\n\n  it('future', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, , , futureExpectation] = expectation\n\n      const momentResult = moment()\n        .add(offset, unit)\n        .locale('is')\n        .fromNow()\n\n      expect(futureExpectation).toBe(momentResult)\n    })\n  })\n})\n\ndescribe('Icelandic output matches moment output', () => {\n  it('without suffix', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, expectationWithoutSuffix] = expectation\n\n      const result = dayjs()\n        .add(offset, unit)\n        .locale('is')\n        .fromNow(true)\n\n      expect(result).toBe(expectationWithoutSuffix)\n    })\n  })\n\n  it('past', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, , pastExpectation] = expectation\n\n      const result = dayjs()\n        .add(-offset, unit)\n        .locale('is')\n        .fromNow()\n\n      expect(result).toBe(pastExpectation)\n    })\n  })\n\n  it('future', () => {\n    expectations.forEach((expectation) => {\n      const [offset, unit, , , futureExpectation] = expectation\n\n      const result = dayjs()\n        .add(offset, unit)\n        .locale('is')\n        .fromNow()\n\n      expect(result).toBe(futureExpectation)\n    })\n  })\n})\n"
  },
  {
    "path": "test/locale/it-ch.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport '../../src/locale/it-ch'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport localizedFormat from '../../src/plugin/localizedFormat'\n\ndayjs.extend(relativeTime)\ndayjs.extend(localizedFormat)\n\ndescribe('Italian formats in Switzerland', () => {\n  beforeEach(() => {\n    dayjs.locale('it-ch')\n    moment.locale('it-ch')\n\n    MockDate.set(new Date())\n  })\n\n  afterEach(() => {\n    MockDate.reset()\n  })\n\n\n  it('Format month with locale function', () => {\n    for (let i = 0; i <= 7; i += 1) {\n      const dayjsWithLocale = dayjs().add(i, 'day')\n      const momentWithLocale = moment().add(i, 'day')\n      const testFormat1 = 'DD MMMM YYYY MMM'\n      const testFormat2 = 'dddd, MMMM D YYYY'\n      const testFormat3 = 'MMMM'\n      const testFormat4 = 'MMM'\n      const testFormat5 = 'L'\n      expect(dayjsWithLocale.format(testFormat1)).toEqual(momentWithLocale.format(testFormat1))\n      expect(dayjsWithLocale.format(testFormat2)).toEqual(momentWithLocale.format(testFormat2))\n      expect(dayjsWithLocale.format(testFormat3)).toEqual(momentWithLocale.format(testFormat3))\n      expect(dayjsWithLocale.format(testFormat4)).toEqual(momentWithLocale.format(testFormat4))\n      expect(dayjsWithLocale.format(testFormat5)).toEqual(momentWithLocale.format(testFormat5))\n    }\n  })\n\n  it('RelativeTime: Time from X', () => {\n    const T = [\n      [44.4, 'second'], // a few seconds\n      [89.5, 'second'], // a minute\n      [2, 'minute'], // 2 minutes\n      [5, 'minute'], // 5 minutes\n      [43, 'minute'], // 44 minutes\n      [45, 'minute'], // an hour\n      [3, 'hour'], // 3 hours\n      [21, 'hour'], // 21 hours\n      [1, 'day'], // a day\n      [3, 'day'], // 3 day\n      [25, 'day'], // 25 days\n      [1, 'month'], // a month\n      [2, 'month'], // 2 month\n      [10, 'month'], // 10 month\n      [1, 'year'], // a year\n      [2, 'year'], // 2 year\n      [5, 'year'], // 5 year\n      [18, 'month'] // 2 years\n    ]\n\n\n    T.forEach((t) => {\n      expect(dayjs().from(dayjs().add(t[0], t[1])))\n        .toBe(moment().from(moment().add(t[0], t[1])))\n      expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n        .toBe(moment().from(moment().add(t[0], t[1]), true))\n    })\n  })\n})\n"
  },
  {
    "path": "test/locale/it.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport '../../src/locale/it'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport localizedFormat from '../../src/plugin/localizedFormat'\n\ndayjs.extend(relativeTime)\ndayjs.extend(localizedFormat)\n\ndescribe('Italian formats', () => {\n  beforeEach(() => {\n    dayjs.locale('it')\n    moment.locale('it')\n\n    MockDate.set(new Date())\n  })\n\n  afterEach(() => {\n    MockDate.reset()\n  })\n\n\n  it('Format month with locale function', () => {\n    for (let i = 0; i <= 7; i += 1) {\n      const dayjsWithLocale = dayjs().add(i, 'day')\n      const momentWithLocale = moment().add(i, 'day')\n      const testFormat1 = 'DD MMMM YYYY MMM'\n      const testFormat2 = 'dddd, MMMM D YYYY'\n      const testFormat3 = 'MMMM'\n      const testFormat4 = 'MMM'\n      const testFormat5 = 'L'\n      expect(dayjsWithLocale.format(testFormat1)).toEqual(momentWithLocale.format(testFormat1))\n      expect(dayjsWithLocale.format(testFormat2)).toEqual(momentWithLocale.format(testFormat2))\n      expect(dayjsWithLocale.format(testFormat3)).toEqual(momentWithLocale.format(testFormat3))\n      expect(dayjsWithLocale.format(testFormat4)).toEqual(momentWithLocale.format(testFormat4))\n      expect(dayjsWithLocale.format(testFormat5)).toEqual(momentWithLocale.format(testFormat5))\n    }\n  })\n\n  it('RelativeTime: Time from X', () => {\n    const T = [\n      [89.5, 'second'], // a minute\n      [2, 'minute'], // 2 minutes\n      [5, 'minute'], // 5 minutes\n      [43, 'minute'], // 44 minutes\n      [45, 'minute'], // an hour\n      [3, 'hour'], // 3 hours\n      [21, 'hour'], // 21 hours\n      [1, 'day'], // a day\n      [3, 'day'], // 3 day\n      [25, 'day'], // 25 days\n      [1, 'month'], // a month\n      [2, 'month'], // 2 month\n      [10, 'month'], // 10 month\n      [1, 'year'], // a year\n      [2, 'year'], // 2 year\n      [5, 'year'], // 5 year\n      [18, 'month'] // 2 years\n    ]\n\n\n    T.forEach((t) => {\n      expect(dayjs().from(dayjs().add(t[0], t[1])))\n        .toBe(moment().from(moment().add(t[0], t[1])))\n      expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n        .toBe(moment().from(moment().add(t[0], t[1]), true))\n    })\n  })\n\n  // moment.js uses `alcuni secondi` while dayjs uses `qualche secondo`.\n  it('RelativeTime: A few seconds', () => {\n    const T = [\n      [44.4, 'second'] // a few seconds\n    ]\n\n    T.forEach((t) => {\n      expect(dayjs().from(dayjs().add(t[0], t[1])))\n        .toBe('qualche secondo fa')\n      expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n        .toBe('qualche secondo')\n    })\n  })\n})\n"
  },
  {
    "path": "test/locale/ja.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ja'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Finnish locale relative time in past and future', () => {\n  const cases = [\n    [1, 'd', '1日後'],\n    [-1, 'd', '1日前'],\n    [2, 'd', '2日後'],\n    [-2, 'd', '2日前'],\n    [10, 'd', '10日後'],\n    [-10, 'd', '10日前'],\n    [6, 'm', '6分後'],\n    [-6, 'm', '6分前'],\n    [5, 'h', '5時間後'],\n    [-5, 'h', '5時間前'],\n    [3, 'M', '3ヶ月後'],\n    [-3, 'M', '3ヶ月前'],\n    [4, 'y', '4年後'],\n    [-4, 'y', '4年前']\n  ]\n  cases.forEach((c) => {\n    expect(dayjs().add(c[0], c[1]).locale('ja').fromNow())\n      .toBe(c[2])\n    expect(dayjs().add(c[0], c[1]).locale('ja').fromNow())\n      .toBe(moment().add(c[0], c[1]).locale('ja').fromNow())\n  })\n  expect(dayjs().add(-10, 'd').locale('ja').fromNow(true))\n    .toBe('10日')\n  expect(dayjs().add(-10, 'd').locale('ja').fromNow(true))\n    .toBe(moment().add(-10, 'd').locale('ja').fromNow(true))\n})\n\n"
  },
  {
    "path": "test/locale/keys.test.js",
    "content": "import fs from 'fs'\nimport path from 'path'\nimport dayjs from '../../src'\n\nconst localeDir = '../../src/locale'\nconst Locale = []\nconst localeNameRegex = /\\/\\/ (.*) \\[/\n\n// load all locales from locale dir\nfs.readdirSync(path.join(__dirname, localeDir))\n  .forEach((file) => {\n    const fPath = path.join(__dirname, localeDir, file)\n    Locale.push({\n      name: file,\n      // eslint-disable-next-line import/no-dynamic-require, global-require\n      content: require(fPath).default,\n      file: fs.readFileSync(fPath, 'utf-8')\n    })\n  })\n\nLocale.forEach((locale) => {\n  it(`Locale keys for ${locale.content.name}`, () => {\n    const {\n      name,\n      ordinal,\n      weekdays,\n      months,\n      formats,\n      relativeTime,\n      weekdaysShort,\n      monthsShort,\n      weekdaysMin,\n      weekStart,\n      yearStart,\n      meridiem\n    } = locale.content\n    // comments required\n    const commentsMatchResult = locale.file.match(localeNameRegex)\n    expect(commentsMatchResult[1]).not.toBeUndefined()\n\n    expect(name).toEqual(locale.name.replace('.js', ''))\n    expect(name).toBe(name.toLowerCase())\n    expect(weekdays).toEqual(expect.any(Array))\n\n    if (weekdaysShort) expect(weekdaysShort).toEqual(expect.any(Array))\n    if (weekdaysMin) expect(weekdaysMin).toEqual(expect.any(Array))\n    if (weekStart) expect(weekStart).toEqual(expect.any(Number))\n    if (yearStart) expect(yearStart).toEqual(expect.any(Number))\n\n    // months could be a function or array\n    if (Array.isArray(months)) {\n      expect(months).toEqual(expect.any(Array))\n    } else {\n      expect(months(dayjs(), 'str')).toEqual(expect.any(String))\n      expect(months.f).toEqual(expect.any(Array))\n      expect(months.s).toEqual(expect.any(Array))\n    }\n    // monthsShort could be a function or array\n    if (monthsShort) {\n      if (Array.isArray(monthsShort)) {\n        expect(monthsShort).toEqual(expect.any(Array))\n      } else {\n        expect(monthsShort(dayjs(), 'str')).toEqual(expect.any(String))\n        expect(monthsShort.f).toEqual(expect.any(Array))\n        expect(monthsShort.s).toEqual(expect.any(Array))\n      }\n    }\n    // function pass date return string or number or null\n    if (name !== 'en') { // en ordinal set in advancedFormat\n      for (let i = 1; i <= 31; i += 1) {\n        expect(ordinal(i)).toEqual(expect.anything())\n      }\n    }\n\n    expect(dayjs().locale(name).$locale().name).toBe(name)\n    if (formats) {\n      const {\n        LT,\n        LTS,\n        L,\n        LL,\n        LLL,\n        LLLL,\n        l,\n        ll,\n        lll,\n        llll,\n        ...remainingFormats\n      } = formats\n      expect(formats).toEqual(expect.objectContaining({\n        L: expect.any(String),\n        LL: expect.any(String),\n        LLL: expect.any(String),\n        LLLL: expect.any(String),\n        LT: expect.any(String),\n        LTS: expect.any(String)\n      }))\n      expect(Object.keys(remainingFormats).length).toEqual(0)\n      if (l) expect(l).toEqual(expect.any(String))\n      if (ll) expect(ll).toEqual(expect.any(String))\n      if (lll) expect(lll).toEqual(expect.any(String))\n      if (llll) expect(llll).toEqual(expect.any(String))\n    }\n    if (relativeTime) {\n      expect(Object.keys(relativeTime).sort()).toEqual(['d', 'dd', 'future', 'h', 'hh', 'm', 'mm', 'M', 'MM',\n        'past', 's', 'y', 'yy']\n        .sort())\n    }\n\n    if (meridiem) {\n      for (let i = 1; i <= 23; i += 1) {\n        expect(meridiem(i)).toEqual(expect.anything())\n      }\n    }\n  })\n})\n"
  },
  {
    "path": "test/locale/ku.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport locale, { englishToArabicNumbersMap } from '../../src/locale/ku'\nimport preParsePostFormat from '../../src/plugin/preParsePostFormat'\n\ndayjs.extend(preParsePostFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format meridiem correctly', () => {\n  for (let i = 0; i <= 23; i += 1) {\n    const dayjsKu = dayjs()\n      .startOf('day')\n      .add(i, 'hour')\n    const hour = (i % 12 || 12)\n      .toString()\n      .replace(/\\d/g, match => englishToArabicNumbersMap[match])\n    const m = i < 12 ? 'پ.ن' : 'د.ن'\n    expect(dayjsKu.locale('ku').format('h A')).toBe(`${hour} ${m}`)\n  }\n})\n\nit('Preparse with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    dayjs.locale(locale)\n    const momentKu = moment()\n      .locale('ku')\n      .add(i, 'day')\n    expect(dayjs(momentKu.format()).format()).toEqual(momentKu.format())\n  }\n})\n"
  },
  {
    "path": "test/locale/lt.test.js",
    "content": "import moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/lt'\n\nit('Format month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsUK = dayjs().locale('lt').add(i, 'day')\n    const momentUK = moment().locale('lt').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'dddd, MMMM D YYYY'\n    const testFormat3 = 'MMMM'\n    const testFormat4 = 'MMM'\n    expect(dayjsUK.format(testFormat1)).toEqual(momentUK.format(testFormat1))\n    expect(dayjsUK.format(testFormat2)).toEqual(momentUK.format(testFormat2))\n    expect(dayjsUK.format(testFormat3)).toEqual(momentUK.format(testFormat3))\n    expect(dayjsUK.format(testFormat4)).toEqual(momentUK.format(testFormat4))\n  }\n})\n"
  },
  {
    "path": "test/locale/pl.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/pl'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsUK = dayjs().locale('pl').add(i, 'day')\n    const momentUK = moment().locale('pl').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'dddd, MMMM D YYYY'\n    const testFormat3 = 'MMMM'\n    const testFormat4 = 'MMM'\n    expect(dayjsUK.format(testFormat1)).toEqual(momentUK.format(testFormat1))\n    expect(dayjsUK.format(testFormat2)).toEqual(momentUK.format(testFormat2))\n    expect(dayjsUK.format(testFormat3)).toEqual(momentUK.format(testFormat3))\n    expect(dayjsUK.format(testFormat4)).toEqual(momentUK.format(testFormat4))\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [2, 'minute'], // 2 minutes\n    [5, 'minute'], // 5 minutes\n    [43, 'minute'], // 44 minutes\n    [45, 'minute'], // an hour\n    [3, 'hour'], // 3 hours\n    [21, 'hour'], // 21 hours\n    [1, 'day'], // a day\n    [3, 'day'], // 3 day\n    [25, 'day'], // 25 days\n    [1, 'month'], // a month\n    [2, 'month'], // 2 month\n    [10, 'month'], // 10 month\n    [1, 'year'], // a year\n    [2, 'year'], // 2 year\n    [5, 'year'], // 5 year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('pl')\n    moment.locale('pl')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n"
  },
  {
    "path": "test/locale/ru.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/ru'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsRU = dayjs().locale('ru').add(i, 'day')\n    const momentRU = moment().locale('ru').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsRU.format(testFormat1)).toEqual(momentRU.format(testFormat1))\n    expect(dayjsRU.format(testFormat2)).toEqual(momentRU.format(testFormat2))\n    expect(dayjsRU.format(testFormat3)).toEqual(momentRU.format(testFormat3))\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [43, 'minute'], // 44 minutes\n    [21, 'hour'], // 21 hours\n    [25, 'day'], // 25 days\n    [10, 'month'], // 2 month\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('ru')\n    moment.locale('ru')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n\nit('Meridiem', () => {\n  expect(dayjs('2020-01-01 03:00:00').locale('ru').format('A')).toEqual('ночи')\n  expect(dayjs('2020-01-01 11:00:00').locale('ru').format('A')).toEqual('утра')\n  expect(dayjs('2020-01-01 16:00:00').locale('ru').format('A')).toEqual('дня')\n  expect(dayjs('2020-01-01 20:00:00').locale('ru').format('A')).toEqual('вечера')\n})\n"
  },
  {
    "path": "test/locale/sk.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/sk'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [2, 'minute'], // 2 minutes\n    [43, 'minute'], // 43 minutes\n    [45, 'minute'], // an hour\n    [3, 'hour'], // 3 hours\n    [21, 'hour'], // 21 hours\n    [1, 'day'], // a day\n    [3, 'day'], // 3 day\n    [25, 'day'], // 25 days\n    [1, 'month'], // a month\n    [2, 'month'], // 2 month\n    [10, 'month'], // 10 month\n    [1, 'year'], // a year\n    [2, 'year'], // 2 year\n    [5, 'year'], // 5 year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('sk')\n    moment.locale('sk')\n    const dayjsDay = dayjs()\n    const momentDay = moment()\n    const dayjsCompare = dayjs().add(t[0], t[1])\n    const momentCompare = moment().add(t[0], t[1])\n    expect(dayjsDay.from(dayjsCompare))\n      .toBe(momentDay.from(momentCompare))\n    expect(dayjsDay.to(dayjsCompare))\n      .toBe(momentDay.to(momentCompare))\n    expect(dayjsDay.from(dayjsCompare, true))\n      .toBe(momentDay.from(momentCompare, true))\n  })\n})\n"
  },
  {
    "path": "test/locale/sl.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/sl'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Slovenian locale relative time in past and future', () => {\n  const cases = [\n    [1, 's', 'čez nekaj sekund', 'nekaj sekund'],\n    [-1, 's', 'pred nekaj sekundami', 'nekaj sekund'],\n    [1, 'm', 'čez eno minuto', 'ena minuta'],\n    [-1, 'm', 'pred eno minuto', 'ena minuta'],\n    [2, 'm', 'čez 2 minuti', '2 minuti'],\n    [-2, 'm', 'pred 2 minutama', '2 minuti'],\n    [3, 'm', 'čez 3 minute', '3 minute'],\n    [-3, 'm', 'pred 3 minutami', '3 minute'],\n    [5, 'm', 'čez 5 minut', '5 minut'],\n    [-5, 'm', 'pred 5 minutami', '5 minut'],\n    [1, 'h', 'čez eno uro', 'ena ura'],\n    [-1, 'h', 'pred eno uro', 'ena ura'],\n    [2, 'h', 'čez 2 uri', '2 uri'],\n    [-2, 'h', 'pred 2 urama', '2 uri'],\n    [3, 'h', 'čez 3 ure', '3 ure'],\n    [-3, 'h', 'pred 3 urami', '3 ure'],\n    [5, 'h', 'čez 5 ur', '5 ur'],\n    [-5, 'h', 'pred 5 urami', '5 ur'],\n    [1, 'd', 'čez en dan', 'en dan'],\n    [-1, 'd', 'pred enim dnem', 'en dan'],\n    [2, 'd', 'čez 2 dneva', '2 dneva'],\n    [-2, 'd', 'pred 2 dnevoma', '2 dneva'],\n    [3, 'd', 'čez 3 dni', '3 dni'],\n    [-3, 'd', 'pred 3 dnevi', '3 dni'],\n    [5, 'd', 'čez 5 dni', '5 dni'],\n    [-5, 'd', 'pred 5 dnevi', '5 dni'],\n    [1, 'M', 'čez en mesec', 'en mesec'],\n    [-1, 'M', 'pred enim mesecem', 'en mesec'],\n    [2, 'M', 'čez 2 meseca', '2 meseca'],\n    [-2, 'M', 'pred 2 mesecema', '2 meseca'],\n    [3, 'M', 'čez 3 mesece', '3 mesece'],\n    [-3, 'M', 'pred 3 meseci', '3 mesece'],\n    [5, 'M', 'čez 5 mesecev', '5 mesecev'],\n    [-5, 'M', 'pred 5 meseci', '5 mesecev'],\n    [1, 'y', 'čez eno leto', 'eno leto'],\n    [-1, 'y', 'pred enim letom', 'eno leto'],\n    [2, 'y', 'čez 2 leti', '2 leti'],\n    [-2, 'y', 'pred 2 letoma', '2 leti'],\n    [3, 'y', 'čez 3 leta', '3 leta'],\n    [-3, 'y', 'pred 3 leti', '3 leta'],\n    [5, 'y', 'čez 5 let', '5 let'],\n    [-5, 'y', 'pred 5 leti', '5 let']\n    // these are rounded\n    // if user decides to change rounding then it would be good to test them also\n    // [102, 's', 'čez 102 sekundi', '102 sekundi'],\n    // [-102, 's', 'pred 102 sekundama', '102 sekundi'],\n    // [103, 's', 'čez 103 sekunde', '103 sekunde'],\n    // [-103, 's', 'pred 103 sekundami', '103 sekunde'],\n    // [114, 's', 'čez 114 sekund', '114 sekund'],\n    // [-114, 's', 'pred 114 sekundami', '114 sekund'],\n    // [-102, 'm', 'čez 102 minuti', '102 minuti'],\n    // [-102, 'm', 'pred 102 minutama', '102 minuti'],\n    // [103, 'm', 'čez 103 minute', '103 minute'],\n    // [-103, 'm', 'pred 103 minutami', '103 minute'],\n    // [114, 'm', 'čez 114 minut', '114 minut'],\n    // [-114, 'm', 'pred 114 minutami', '114 minut']\n  ]\n\n  cases.forEach((c) => {\n    // With suffix\n    expect(dayjs().add(c[0], c[1]).locale('sl').fromNow()).toBe(c[2])\n    // Without suffix\n    expect(dayjs().add(c[0], c[1]).locale('sl').fromNow(true)).toBe(c[3])\n  })\n})\n"
  },
  {
    "path": "test/locale/sr-cyrl.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/sr-cyrl'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Serbian cyrillic locale relative time in past and future', () => {\n  const cases = [\n    [1, 's', 'за неколико секунди', 'неколико секунди'],\n    [-1, 's', 'пре неколико секунди', 'неколико секунди'],\n    [4, 's', 'за неколико секунди', 'неколико секунди'],\n    [1, 'm', 'за један минут', 'један минут'],\n    [-1, 'm', 'пре једног минута', 'један минут'],\n    [4, 'm', 'за 4 минута', '4 минута'],\n    [5, 'm', 'за 5 минута', '5 минута'],\n    [21, 'm', 'за 21 минут', '21 минут'],\n    [1, 'h', 'за један сат', 'један сат'],\n    [-1, 'h', 'пре једног сата', 'један сат'],\n    [4, 'h', 'за 4 сата', '4 сата'],\n    [5, 'h', 'за 5 сати', '5 сати'],\n    [21, 'h', 'за 21 сат', '21 сат'],\n    [1, 'd', 'за један дан', 'један дан'],\n    [-1, 'd', 'пре једног дана', 'један дан'],\n    [4, 'd', 'за 4 дана', '4 дана'],\n    [5, 'd', 'за 5 дана', '5 дана'],\n    [21, 'd', 'за 21 дан', '21 дан'],\n    [1, 'M', 'за један месец', 'један месец'],\n    [-1, 'M', 'пре једног месеца', 'један месец'],\n    [4, 'M', 'за 4 месеца', '4 месеца'],\n    [5, 'M', 'за 5 месеци', '5 месеци'],\n    [10, 'M', 'за 10 месеци', '10 месеци'],\n    [1, 'y', 'за једну годину', 'једна година'],\n    [-1, 'y', 'пре једне године', 'једна година'],\n    [4, 'y', 'за 4 године', '4 године'],\n    [5, 'y', 'за 5 година', '5 година'],\n    [21, 'y', 'за 21 годину', '21 година']\n  ]\n\n  cases.forEach((c) => {\n    expect(dayjs().add(c[0], c[1]).locale('sr-cyrl').fromNow()).toBe(c[2])\n    expect(dayjs().add(c[0], c[1]).locale('sr-cyrl').fromNow(true)).toBe(c[3])\n    // TODO: compare to momentjs once logic and grammar are fixed there\n  })\n})\n\n"
  },
  {
    "path": "test/locale/sr.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/sr'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Serbian locale relative time in past and future', () => {\n  const cases = [\n    [1, 's', 'za nekoliko sekundi', 'nekoliko sekundi'],\n    [-1, 's', 'pre nekoliko sekundi', 'nekoliko sekundi'],\n    [4, 's', 'za nekoliko sekundi', 'nekoliko sekundi'],\n    [1, 'm', 'za jedan minut', 'jedan minut'],\n    [-1, 'm', 'pre jednog minuta', 'jedan minut'],\n    [4, 'm', 'za 4 minuta', '4 minuta'],\n    [5, 'm', 'za 5 minuta', '5 minuta'],\n    [21, 'm', 'za 21 minut', '21 minut'],\n    [1, 'h', 'za jedan sat', 'jedan sat'],\n    [-1, 'h', 'pre jednog sata', 'jedan sat'],\n    [4, 'h', 'za 4 sata', '4 sata'],\n    [5, 'h', 'za 5 sati', '5 sati'],\n    [21, 'h', 'za 21 sat', '21 sat'],\n    [1, 'd', 'za jedan dan', 'jedan dan'],\n    [-1, 'd', 'pre jednog dana', 'jedan dan'],\n    [4, 'd', 'za 4 dana', '4 dana'],\n    [5, 'd', 'za 5 dana', '5 dana'],\n    [21, 'd', 'za 21 dan', '21 dan'],\n    [1, 'M', 'za jedan mesec', 'jedan mesec'],\n    [-1, 'M', 'pre jednog meseca', 'jedan mesec'],\n    [4, 'M', 'za 4 meseca', '4 meseca'],\n    [5, 'M', 'za 5 meseci', '5 meseci'],\n    [10, 'M', 'za 10 meseci', '10 meseci'],\n    [1, 'y', 'za jednu godinu', 'jedna godina'],\n    [-1, 'y', 'pre jedne godine', 'jedna godina'],\n    [4, 'y', 'za 4 godine', '4 godine'],\n    [5, 'y', 'za 5 godina', '5 godina'],\n    [21, 'y', 'za 21 godinu', '21 godina']\n  ]\n\n  cases.forEach((c) => {\n    // With suffix\n    expect(dayjs().add(c[0], c[1]).locale('sr').fromNow()).toBe(c[2])\n    // Without suffix\n    expect(dayjs().add(c[0], c[1]).locale('sr').fromNow(true)).toBe(c[3])\n    // TODO: compare to momentjs once logic and grammar are fixed there\n  })\n})\n"
  },
  {
    "path": "test/locale/sv-fi.test.js",
    "content": "import dayjs from '../../src'\nimport localizedFormat from '../../src/plugin/localizedFormat'\nimport '../../src/locale/sv-fi'\n\ndayjs.extend(localizedFormat)\n\nit('Finland Swedish locale', () => {\n  // time\n  expect(dayjs('2019-02-01 12:34:56').locale('sv-fi').format('LT'))\n    .toBe('12.34')\n  expect(dayjs('2019-02-01 23:45:56').locale('sv-fi').format('LTS'))\n    .toBe('23.45.56')\n\n  // date\n  expect(dayjs('2019-02-01').locale('sv-fi').format('L'))\n    .toBe('01.02.2019')\n  expect(dayjs('2019-12-15').locale('sv-fi').format('LL'))\n    .toBe('15. december 2019')\n  // short\n  expect(dayjs('2019-02-01').locale('sv-fi').format('l'))\n    .toBe('1.2.2019')\n  expect(dayjs('2019-12-15').locale('sv-fi').format('ll'))\n    .toBe('15. dec 2019')\n\n  // date and time\n  expect(dayjs('2019-03-01 12:30').locale('sv-fi').format('LLL'))\n    .toBe('1. mars 2019, kl. 12.30')\n  expect(dayjs('2021-06-12 17:30').locale('sv-fi').format('LLLL'))\n    .toBe('lördag, 12. juni 2021, kl. 17.30')\n  // short\n  expect(dayjs('2019-03-01 12:30').locale('sv-fi').format('lll'))\n    .toBe('1. mar 2019, kl. 12.30')\n  expect(dayjs('2021-06-01 17:30').locale('sv-fi').format('llll'))\n    .toBe('tis, 1. jun 2021, kl. 17.30')\n})\n"
  },
  {
    "path": "test/locale/sv.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport '../../src/locale/sv'\n\ndayjs.extend(advancedFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Swedish locale Do 1a not format to 1am', () => {\n  expect(dayjs('2019-01-01').locale('sv').format('dddd Do MMMM'))\n    .toBe('tisdag 1a januari')\n  expect(dayjs('2019-01-02').locale('sv').format('dddd Do MMMM'))\n    .toBe('onsdag 2a januari')\n})\n"
  },
  {
    "path": "test/locale/uk.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/uk'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format Month with locale function', () => {\n  for (let i = 0; i <= 7; i += 1) {\n    const dayjsUK = dayjs().locale('uk').add(i, 'day')\n    const momentUK = moment().locale('uk').add(i, 'day')\n    const testFormat1 = 'DD MMMM YYYY MMM'\n    const testFormat2 = 'MMMM'\n    const testFormat3 = 'MMM'\n    expect(dayjsUK.format(testFormat1)).toEqual(momentUK.format(testFormat1))\n    expect(dayjsUK.format(testFormat2)).toEqual(momentUK.format(testFormat2))\n    expect(dayjsUK.format(testFormat3)).toEqual(momentUK.format(testFormat3))\n  }\n})\n\nit('RelativeTime: Time from X', () => {\n  const T = [\n    [44.4, 'second'], // a few seconds\n    [89.5, 'second'], // a minute\n    [43, 'minute'], // 44 minutes\n    [21, 'hour'], // 21 hours\n    [25, 'day'], // 25 days\n    [10, 'month'], // 2 month\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    dayjs.locale('uk')\n    moment.locale('uk')\n    expect(dayjs().from(dayjs().add(t[0], t[1])))\n      .toBe(moment().from(moment().add(t[0], t[1])))\n    expect(dayjs().from(dayjs().add(t[0], t[1]), true))\n      .toBe(moment().from(moment().add(t[0], t[1]), true))\n  })\n})\n\nit('hour', () => {\n  const str0 = '2020-03-18 19:15:00'\n  const str = '2020-03-18 20:15:00'\n  const result = dayjs(str0).locale('uk').to(str)\n\n  expect(result).toEqual(moment(str0).locale('uk').to(str))\n  const result2 = dayjs(str).locale('uk').to(str0, true)\n  expect(result2).toEqual('година') // different from moment.js\n})\n"
  },
  {
    "path": "test/locale/zh-cn.test.js",
    "content": "// import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport '../../src/locale/zh-cn'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Meridiem', () => {\n  // the '中午' is different to moment.js 11-13\n  expect(dayjs('2020-01-01 10:59:59').locale('zh-cn').format('A')).toEqual('上午')\n  expect(dayjs('2020-01-01 11:00:00').locale('zh-cn').format('A')).toEqual('中午')\n  expect(dayjs('2020-01-01 12:59:59').locale('zh-cn').format('A')).toEqual('中午')\n  expect(dayjs('2020-01-01 13:00:00').locale('zh-cn').format('A')).toEqual('下午')\n})\n"
  },
  {
    "path": "test/locale/zh-hk.test.js",
    "content": "import dayjs from '../../src'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport '../../src/locale/zh'\nimport '../../src/locale/zh-cn'\nimport '../../src/locale/zh-hk'\nimport '../../src/locale/zh-tw'\n\ndayjs.extend(advancedFormat).extend(weekOfYear)\n\nconst zh = dayjs().locale('zh')\nconst zhCN = dayjs().locale('zh-cn')\nconst zhHK = dayjs().locale('zh-hk')\nconst zhTW = dayjs().locale('zh-tw')\n\ntest('ordinal', () => {\n  expect(zh.format('wo')).toEqual(`${zh.format('w')}周`)\n  expect(zhCN.format('wo')).toEqual(`${zhCN.format('w')}周`)\n  expect(zhHK.format('wo')).toEqual(`${zhHK.format('w')}週`)\n  expect(zhTW.format('wo')).toEqual(`${zhTW.format('w')}週`)\n})\n\ntest('Meridiem', () => {\n  for (let i = 0; i <= 24; i += 1) {\n    expect(zh.add(i, 'hour').format('A')).toBe(zhCN.add(i, 'hour').format('A'))\n  }\n})\n\ntest('Meridiem', () => {\n  expect(dayjs('2020-01-01 05:59:59').locale('zh-hk').format('A')).toEqual('凌晨')\n  expect(dayjs('2020-01-01 08:59:59').locale('zh-hk').format('A')).toEqual('早上')\n  expect(dayjs('2020-01-01 10:59:59').locale('zh-hk').format('A')).toEqual('上午')\n  expect(dayjs('2020-01-01 11:00:00').locale('zh-hk').format('A')).toEqual('中午')\n  expect(dayjs('2020-01-01 12:59:59').locale('zh-hk').format('A')).toEqual('中午')\n  expect(dayjs('2020-01-01 13:00:00').locale('zh-hk').format('A')).toEqual('下午')\n})\n\n"
  },
  {
    "path": "test/locale/zh-tw.test.js",
    "content": "import dayjs from '../../src'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport '../../src/locale/zh'\nimport '../../src/locale/zh-tw'\n\ndayjs.extend(advancedFormat).extend(weekOfYear)\n\nconst zh = dayjs().locale('zh')\nconst zhTW = dayjs().locale('zh-tw')\n\ntest('ordinal', () => {\n  expect(zh.format('wo')).toEqual(`${zh.format('w')}周`)\n  expect(zhTW.format('wo')).toEqual(`${zhTW.format('w')}週`)\n})\n\ntest('Meridiem', () => {\n  for (let i = 0; i <= 24; i += 1) {\n    expect(zh.add(i, 'hour').format('A')).toBe(zhTW.add(i, 'hour').format('A'))\n  }\n})\n"
  },
  {
    "path": "test/locale/zh.test.js",
    "content": "import dayjs from '../../src'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport '../../src/locale/zh'\nimport '../../src/locale/zh-cn'\n\ndayjs.extend(advancedFormat).extend(weekOfYear)\n\nconst zh = dayjs().locale('zh')\nconst zhCN = dayjs().locale('zh-cn')\n\ntest('ordinal', () => {\n  expect(zh.format('wo')).toEqual(`${zh.format('w')}周`)\n})\n\ntest('Meridiem', () => {\n  for (let i = 0; i <= 24; i += 1) {\n    expect(zh.add(i, 'hour').format('A')).toBe(zhCN.add(i, 'hour').format('A'))\n  }\n})\n"
  },
  {
    "path": "test/locale.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../src'\nimport es from '../src/locale/es'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nconst format = 'dddd D, MMMM'\nconst NOT_SUPPORTED_LOCALE_STRING = 'not_supported_locale_string'\n\nit('Uses spanish locale through constructor', () => { // not recommend\n  expect(dayjs('2018-4-28', { locale: es })\n    .format(format))\n    .toBe('sábado 28, abril')\n})\n\nit('set locale for one instance only', () => {\n  expect(dayjs('2018-4-28')\n    .format(format))\n    .toBe('Saturday 28, April')\n\n  expect(dayjs('2018-4-28')\n    .locale(es).format(format))\n    .toBe('sábado 28, abril')\n\n  expect(dayjs('2018-4-28')\n    .format(format))\n    .toBe('Saturday 28, April')\n})\n\nit('set global locale', () => {\n  dayjs.locale('en')\n  expect(dayjs('2018-4-28').format(format))\n    .toBe('Saturday 28, April')\n  dayjs.locale(es)\n  expect(dayjs('2018-4-28').format(format))\n    .toBe('sábado 28, abril')\n  dayjs.locale('en')\n  expect(dayjs('2018-4-28').format(format))\n    .toBe('Saturday 28, April')\n})\n\nit('get instance locale name', () => {\n  expect(dayjs().locale()).toBe('en')\n  expect(dayjs().locale()).toBe(moment().locale())\n  expect(dayjs().locale('es').locale()).toBe('es')\n  expect(dayjs().locale('es').locale()).toBe(moment().locale('es').locale())\n  dayjs.locale(es)\n  moment.locale('es')\n  expect(dayjs().locale()).toBe('es')\n  expect(dayjs().locale()).toBe(moment().locale())\n})\n\nit('immutable instance locale', () => {\n  dayjs.locale('en')\n  const origin = dayjs('2018-4-28')\n  expect(origin.format(format))\n    .toBe('Saturday 28, April')\n  expect(origin.locale('es').format(format))\n    .toBe('sábado 28, abril')\n  const changed = origin.locale('es')\n  expect(changed.format(format))\n    .toBe('sábado 28, abril')\n  expect(origin.format(format))\n    .toBe('Saturday 28, April')\n})\n\nit('User custom locale', () => {\n  expect(dayjs('2018-4-28')\n    .locale('xx', {\n      weekdays: Array(7).fill('week'),\n      months: Array(12).fill('month')\n    })\n    .format(format))\n    .toBe('week 28, month')\n})\n\ndescribe('Instance locale inheritance', () => {\n  const esDayjs = dayjs('2018-4-28').locale(es)\n\n  it('Clone', () => {\n    expect(esDayjs.clone().format(format))\n      .toBe('sábado 28, abril')\n    expect(dayjs(esDayjs).format(format))\n      .toBe('sábado 28, abril')\n  })\n\n  it('StartOf EndOf', () => {\n    expect(esDayjs.startOf('year').format(format))\n      .toBe('lunes 1, enero')\n    expect(esDayjs.endOf('day').format(format))\n      .toBe('sábado 28, abril')\n  })\n\n  it('Set', () => {\n    expect(esDayjs.set('year', 2017).format(format))\n      .toBe('viernes 28, abril')\n  })\n\n  it('Add', () => {\n    expect(esDayjs.add(1, 'year').format(format))\n      .toBe('domingo 28, abril')\n    expect(esDayjs.add(1, 'month').format(format))\n      .toBe('lunes 28, mayo')\n    expect(esDayjs.add(1, 'minute').format(format))\n      .toBe('sábado 28, abril')\n  })\n\n  it('dayjs.locale() returns locale name', () => {\n    dayjs.locale(es)\n    moment.locale('es')\n    expect(dayjs.locale()).toBe(moment.locale())\n\n    dayjs.locale('en')\n    moment.locale('en')\n    expect(dayjs.locale()).toBe(moment.locale())\n  })\n})\n\n\nit('Not supported locale string fallback to previous one (instance)', () => {\n  const D = dayjs()\n  expect(D.locale()).toBe('en')\n  const D2 = D.locale(NOT_SUPPORTED_LOCALE_STRING)\n  expect(D2.locale()).toBe('en')\n  expect(D2.format()).toBe(D.format())\n  const D3 = D2.locale('es')\n  expect(D3.locale()).toBe('es')\n  const D4 = D3.locale(NOT_SUPPORTED_LOCALE_STRING)\n  expect(D4.locale()).toBe('es')\n})\n\nit('Not supported locale string fallback to previous one (global)', () => {\n  expect(dayjs().locale()).toBe('en')\n  dayjs.locale(NOT_SUPPORTED_LOCALE_STRING)\n  expect(dayjs().locale()).toBe('en')\n  dayjs.locale('es')\n  expect(dayjs().locale()).toBe('es')\n  dayjs.locale(NOT_SUPPORTED_LOCALE_STRING)\n  expect(dayjs().locale()).toBe('es')\n})\n"
  },
  {
    "path": "test/manipulate.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../src'\nimport '../src/locale/zh-cn'\nimport '../src/locale/ar'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('StartOf EndOf', () => {\n  it('StartOf EndOf Year ... with s and upper case', () => {\n    const testArr = ['Year', 'year', 'YearS', 'month', 'day', 'date',\n      'week', 'hour', 'minute', 'second']\n    testArr.forEach((d) => {\n      expect(dayjs().startOf(d).valueOf()).toBe(moment().startOf(d).valueOf())\n      expect(dayjs().endOf(d).valueOf()).toBe(moment().endOf(d).valueOf())\n    })\n  })\n\n  it('StartOf EndOf Other -> no change', () => {\n    expect(dayjs().startOf('otherString').valueOf()).toBe(moment().startOf('otherString').valueOf())\n    expect(dayjs().endOf('otherString').valueOf()).toBe(moment().endOf('otherString').valueOf())\n  })\n\n  it('StartOf week with locale', () => {\n    const testDate = [undefined, '2019-02-10', '2019-02-11', '2019-02-12', '2019-02-13', '2019-02-14', '2019-02-15', '2019-02-16']\n    const testLocale = ['zh-cn', 'ar', 'en']\n    testDate.forEach((d) => {\n      testLocale.forEach((l) => {\n        expect(dayjs(d).locale(l).startOf('week').date())\n          .toBe(moment(d).locale(l).startOf('week').date())\n        expect(dayjs(d).locale(l).endOf('week').date())\n          .toBe(moment(d).locale(l).endOf('week').date())\n      })\n    })\n  })\n})\n\n\nit('Add Time days', () => {\n  expect(dayjs().add(1, 'ms').valueOf()).toBe(moment().add(1, 'ms').valueOf())\n  expect(dayjs().add(1, 'milliseconds').valueOf()).toBe(moment().add(1, 'milliseconds').valueOf())\n  expect(dayjs().add(1, 's').valueOf()).toBe(moment().add(1, 's').valueOf())\n  expect(dayjs().add(1, 'seconds').valueOf()).toBe(moment().add(1, 'seconds').valueOf())\n  expect(dayjs().add(1, 'm').valueOf()).toBe(moment().add(1, 'm').valueOf())\n  expect(dayjs().add(1, 'minutes').valueOf()).toBe(moment().add(1, 'minutes').valueOf())\n  expect(dayjs().add(1, 'h').valueOf()).toBe(moment().add(1, 'h').valueOf())\n  expect(dayjs().add(1, 'hours').valueOf()).toBe(moment().add(1, 'hours').valueOf())\n  expect(dayjs().add(1, 'w').valueOf()).toBe(moment().add(1, 'w').valueOf())\n  expect(dayjs().add(1, 'weeks').valueOf()).toBe(moment().add(1, 'weeks').valueOf())\n  expect(dayjs().add(1, 'd').valueOf()).toBe(moment().add(1, 'd').valueOf())\n  expect(dayjs().add(1, 'days').valueOf()).toBe(moment().add(1, 'days').valueOf())\n  expect(dayjs().add(1, 'M').valueOf()).toBe(moment().add(1, 'M').valueOf())\n  expect(dayjs().add(1, 'y').valueOf()).toBe(moment().add(1, 'y').valueOf())\n  expect(dayjs('20111031').add(1, 'months').valueOf()).toBe(moment('20111031').add(1, 'months').valueOf())\n  expect(dayjs('20160131').add(1, 'months').valueOf()).toBe(moment('20160131').add(1, 'months').valueOf())\n  expect(dayjs('20160229').add(1, 'year').valueOf()).toBe(moment('20160229').add(1, 'year').valueOf())\n\n  expect(dayjs().add('2', 'years').valueOf()).toBe(moment().add('2', 'years').valueOf())\n})\n\nit('Add Time with decimal', () => {\n  expect(dayjs().add(0.4, 'day').valueOf()).toBe(moment().add(0.4, 'day').valueOf())\n  expect(dayjs().add(0.5, 'day').valueOf()).toBe(moment().add(0.5, 'day').valueOf())\n  expect(dayjs().add(0.4, 'week').valueOf()).toBe(moment().add(0.4, 'week').valueOf())\n  expect(dayjs().add(0.5, 'week').valueOf()).toBe(moment().add(0.5, 'week').valueOf())\n})\n\nit('Subtract Time days', () => {\n  expect(dayjs().subtract(1, 'days').valueOf()).toBe(moment().subtract(1, 'days').valueOf())\n})\n"
  },
  {
    "path": "test/parse.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../src'\nimport { REGEX_PARSE } from '../src/constant'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('Parse', () => {\n  it('Now', () => {\n    expect(dayjs().valueOf()).toBe(moment().valueOf())\n  })\n\n  it('moment-js like formatted dates', () => {\n    global.console.warn = jest.genMockFunction()// moment.js '2018-4-1 1:1:1:22' will throw warn\n    let d = '20130108'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf())\n    d = '2018-04-24'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf())\n    d = '2018-04-24 11:12'\n    expect(dayjs(d).format()).toBe(moment(d).format()) // not recommend\n    d = '2018-05-02 11:12:13'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf())\n    d = '2018-05-02 11:12:13.998'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf())\n    d = '2018-4-1'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf()) // not recommend\n    d = '2018-4-1 11:12'\n    expect(dayjs(d).format()).toBe(moment(d).format()) // not recommend\n    d = '2018-4-1 1:1:1:223'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf()) // not recommend\n    d = '2018-01'\n    expect(dayjs(d).valueOf()).toBe(moment(d).valueOf()) // not recommend\n    d = '2018'\n    expect(dayjs(d).format()).toBe(moment(d).format()) // not recommend\n    d = '2018-05-02T11:12:13Z' // should go direct to new Date() rather our regex\n    expect(dayjs(d).format()).toBe(moment(d).format()) // not recommend\n  })\n\n  it('String ISO 8601 date, time and zone', () => {\n    const time = '2018-04-04T16:00:00.000Z'\n    expect(dayjs(time).valueOf()).toBe(moment(time).valueOf())\n  })\n\n  it('String RFC 2822, time and zone', () => {\n    const time = 'Mon, 11 Feb 2019 09:46:50 GMT+1'\n    const expected = '2019-02-11T08:46:50.000Z'\n    const d = dayjs(time)\n    expect(d.toISOString()).toEqual(expected)\n    expect(d.valueOf()).toBe(moment(time).valueOf())\n  })\n\n  it('String ECMAScript, time and zone', () => {\n    // should parse dates formatted in ECMA script format\n    // see https://www.ecma-international.org/ecma-262/9.0/index.html#sec-date.prototype.tostring\n    const time = 'Mon Feb 11 2019 11:01:37 GMT+0100 (Mitteleuropäische Normalzeit)'\n    const expected = '2019-02-11T10:01:37.000Z'\n    const d = dayjs(time)\n    expect(d.toISOString()).toEqual(expected)\n    expect(d.valueOf()).toBe(moment(time).valueOf())\n  })\n\n  it('rejects invalid values', () => {\n    expect(dayjs({}).isValid()).toBe(false)\n    expect(dayjs(() => '2018-01-01').isValid()).toBe(false)\n    expect(dayjs(Infinity).isValid()).toBe(false)\n    expect(dayjs(NaN).isValid()).toBe(false)\n    expect(dayjs([2018, 5, 1, 13, 52, 44]).isValid()).toBe(false) // Arrays with time part\n  })\n\n  it('parses Arrays with date part', () => {\n    const dateParts = [2018, 5, 1]\n    const expected = '2018-05-01T00:00:00.000Z'\n    const d = dayjs(dateParts)\n    const normalized = d.add(d.utcOffset(), 'minutes') // make test run in every timezone\n    expect(normalized.toISOString()).toEqual(expected)\n  })\n\n  it('parses unlimited millisecond', () => {\n    const date = '2019-03-25T06:41:00.999999999'\n    const ds = dayjs(date)\n    const ms = moment(date)\n    expect(ds.valueOf()).toEqual(ms.valueOf())\n    expect(ds.millisecond()).toEqual(ms.millisecond())\n  })\n\n  it('String Other, Undefined and Null and isValid', () => {\n    global.console.warn = jest.genMockFunction()// moment.js otherString will throw warn\n    expect(dayjs('otherString').toString().toLowerCase()).toBe(moment('otherString').toString().toLowerCase())\n    expect(dayjs(undefined).toDate()).toEqual(moment(undefined).toDate())\n    expect(dayjs().isValid()).toBe(true)\n    expect(dayjs(undefined).isValid()).toBe(true)\n    expect(dayjs('').isValid()).toBe(false)\n    expect(dayjs(null).isValid()).toBe(false)\n    expect(dayjs('otherString').isValid()).toBe(false)\n    expect(dayjs(null).toString().toLowerCase()).toBe(moment(null).toString().toLowerCase())\n  })\n})\n\nit('Unix Timestamp Number (milliseconds) 1523520536000', () => {\n  const timestamp = 1523520536000\n  expect(dayjs(timestamp).valueOf()).toBe(moment(timestamp).valueOf())\n})\n\nit('Unix Timestamp Number (seconds) 1318781876', () => {\n  const timestamp1 = 1318781876\n  const timestamp2 = 1318781876.721\n  expect(dayjs.unix(timestamp1).valueOf()).toBe(moment.unix(timestamp1).valueOf())\n  expect(dayjs.unix(timestamp2).valueOf()).toBe(moment.unix(timestamp2).valueOf())\n})\n\nit('String and Number 20180101', () => {\n  expect(dayjs(20180101).valueOf()).toBe(moment(20180101).valueOf())\n  expect(dayjs('20180101').valueOf()).toBe(moment('20180101').valueOf())\n})\n\nit('Number 0', () => {\n  expect(dayjs(0).valueOf()).toBe(moment(0).valueOf())\n})\n\nit('Clone not affect each other', () => {\n  const base = dayjs(20170101)\n  const year = base.year()\n  const another = base.set('year', year + 1)\n  expect(another.unix() - base.unix()).toBe(31536000)\n})\n\nit('Clone with same value', () => {\n  const base = dayjs()\n  const year = base.year()\n  const newBase = base.set('year', year + 1)\n  const another = newBase.clone()\n  expect(newBase.toString()).toBe(another.toString())\n})\n\ndescribe('REGEX_PARSE', () => {\n  it('2020/9/30', () => {\n    const date = '2020/9/30'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('2020/9/30-2020-9-30----')\n  })\n  it('2019-03-25T06:41:00.999999999', () => {\n    const date = '2019-03-25T06:41:00.999999999'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('2019-03-25T06:41:00.999999999-2019-03-25-06-41-00-999999999')\n  })\n  it('20210102T012345', () => {\n    const date = '20210102T012345'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('20210102T012345-2021-01-02-01-23-45-')\n  })\n  it('2021-01-02T01:23', () => {\n    const date = '2021-01-02T01:23'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('2021-01-02T01:23-2021-01-02-01-23--')\n  })\n  it('2021-01-02T01:23:45', () => {\n    const date = '2021-01-02T01:23:45'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('2021-01-02T01:23:45-2021-01-02-01-23-45-')\n  })\n\n  it('2020-12-31T18:00:00.000-0500 (no regex match)', () => {\n    const date = '2020-12-31T18:00:00.000-0500'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d).toBe(null)\n  })\n\n  // format used in timezone plugin utcString\n  it('2021-1-4 0:42:53:000', () => {\n    const date = '2021-1-4 0:42:53:000'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d.join('-')).toBe('2021-1-4 0:42:53:000-2021-1-4-0-42-53-000')\n  })\n\n  it('2020-12-31T18:00:00-05:00 (no regex match)', () => {\n    const date = '2020-12-31T18:00:00-05:00'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d).toBe(null)\n  })\n\n  it('2021-01-02T01:23:45-0500 (no regex match)', () => {\n    const date = '2021-01-02T01:23:45-0500'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d).toBe(null)\n  })\n  it('2021-01-02T01:23:45Z (no regex match)', () => {\n    const date = '2021-01-02T01:23:45Z'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d).toBe(null)\n  })\n\n  // dots should not be matched, and fallback to Date\n  it('2021.01.03', () => {\n    const date = '2021.01.03'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).valueOf()).toBe(moment(date).valueOf())\n    expect(d).toBe(null)\n  })\n})\n"
  },
  {
    "path": "test/plugin/advancedFormat.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport isoWeek from '../../src/plugin/isoWeek'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport weekYear from '../../src/plugin/weekYear'\nimport timezone from '../../src/plugin/timezone'\nimport utc from '../../src/plugin/utc'\nimport '../../src/locale/zh-cn'\nimport '../../src/locale/nl'\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(isoWeek)\ndayjs.extend(weekYear)\ndayjs.extend(weekOfYear)\ndayjs.extend(advancedFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format of invalid date', () => {\n  expect(dayjs(null).format('z').toLowerCase()).toEqual(moment(null).format('z').toLowerCase())\n})\n\nit('Format empty string', () => {\n  expect(dayjs().format()).toBe(moment().format())\n})\n\nit('Format Quarter Q', () => {\n  expect(dayjs().format('Q')).toBe(moment().format('Q'))\n})\n\nit('Format Timestamp X x', () => {\n  expect(dayjs().format('X')).toBe(moment().format('X'))\n  expect(dayjs().format('x')).toBe(moment().format('x'))\n})\n\nit('Format Day of Month Do 1 - 31', () => {\n  expect(dayjs().format('Do')).toBe(moment().format('Do'))\n  let d = '2018-05-02 00:00:00.000'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-01 00:00:00.000'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-03 00:00:00.000'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-04 00:00:00.000'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-08 00:00:00.000'\n  expect(dayjs(d).locale('nl').format('Do')).toBe(moment(d).locale('nl').format('Do'))\n  d = '2018-05-11'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-12'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-13'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n  d = '2018-05-19 00:00:00.000'\n  expect(dayjs(d).locale('nl').format('Do')).toBe(moment(d).locale('nl').format('Do'))\n  d = '2018-05-22'\n  expect(dayjs(d).format('Do')).toBe(moment(d).format('Do'))\n})\n\nit('Format Hour k kk 24-hour 1 - 24', () => {\n  expect(dayjs().format('k')).toBe(moment().format('k'))\n  expect(dayjs().format('kk')).toBe(moment().format('kk'))\n  let d = '2018-05-02 00:00:00.000'\n  expect(dayjs(d).format('k')).toBe('24')\n  expect(dayjs(d).format('k')).toBe(moment(d).format('k'))\n  expect(dayjs(d).format('kk')).toBe('24')\n  expect(dayjs(d).format('kk')).toBe(moment(d).format('kk'))\n  d = '2018-05-02 01:00:00.000'\n  expect(dayjs(d).format('k')).toBe('1')\n  expect(dayjs(d).format('k')).toBe(moment(d).format('k'))\n  expect(dayjs(d).format('kk')).toBe('01')\n  expect(dayjs(d).format('kk')).toBe(moment(d).format('kk'))\n  d = '2018-05-02 23:59:59.999'\n  expect(dayjs(d).format('k')).toBe('23')\n  expect(dayjs(d).format('k')).toBe(moment(d).format('k'))\n  expect(dayjs(d).format('kk')).toBe('23')\n  expect(dayjs(d).format('kk')).toBe(moment(d).format('kk'))\n})\n\nit('Format Week of Year wo', () => {\n  const d = '2018-12-01'\n  expect(dayjs(d).format('wo')).toBe(moment(d).format('wo'))\n  expect(dayjs(d).locale('zh-cn').format('wo'))\n    .toBe(moment(d).locale('zh-cn').format('wo'))\n})\n\nit('Format Week of Year wo', () => {\n  const d = '2018-12-01'\n  expect(dayjs(d).format('wo')).toBe(moment(d).format('wo'))\n  expect(dayjs(d).locale('zh-cn').format('wo'))\n    .toBe(moment(d).locale('zh-cn').format('wo'))\n})\n\nit('Format Week Year gggg', () => {\n  const d = '2018-12-31'\n  expect(dayjs(d).format('gggg')).toBe(moment(d).format('gggg'))\n})\n\nit('Format Iso Week Year GGGG', () => {\n  const d = '2021-01-01'\n  expect(dayjs(d).format('GGGG')).toBe(moment(d).format('GGGG'))\n})\n\nit('Format Iso Week of Year', () => {\n  const d = '2021-01-01'\n  expect(dayjs(d).format('W')).toBe(moment(d).format('W'))\n  expect(dayjs(d).format('WW')).toBe(moment(d).format('WW'))\n})\n\nit('Format offsetName z zzz', () => {\n  const dtz = dayjs.tz('2012-03-11 01:59:59', 'America/New_York')\n  expect(dtz.format('z')).toBe('EST')\n  expect(dtz.format('zzz')).toBe('Eastern Standard Time')\n  expect(dayjs().format('z')).toBeDefined()\n  expect(dayjs().format('zzz')).toBeDefined()\n})\n\nit('Skips format strings inside brackets', () => {\n  expect(dayjs().format('[Q]')).toBe('Q')\n  expect(dayjs().format('[Do]')).toBe('Do')\n  expect(dayjs().format('[gggg]')).toBe('gggg')\n  expect(dayjs().format('[GGGG]')).toBe('GGGG')\n  expect(dayjs().format('[w]')).toBe('w')\n  expect(dayjs().format('[ww]')).toBe('ww')\n  expect(dayjs().format('[W]')).toBe('W')\n  expect(dayjs().format('[WW]')).toBe('WW')\n  expect(dayjs().format('[wo]')).toBe('wo')\n  expect(dayjs().format('[k]')).toBe('k')\n  expect(dayjs().format('[kk]')).toBe('kk')\n  expect(dayjs().format('[X]')).toBe('X')\n  expect(dayjs().format('[x]')).toBe('x')\n})\n"
  },
  {
    "path": "test/plugin/arraySupport.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport arraySupport from '../../src/plugin/arraySupport'\nimport utc from '../../src/plugin/utc'\n\ndayjs.extend(utc)\ndayjs.extend(arraySupport)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('parse empty array', () => {\n  it('local', () => {\n    expect(dayjs([]).format())\n      .toBe(moment([]).format())\n  })\n  it('utc', () => {\n    expect(dayjs.utc([]).format())\n      .toBe(moment.utc([]).format())\n  })\n})\n\nconst testArrs = [\n  [2010, 1, 14, 15, 25, 50, 125],\n  [2010],\n  [2010, 6],\n  [2010, 6, 10]\n]\n\ndescribe('parse array local', () => {\n  testArrs.forEach((testArr) => {\n    it(testArr, () => {\n      expect(dayjs(testArr).format())\n        .toBe(moment(testArr).format())\n    })\n  })\n})\n\ndescribe('parse array utc', () => {\n  testArrs.forEach((testArr) => {\n    it(testArr, () => {\n      expect(dayjs.utc(testArr).format())\n        .toBe(moment.utc(testArr).format())\n    })\n  })\n})\n"
  },
  {
    "path": "test/plugin/badMutable.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport badMutable from '../../src/plugin/badMutable'\nimport dayOfYear from '../../src/plugin/dayOfYear'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport '../../src/locale/zh-cn'\n\ndayjs.extend(badMutable)\ndayjs.extend(dayOfYear)\ndayjs.extend(weekOfYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('Set', () => {\n  it('Setters', () => {\n    const d = dayjs()\n    const m = moment()\n    expect(d.year()).toBe(m.year())\n    d.year(2000)\n    m.year(2000)\n    expect(d.format()).toBe(m.format())\n    d.month(1)\n    m.month(1)\n    expect(d.format()).toBe(m.format())\n    d.day(1)\n    m.day(1)\n    expect(d.format()).toBe(m.format())\n    d.date(1)\n    m.date(1)\n    expect(d.format()).toBe(m.format())\n    d.hour(1)\n    m.hour(1)\n    expect(d.format()).toBe(m.format())\n    d.minute(1)\n    m.minute(1)\n    expect(d.format()).toBe(m.format())\n    d.second(1)\n    m.second(1)\n    expect(d.format()).toBe(m.format())\n    d.millisecond(1)\n    m.millisecond(1)\n    expect(d.format()).toBe(m.format())\n  })\n\n  it('Set', () => {\n    const d = dayjs()\n    const m = moment()\n    d.set('year', 2000)\n    m.set('year', 2000)\n    expect(d.format()).toBe(m.format())\n    d.set('month', 12)\n    m.set('month', 12)\n    expect(d.format()).toBe(m.format())\n    d.set('day', 1)\n    m.set('day', 1)\n    expect(d.format()).toBe(m.format())\n    d.set('date', 1)\n    m.set('date', 1)\n    expect(d.format()).toBe(m.format())\n    d.set('hour', 1)\n    m.set('hour', 1)\n    expect(d.format()).toBe(m.format())\n    d.set('minute', 1)\n    m.set('minute', 1)\n    expect(d.format()).toBe(m.format())\n    d.set('second', 1)\n    m.set('second', 1)\n    expect(d.format()).toBe(m.format())\n    d.set('millisecond', 1)\n    m.set('millisecond', 1)\n    expect(d.format()).toBe(m.format())\n  })\n})\n\ndescribe('StartOf', () => {\n  it('StartOf', () => {\n    const d = dayjs()\n    const m = moment()\n    d.startOf('year')\n    m.startOf('year')\n    expect(d.format()).toBe(m.format())\n    d.startOf('month')\n    m.startOf('month')\n    expect(d.format()).toBe(m.format())\n    d.startOf('day')\n    m.startOf('day')\n    expect(d.format()).toBe(m.format())\n    d.startOf('date')\n    m.startOf('date')\n    expect(d.format()).toBe(m.format())\n    d.startOf('hour')\n    m.startOf('hour')\n    expect(d.format()).toBe(m.format())\n    d.startOf('minute')\n    m.startOf('minute')\n    expect(d.format()).toBe(m.format())\n    d.startOf('second')\n    m.startOf('second')\n    expect(d.format()).toBe(m.format())\n    d.startOf('millisecond')\n    m.startOf('millisecond')\n    expect(d.format()).toBe(m.format())\n    d.startOf('week')\n    m.startOf('week')\n    expect(d.format()).toBe(m.format())\n  })\n})\n\ndescribe('Add', () => {\n  it('Add', () => {\n    const d = dayjs()\n    const m = moment()\n    d.add(1, 'year')\n    m.add(1, 'year')\n    expect(d.format()).toBe(m.format())\n    d.add(12, 'month')\n    m.add(12, 'month')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'day')\n    m.add(1, 'day')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'date')\n    m.add(1, 'date')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'hour')\n    m.add(1, 'hour')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'minute')\n    m.add(1, 'minute')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'second')\n    m.add(1, 'second')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'millisecond')\n    m.add(1, 'millisecond')\n    expect(d.format()).toBe(m.format())\n    d.add(1, 'week')\n    m.add(1, 'week')\n    expect(d.format()).toBe(m.format())\n  })\n})\n\nit('daysInMonth', () => {\n  const d = dayjs()\n  const m = moment()\n  expect(d.daysInMonth()).toBe(m.daysInMonth())\n  expect(d.format()).toBe(m.format())\n})\n\nit('Locale', () => {\n  const d = dayjs()\n  const m = moment()\n  const format = 'MMMM'\n  expect(d.locale()).toBe(m.locale())\n  expect(d.format(format)).toBe(m.format(format))\n  d.locale('zh-cn')\n  m.locale('zh-cn')\n  expect(d.locale()).toBe(m.locale())\n  expect(d.format(format)).toBe(m.format(format))\n})\n\nit('Diff', () => {\n  const d = dayjs()\n  const m = moment()\n  const unit = 'year'\n  const d2 = d.clone().add(1, unit)\n  const m2 = m.clone().add(1, unit)\n  expect(d.diff(d2, unit)).toBe(-1)\n  expect(m.diff(m2, unit)).toBe(-1)\n})\n\nit('isAfter isBefore isSame', () => {\n  const d = dayjs()\n  const format = dayjs().format()\n  d.isSame(dayjs, 'year')\n  expect(d.format()).toBe(format)\n  expect(d.isSame()).toBe(true)\n  d.isBefore(dayjs, 'hour')\n  expect(d.format()).toBe(format)\n  expect(d.isBefore()).toBe(false)\n  d.isAfter(dayjs, 'month')\n  expect(d.format()).toBe(format)\n  expect(d.isAfter()).toBe(false)\n})\n\nit('DayOfYear get day won\\'t change instance', () => {\n  const d = dayjs()\n  const format = d.format()\n  d.dayOfYear()\n  expect(d.format()).toBe(format)\n})\n\nit('WeekOfYear get week won\\'t change instance', () => {\n  const d = dayjs()\n  const format = d.format()\n  d.week()\n  expect(d.format()).toBe(format)\n})\n"
  },
  {
    "path": "test/plugin/bigIntSupport.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport bigIntSupport from '../../src/plugin/bigIntSupport'\n\ndayjs.extend(bigIntSupport)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\n/* global BigInt */\n\nit('Parse BigInt ts and tsms', () => {\n  const tsms = 1666310421101\n  const tsmsBig = BigInt(tsms)\n  const ts = 1666311003\n  const tsBig = BigInt(ts)\n  const momentTsms = moment(tsms)\n  const momentTs = moment.unix(ts)\n  expect(dayjs(tsms).valueOf()).toBe(momentTsms.valueOf())\n  expect(dayjs(tsms).valueOf()).toBe(dayjs(tsmsBig).valueOf())\n  expect(dayjs.unix(ts).valueOf()).toBe(momentTs.valueOf())\n  expect(dayjs.unix(tsBig).valueOf()).toBe(dayjs.unix(tsBig).valueOf())\n})\n\n"
  },
  {
    "path": "test/plugin/buddhistEra.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport buddhistEra from '../../src/plugin/buddhistEra'\n\ndayjs.extend(buddhistEra)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Format empty string', () => {\n  expect(dayjs().format()).toBe(moment().format())\n})\n\nit('Format Buddhist Era 2 digit', () => {\n  expect(dayjs().format('BB')).toBe(`${(moment().year() + 543) % 100}`)\n})\n\nit('Format Buddhist Era 4 digit', () => {\n  expect(dayjs().format('BBBB')).toBe(`${moment().year() + 543}`)\n})\n\nit('Format Buddhist Era 4 digit with other format', () => {\n  const format = 'D MMM BBBB'\n  const today = moment()\n  const momentDate = today.format(format).replace('BBBB', today.year() + 543)\n  expect(dayjs().format(format)).toBe(momentDate)\n})\n\nit('Skips format strings inside brackets', () => {\n  expect(dayjs().format('[BBBB]')).toBe('BBBB')\n  expect(dayjs().format('[BB]')).toBe('BB')\n})\n"
  },
  {
    "path": "test/plugin/calendar.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport calendar from '../../src/plugin/calendar'\nimport zhCn from '../../src/locale/zh-cn'\n\ndayjs.extend(calendar)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('No argument && null && undefined', () => {\n  expect(dayjs().calendar()).toEqual(moment().calendar())\n  // moment@2.27.0 does not support calendar(null) calendar(undefined)\n})\n\nit('ReferenceTime', () => {\n  const now = '2015-01-15T14:21:22.000Z'\n  const dates = [\n    {\n      name: 'nextDay',\n      date: '2015-01-14T11:23:55.000Z',\n      result: 'Tomorrow'\n    },\n    {\n      name: 'sameDay',\n      date: '2015-01-15T11:23:55.000Z',\n      result: 'Today'\n    },\n    {\n      name: 'nextWeek',\n      date: '2015-01-09T11:23:55.000Z',\n      result: 'Thursday'\n    },\n    {\n      name: 'lastDay',\n      date: '2015-01-16T11:23:55.000Z',\n      result: 'Yesterday'\n    },\n    {\n      name: 'lastWeek',\n      date: '2015-01-21T11:23:55.000Z',\n      result: 'Last'\n    },\n    {\n      name: 'sameElse',\n      date: '2015-01-01T11:23:55.000Z',\n      result: '01/15/2015'\n    },\n    {\n      name: 'sameElse',\n      date: '2015-02-21T11:23:55.000Z',\n      result: '01/15/2015'\n    }\n  ]\n  dates.forEach((d) => {\n    const dayjsResult = dayjs(now).calendar(d.date)\n    const momentjsResult = moment(now).calendar(d.date)\n    expect(dayjsResult)\n      .toEqual(momentjsResult)\n    expect(dayjsResult.indexOf(d.result) > -1)\n      .toBe(true)\n  })\n})\n\nit('Custom format', () => {\n  const format = {\n    sameDay: '[sameDay]',\n    sameElse: '[sameElse]'\n  }\n  expect(dayjs().calendar(null, format)).toEqual(moment().calendar(null, format))\n  const now = '2015-01-15T14:21:22.000Z'\n  const nextDayWithoutFormat = '2015-01-14T11:23:55.000Z'\n  expect(dayjs(now).calendar(nextDayWithoutFormat, format))\n    .toEqual(moment(now).calendar(nextDayWithoutFormat, format))\n})\n\nit('Custom callback', () => {\n  const callbacks = {\n    sameDay: jest.fn(),\n    sameElse: jest.fn()\n  }\n  const now = '2015-01-15T14:21:22.000Z'\n  const nextDayWithoutFormat = '2015-01-14T11:23:55.000Z'\n  expect(dayjs(now).calendar(nextDayWithoutFormat, callbacks))\n    .toEqual(moment(now).calendar(nextDayWithoutFormat, callbacks))\n})\n\nit('Calls callback', () => {\n  const callbacks = {\n    sameDay: jest.fn(),\n    sameElse: jest.fn()\n  }\n  dayjs().calendar(null, callbacks)\n  expect(callbacks.sameElse).not.toBeCalled()\n  expect(callbacks.sameDay).toBeCalled()\n})\n\nit('callback is a function with the scope of the current moment', () => {\n  const callbacks = {\n    sameDay: jest.fn()\n  }\n  expect(dayjs().calendar(null, callbacks)).toEqual(callbacks.sameDay())\n  const callbacks2 = {\n    sameDay: function cb() {\n      return this\n    }\n  }\n  const result = dayjs().calendar(null, callbacks2)\n  expect(result.format).not.toBeUndefined()\n  expect(dayjs.isDayjs(result)).toBeTruthy()\n})\n\nit('callback is a function and first argument a moment that depicts now', () => {\n  const callbacks = {\n    sameDay: jest.fn()\n  }\n  const now = dayjs()\n  dayjs(now).calendar(now, callbacks)\n  expect(callbacks.sameDay).toBeCalledWith(now)\n})\n\nit('set global calendar in locale file', () => {\n  const now = '2019-04-03T14:21:22.000Z'\n  zhCn.calendar = {\n    sameDay: '[今天]HH:mm',\n    nextDay: '[明天]HH:mm',\n    nextWeek: '[下]ddddHH:mm',\n    lastDay: '[昨天]HH:mm',\n    lastWeek: '[上]ddddHH:mm',\n    sameElse: 'YYYY/MM/DD'\n  }\n  dayjs.locale(zhCn)\n  expect(dayjs(now).calendar())\n    .toEqual(moment(now).locale('zh-cn').calendar())\n})\n"
  },
  {
    "path": "test/plugin/customParseFormat.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/ru'\nimport uk from '../../src/locale/uk'\nimport '../../src/locale/zh-cn'\nimport customParseFormat from '../../src/plugin/customParseFormat'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport localizedFormats from '../../src/plugin/localizedFormat'\nimport weekOfYear from '../../src/plugin/weekOfYear'\n\ndayjs.extend(customParseFormat)\ndayjs.extend(localizedFormats)\ndayjs.extend(weekOfYear) // test parse w, ww\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('does not break the built-in parsing', () => {\n  const input = '2018-05-02 01:02:03.004'\n  expect(dayjs(input).valueOf()).toBe(moment(input).valueOf())\n})\n\nit('parse padded string', () => {\n  const input = '2018-05-02 01:02:03.004 AM +01:00'\n  const format = 'YYYY-MM-DD HH:mm:ss.SSS A Z'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse string for MMM month format', () => {\n  const input = '4/Mar/2019:11:16:26 +0800'\n  const format = 'D/MMM/YYYY:H:m:s zz'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n  const input2 = '21-Dec-18'\n  const format2 = 'D-MMM-YY'\n  expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n})\n\nit('parse string January (getMonth() = 0)', () => {\n  const input = '01/01/2019'\n  const format = 'DD/MM/YYYY'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse unpadded string', () => {\n  const input = '2.5.18 1:2:3.4 PM -0100'\n  const format = 'D.M.YY H:m:s.S A ZZ'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse time zone abbreviation', () => {\n  const input = '05/02/69 1:02:03.004 AM +01:00 (CET)'\n  const format = 'MM/DD/YY h:mm:ss.SSS A Z (z)'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse time zone abbreviation2', () => {\n  const input = '05/02/69 1:02:03.04 AM +01:00 (CET)'\n  const format = 'MM/DD/YY h:mm:ss.SS A Z (z)'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('recognizes midnight in small letters', () => {\n  const input = '2018-05-02 12:00 am'\n  const format = 'YYYY-MM-DD hh:mm a'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('recognizes noon in small letters', () => {\n  const input = '2018-05-02 12:00 pm'\n  const format = 'YYYY-MM-DD hh:mm a'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\ndescribe('parse localizedFormats', () => {\n  ['zh-cn', 'ru', 'uk', 'en'].forEach((lo) => {\n    it(`Locale: ${lo}`, () => {\n      const input = '2018-05-02 01:02:03.004'\n      dayjs.locale(lo)\n      moment.locale(lo)\n      const longDateFormats = ['LT', 'LTS', 'L', 'LL', 'l', 'll', 'lll', 'l LT', 'LL [l] LTS'] // TODO: fix LLL, LLLL and llll\n      longDateFormats.forEach((f) => {\n        const localizedInput = moment(input).format(f)\n        expect(dayjs(localizedInput, f).valueOf()).toBe(moment(localizedInput, f).valueOf())\n      })\n    })\n  })\n})\n\nit('leaves non-token parts of the format intact', () => {\n  const input = '2018-05-02 12:00 +0000 S:/-.() SS h '\n  const format = 'YYYY-MM-DD HH:mm ZZ [S]:/-.()[ SS h ]'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('timezone with no hour', () => {\n  const input = '2018-05-02 +0000'\n  const format = 'YYYY-MM-DD ZZ'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\ndescribe('Timezone Offset', () => {\n  it('timezone with 2-digit offset', () => {\n    const input = '2020-12-01T20:00:00+09'\n    const format = 'YYYY-MM-DD[T]HH:mm:ssZZ'\n    const result = dayjs(input, format)\n    expect(result.valueOf()).toBe(moment(input, format).valueOf())\n    expect(result.valueOf()).toBe(1606820400000)\n  })\n  it('zulu', () => {\n    const input = '2021-01-26T15:38:43.000Z'\n    const format = 'YYYY-MM-DDTHH:mm:ss.SSSZ'\n    const result = dayjs(input, format)\n    expect(result.valueOf()).toBe(moment(input, format).valueOf())\n    expect(result.valueOf()).toBe(1611675523000)\n  })\n  it('no timezone format token should parse in local time', () => {\n    const input = '2020-12-01T20:00:00+01:00'\n    const format = 'YYYY-MM-DD[T]HH:mm:ss'\n    const result = dayjs(input, format)\n    expect(result.valueOf()).toBe(moment(input, format).valueOf())\n  })\n})\n\nit('parse hh:mm', () => {\n  const input = '12:00'\n  const format = 'hh:mm'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse HH:mm:ss', () => {\n  const input = '00:27:21'\n  const format = 'HH:mm:ss'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse HH:mm:ss but only one digit', () => {\n  const input = '0:0:1'\n  const format = 'HH:mm:ss'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\ndescribe('parse YYYY / YYYY-MM only', () => {\n  it('YYYY', () => {\n    const input = '2001 +08:00'\n    const format = 'YYYY Z'\n    expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n    const input2 = '2001'\n    const format2 = 'YYYY'\n    expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n  })\n  it('YYYY-MM', () => {\n    const input = '2001-01 +08:00'\n    const format = 'YYYY-MM Z'\n    expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n    const input2 = '2001-01'\n    const format2 = 'YYYY-MM'\n    expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n  })\n})\n\nit('parse hh:mm:ss but only one digit', () => {\n  const input = '0:0:1'\n  const format = 'hh:mm:ss'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('fails with an invalid format', () => {\n  const input = '2018-05-02 12:00 PM'\n  const format = 'C'\n  expect(dayjs(input, format).format().toLowerCase())\n    .toBe(moment(input, format).format().toLowerCase())\n})\n\nit('parse month from string', () => {\n  const input = '2018 February 03'\n  const format = 'YYYY MMMM DD'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n  const input2 = '21-December-18'\n  const format2 = 'D-MMMM-YY'\n  expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n})\n\nit('parse month from short string', () => {\n  const input = '2018 Feb 03'\n  const format = 'YYYY MMM DD'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n})\n\nit('parse month from string with locale in config', () => {\n  const input = '2018 лютий 03'\n  const format = 'YYYY MMMM DD'\n\n  expect(dayjs(input, format, 'uk').valueOf()).toBe(moment(input, format, 'uk').valueOf())\n})\n\nit('parse month from short string with locale in config', () => {\n  const input = '2018 трав 03'\n  const format = 'YYYY MMM DD'\n  expect(dayjs(input, format, 'uk').valueOf()).toBe(moment(input, format, 'uk').valueOf())\n})\n\nit('parse month from short string with locale in argument', () => {\n  const input = '2018 трав 03'\n  const format = 'YYYY MMM DD'\n  expect(dayjs(input, format, 'uk').valueOf()).toBe(moment(input, format, 'uk').valueOf())\n})\n\nit('parse month from string with locale in argument', () => {\n  const input = '2018 лютий 03'\n  const format = 'YYYY MMMM DD'\n\n  expect(dayjs(input, format, 'uk').valueOf()).toBe(moment(input, format, 'uk').valueOf())\n})\n\nit('return Invalid Date when parse corrupt string', () => {\n  const input = '2018 Turnip 03'\n  const format = 'YYYY MMMM DD'\n  expect(dayjs(input, format).format()).toBe('Invalid Date')\n})\n\nit('return Invalid Date when parse corrupt short string', () => {\n  const input = '2018 Dog 03'\n  const format = 'YYYY MMM DD'\n  expect(dayjs(input, format).format()).toBe('Invalid Date')\n})\n\nit('YYYY-MM set 1st day of the month', () => {\n  expect(dayjs('2019-02', 'YYYY-MM').format('YYYY-MM-DD')).toBe('2019-02-01')\n})\n\nit('Invalid Dates', () => {\n  expect(dayjs('10/12/2014', 'YYYY-MM-DD').format('MM-DD-YYYY')).toBe('Invalid Date')\n  expect(dayjs('10-12-2014', 'YYYY-MM-DD').format('MM-DD-YYYY')).toBe('Invalid Date')\n})\n\nit('Valid Date', () => {\n  expect(dayjs('2014/10/12', 'YYYY-MM-DD').format('MM-DD-YYYY')).toBe('10-12-2014')\n})\n\nit('correctly parse month from string after changing locale globally', () => {\n  const input = '2018 лютий 03'\n  const format = 'YYYY MMMM DD'\n\n  const dayjsLocale = dayjs().$locale()\n  const momentLocale = moment.locale()\n  try {\n    dayjs.locale(uk)\n    moment.locale('uk')\n    expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n  } finally {\n    dayjs.locale(dayjsLocale)\n    moment.locale(momentLocale)\n  }\n})\n\nit('correctly parse ordinal', () => {\n  const input = '7th March 2019'\n  const input2 = '17th March 2019'\n  const inputFalse = '7st March 2019'\n  const inputZHCN = '7日 三月 2019'\n  const format = 'Do MMMM YYYY'\n  const displayFormatWithLocale = 'MMMM dddd'\n  expect(dayjs(input, format).valueOf())\n    .toBe(moment(input, format).valueOf())\n  expect(dayjs(input2, format).valueOf())\n    .toBe(moment(input2, format).valueOf())\n  expect(dayjs(inputFalse, format).valueOf())\n    .toBe(moment(inputFalse, format).valueOf())\n\n  const dayjsCN = dayjs(inputZHCN, format, 'zh-cn')\n  const momentCN = moment(inputZHCN, format, 'zh-cn')\n  expect(dayjsCN.valueOf())\n    .toBe(momentCN.valueOf())\n  expect(dayjsCN.format(displayFormatWithLocale))\n    .toBe(momentCN.format(displayFormatWithLocale))\n  expect(dayjsCN.locale())\n    .toBe(momentCN.locale())\n})\n\ndescribe('month function locale', () => {\n  it('MMMM', () => {\n    const input = '08 мая 2020'\n    const input2 = '08 май 2020'\n    const format = 'DD MMMM YYYY'\n    expect(dayjs(input, format, 'ru').valueOf()).toBe(moment(input, format, 'ru').valueOf())\n    expect(dayjs(input2, format, 'ru').valueOf()).toBe(moment(input2, format, 'ru').valueOf())\n  })\n  it('MMM', () => {\n    const input = '08 февр. 2020'\n    const format = 'DD MMM YYYY'\n    expect(dayjs(input, format, 'ru').valueOf()).toBe(moment(input, format, 'ru').valueOf())\n  })\n})\n\ndescribe('Strict mode', () => {\n  it('without locale', () => {\n    const input = '1970-00-00'\n    const format = 'YYYY-MM-DD'\n    expect(dayjs(input, format).isValid()).toBe(true)\n    expect(dayjs(input, format, true).isValid()).toBe(false)\n    expect(dayjs('2020-Jan-01', 'YYYY-MMM-DD', true).isValid()).toBe(true)\n    expect(dayjs('30/1/2020 10:59 PM', 'D/M/YYYY h:mm A', true).isValid()).toBe(true)\n  })\n  it('with locale', () => {\n    const input = '2018 三月 99'\n    const format = 'YYYY MMMM DD'\n    expect(dayjs(input, format, 'zh-cn').isValid()).toBe(true)\n    expect(dayjs(input, format, 'zh-cn', true).isValid()).toBe(false)\n  })\n})\n\ndescribe('Array format support', () => {\n  it('second ok', () => {\n    const input = '2012-05-28'\n    const format = ['YYYY', 'YYYY-MM-DD']\n    expect(dayjs(input, format).isValid()).toBe(true)\n    expect(dayjs(input, format, true).format('YYYY-MM-DD')).toBe('2012-05-28')\n  })\n  it('all invalid', () => {\n    const input = '2012-05-28'\n    const format = ['DD', 'MM-DD']\n    expect(dayjs(input, format, true).isValid()).toBe(false)\n  })\n  it('with locale', () => {\n    const input = '2018 三月 12'\n    const format = ['YYYY', 'MM', 'YYYY MMMM DD']\n    expect(dayjs(input, format, 'zh-cn', true).format('YYYY MMMM DD')).toBe(input)\n  })\n})\n\ndescribe('meridiem locale', () => {\n  const format = 'YYYY年M月D日Ah点mm分ss秒'\n  const format2 = 'YYYY-MM-DD HH:mm:ss'\n  it('AM', () => {\n    const input = '2018-05-02 01:02:03'\n    const date = dayjs(input).locale('zh-cn').format(format)\n    expect(dayjs(date, format, 'zh-cn').format(format2)).toBe(input)\n  })\n  it('PM', () => {\n    const input = '2018-05-02 20:02:03'\n    const date = dayjs(input).locale('zh-cn').format(format)\n    expect(dayjs(date, format, 'zh-cn').format(format2)).toBe(input)\n  })\n})\n\nit('parse a string for MMM month format with underscore delimiter', () => {\n  const input = 'Jan_2021'\n  const format = 'MMM_YYYY'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n  const input2 = '21_Jan_2021_123523'\n  const format2 = 'DD_MMM_YYYY_hhmmss'\n  expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n})\n\nit('custom two-digit year parse function', () => {\n  delete customParseFormat.$i // this allow plugin to be installed again\n  dayjs.extend(customParseFormat, {\n    parseTwoDigitYear: yearString => (+yearString) + 1800\n  })\n  const format = 'YY-MM-DD'\n  const input = '00-05-02'\n  expect(dayjs(input, format).year()).toBe(1800)\n  const input2 = '50-05-02'\n  expect(dayjs(input2, format).year()).toBe(1850)\n  const input3 = '99-05-02'\n  expect(dayjs(input3, format).year()).toBe(1899)\n})\n\n// issue 1852\ndescribe('parse with special separator characters', () => {\n  it('Output is NaN for a specific date format', () => {\n    const input = '20 Nov, 2022'\n    const format = 'DD MMM, YYYY'\n    const locale = 'en'\n    const resultDayjs = dayjs(input, format, locale)\n    const resultMoment = moment(input, format, locale)\n    expect(resultMoment.isValid()).toBe(true)\n    expect(resultDayjs.isValid()).toBe(true)\n    expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022')\n    expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022')\n  })\n  it('parse comma separated date', () => {\n    const input = '20,11,2022'\n    const format = 'DD,MM,YYYY'\n    const resultDayjs = dayjs(input, format)\n    const resultMoment = moment(input, format)\n    expect(resultMoment.isValid()).toBe(true)\n    expect(resultDayjs.isValid()).toBe(true)\n    expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022')\n    expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022')\n  })\n  it('parse comma separated date in strict mode', () => {\n    const input = '20,11,2022'\n    const format = 'DD,MM,YYYY'\n    const resultDayjs = dayjs(input, format, true)\n    const resultMoment = moment(input, format, true)\n    expect(resultMoment.isValid()).toBe(true)\n    expect(resultDayjs.isValid()).toBe(true)\n    expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022')\n    expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022')\n  })\n  it('parse date with multi character separator', () => {\n    const input = '20---11---2022'\n    const format = 'DD-/-MM-#-YYYY'\n    const resultDayjs = dayjs(input, format)\n    const resultMoment = moment(input, format)\n    expect(resultMoment.isValid()).toBe(true)\n    expect(resultDayjs.isValid()).toBe(true)\n    expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022')\n    expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022')\n  })\n  it('parse date with multi character separator in strict mode', () => {\n    const input = '20-/-11-#-2022'\n    const format = 'DD-/-MM-#-YYYY'\n    const resultDayjs = dayjs(input, format, true)\n    const resultMoment = moment(input, format, true)\n    expect(resultMoment.isValid()).toBe(true)\n    expect(resultDayjs.isValid()).toBe(true)\n    expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022')\n    expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022')\n  })\n})\n\nit('parse X x', () => {\n  const input = '1410715640.579'\n  const format = 'X'\n  expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf())\n  const input2 = '1410715640579'\n  const format2 = 'x'\n  expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf())\n\n  // x X starct parse requires advancedFormat plugin\n  dayjs.extend(advancedFormat)\n  expect(dayjs(input2, format2, true).valueOf()).toBe(moment(input2, format2, true).valueOf())\n})\n\nit('parse Q, [Q]', () => {\n  const input1 = '2024-Q1'\n  const input2 = '2024-Q2'\n  const input3 = '2024-Q3'\n  const input4 = '2024-Q4'\n  const format = 'YYYY-[Q]Q'\n  expect(dayjs(input1, format).valueOf()).toBe(moment(input1, format).valueOf())\n  expect(dayjs(input2, format).valueOf()).toBe(moment(input2, format).valueOf())\n  expect(dayjs(input3, format).valueOf()).toBe(moment(input3, format).valueOf())\n  expect(dayjs(input4, format).valueOf()).toBe(moment(input4, format).valueOf())\n})\n\nit('parse w, ww', () => {\n  const input = '2024-w1'\n  const format1 = 'YYYY-[w]w'\n  expect(dayjs(input, format1).format(format1)).toBe(input)\n  const input2 = '2024-w32'\n  const format2 = 'YYYY-[w]ww'\n  expect(dayjs(input2, format2).format(format1)).toBe(input2)\n})\n"
  },
  {
    "path": "test/plugin/dayOfYear.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport dayOfYear from '../../src/plugin/dayOfYear'\n\ndayjs.extend(dayOfYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('DayOfYear get', () => {\n  expect(dayjs().dayOfYear()).toBe(moment().dayOfYear())\n  expect(dayjs('2015-01-01T00:00:00.000').dayOfYear()).toBe(1)\n  expect(dayjs('2015-01-31T00:00:00.000').dayOfYear()).toBe(31)\n  expect(dayjs('2015-02-01T00:00:00.000').dayOfYear()).toBe(32)\n  expect(dayjs('2015-02-28T00:00:00.000').dayOfYear()).toBe(59)\n  expect(dayjs('2015-12-31T00:00:00.000').dayOfYear()).toBe(365)\n})\n\nit('DayOfYear set', () => {\n  expect(dayjs().dayOfYear(4).dayOfYear()).toBe(moment().dayOfYear(4).dayOfYear())\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(4)\n    .dayOfYear()).toBe(4)\n\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(4)\n    .toISOString()).toBe('2015-01-04T00:00:00.000Z')\n\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(32)\n    .dayOfYear()).toBe(32)\n\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(32)\n    .toISOString()).toBe('2015-02-01T00:00:00.000Z')\n\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(365)\n    .dayOfYear()).toBe(365)\n\n  expect(dayjs('2015-01-01T00:00:00.000Z')\n    .dayOfYear(365)\n    .toISOString()).toBe('2015-12-31T00:00:00.000Z')\n})\n"
  },
  {
    "path": "test/plugin/declarations.test.js",
    "content": "import fs from 'fs'\nimport path from 'path'\n\nconst pluginDir = '../../src/plugin'\nconst pluginTypeDir = '../../types/plugin'\n\nit('Plugin declarations', () => {\n  fs.readdirSync(path.join(__dirname, pluginDir))\n    .forEach((l) => {\n      expect(fs.existsSync(path.join(__dirname, pluginTypeDir, `${l}.d.ts`)))\n        .toBe(true)\n    })\n})\n"
  },
  {
    "path": "test/plugin/devHelper.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport customParseFormat from '../../src/plugin/customParseFormat'\nimport devHelper from '../../src/plugin/devHelper'\nimport localeData from '../../src/plugin/localeData'\n\ndayjs.extend(devHelper)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nglobal.console.warn = jest.genMockFunction()\n\n\nit('Warning: passing Year as a Number will be parsed as a Unix timestamp', () => {\n  const consoleSpy = jest.spyOn(console, 'warn')\n  dayjs(2020)\n  expect(consoleSpy).toHaveBeenCalledWith('Guessing you may want to parse the Year 2020, you should pass it as a String 2020, not a Number. Otherwise, 2020 will be treated as a Unix timestamp')\n})\n\nit('Warning Passing Unix timestamp as a String not Number', () => {\n  const consoleSpy = jest.spyOn(console, 'warn')\n  dayjs('1231231231231')\n  expect(consoleSpy).toHaveBeenCalledWith('To parse a Unix timestamp like 1231231231231, you should pass it as a Number. https://day.js.org/docs/en/parse/unix-timestamp-milliseconds')\n})\n\nit('Warning Enable customParseFormat plugin while passing the second format parameter', () => {\n  const consoleSpy = jest.spyOn(console, 'warn')\n  dayjs('2020', 'YYYY')\n  expect(consoleSpy).toHaveBeenCalledWith('To parse a date-time string like 2020 using the given format, you should enable customParseFormat plugin first. https://day.js.org/docs/en/parse/string-format')\n})\n\nit('Warning: Setting locale before loading locale', () => {\n  const consoleSpy = jest.spyOn(console, 'warn')\n  dayjs.locale('zh-cn')\n  expect(consoleSpy).toHaveBeenCalledWith('Guessing you may want to use locale zh-cn, you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs')\n})\n\ndescribe('dev-helper: diff() usage warnings', () => {\n  const diffWarningMsg = 'Invalid usage: diff() requires a valid comparison date as the first argument. https://day.js.org/docs/en/display/difference'\n\n  beforeAll(() => {\n    dayjs.extend(customParseFormat)\n    dayjs.extend(localeData)\n  })\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('warns when diff() is called with no comparison date', () => {\n    const consoleSpy = jest.spyOn(console, 'warn')\n    dayjs('2025-01-10').diff()\n    expect(consoleSpy).toHaveBeenCalledWith(diffWarningMsg)\n  })\n\n  it('warns when diff() is called with just the unit', () => {\n    const consoleSpy = jest.spyOn(console, 'warn')\n    dayjs('2025-01-10').diff('days')\n    expect(consoleSpy).toHaveBeenCalledWith(diffWarningMsg)\n  })\n\n  it('warns when diff() is called with an invalid comparison date (unparsable string)', () => {\n    const consoleSpy = jest.spyOn(console, 'warn')\n    dayjs('2025-01-10').diff('invalid-date', 'days')\n    expect(consoleSpy).toHaveBeenCalledWith(diffWarningMsg)\n  })\n\n  it('does NOT warn when diff() is called with a valid string date', () => {\n    const consoleSpy = jest.spyOn(console, 'warn')\n    dayjs('2025-01-10').diff('2025-01-09', 'days')\n    expect(consoleSpy).not.toHaveBeenCalledWith(diffWarningMsg)\n  })\n\n  it('does NOT warn when diff() is called with a valid Day.js instance', () => {\n    const consoleSpy = jest.spyOn(console, 'warn')\n    dayjs('2025-01-10').diff(dayjs(), 'days')\n    expect(consoleSpy).not.toHaveBeenCalledWith(diffWarningMsg)\n  })\n})\n"
  },
  {
    "path": "test/plugin/duration.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport duration from '../../src/plugin/duration'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport '../../src/locale/fr'\nimport '../../src/locale/es'\n\ndayjs.extend(relativeTime)\ndayjs.extend(duration)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('Creating', () => {\n  it('no argument', () => {\n    expect(dayjs.duration().toISOString()).toBe('P0D')\n    expect(dayjs.duration().asMilliseconds()).toBe(0)\n  })\n  it('milliseconds', () => {\n    expect(dayjs.duration(1, 'ms').toISOString()).toBe('PT0.001S')\n    expect(dayjs.duration(100).toISOString()).toBe('PT0.1S')\n    expect(dayjs.duration(1000).toISOString()).toBe('PT1S')\n  })\n  it('two argument will bubble up to the next', () => {\n    expect(dayjs.duration(59, 'seconds').toISOString()).toBe('PT59S')\n    expect(dayjs.duration(60, 'seconds').toISOString()).toBe('PT1M')\n    expect(dayjs.duration(13213, 'seconds').toISOString()).toBe('PT3H40M13S')\n  })\n  it('two argument will bubble up to the next (negative number)', () => {\n    expect(dayjs.duration(-59, 'seconds').toISOString()).toBe('-PT59S')\n    expect(dayjs.duration(-60, 'seconds').toISOString()).toBe('-PT1M')\n    expect(dayjs.duration(-13213, 'seconds').toISOString()).toBe('-PT3H40M13S')\n  })\n  it('object with float', () => {\n    expect(dayjs.duration({\n      seconds: 1,\n      minutes: 2,\n      hours: 3,\n      days: 4,\n      months: 6,\n      years: 7\n    }).toISOString()).toBe('P7Y6M4DT3H2M1S')\n  })\n  it('object with weeks and float', () => {\n    expect(dayjs.duration({\n      seconds: 1.1,\n      minutes: 2,\n      hours: 3,\n      days: 4,\n      weeks: 5,\n      months: 6,\n      years: 7\n    }).toISOString()).toBe('P7Y6M39DT3H2M1.1S')\n  })\n  it('object with millisecond', () => {\n    expect(dayjs.duration({\n      ms: 1\n    }).toISOString()).toBe('PT0.001S')\n  })\n  it('object with negative millisecond', () => {\n    expect(dayjs.duration({\n      ms: -1\n    }).toISOString()).toBe('-PT0.001S')\n  })\n  it('convert to milliseconds', () => {\n    expect(+dayjs.duration(100)).toBe(100)\n  })\n  it('handles rounding to millisecond precision', () => {\n    expect(dayjs.duration(2 / 3).toISOString()).toBe('PT0.001S')\n  })\n  it('should handle round with millisecond precision when negative', () => {\n    expect(dayjs.duration(1000.5).toISOString()).toBe('PT1.001S')\n    expect(dayjs.duration(-1000.5).toISOString()).toBe('-PT1S')\n  })\n  it('should handle floating point rounding errors', () => {\n    // An example of this is when adding 2 to 0.812 seconds, which is how\n    // the seconds component is calculated in .toISOString().\n    // > 2 + 0.812\n    // 2.8120000000000003\n    expect(dayjs.duration(-2812).toISOString()).toBe('-PT2.812S') // was -PT2.8120000000000003S\n    expect(dayjs.duration(3121632.27382247).toISOString()).toBe('PT52M1.632S') // was PT52M1.6320000000000001S\n    expect(dayjs.duration(7647826.525774224).toISOString()).toBe('PT2H7M27.827S') // was PT2H7M27.826999999999998S\n  })\n})\n\ndescribe('Parse ISO string', () => {\n  it('Full ISO string', () => {\n    expect(dayjs.duration('P7Y6M4DT3H2M1S').toISOString()).toBe('P7Y6M4DT3H2M1S')\n  })\n  it('Part ISO string', () => {\n    expect(dayjs.duration('PT2777H46M40S').toISOString()).toBe('PT2777H46M40S')\n  })\n  it('Formatting missing components', () => {\n    expect(dayjs.duration('PT1H').format('YYYY-MM-DDTHH:mm:ss')).toBe('0000-00-00T01:00:00')\n  })\n  it('ISO string with week', () => {\n    const d = dayjs.duration('P2M3W4D')\n    expect(d.toISOString()).toBe('P2M25D')\n    expect(d.asDays()).toBe(85.83333333333333) // moment 86, count 2M as 61 days\n    expect(d.asWeeks()).toBe(12.261904761904763) // moment 12.285714285714286\n    expect(d.asMonths()).toBe(2.8219178082191783) // moment 2.8213721020965523\n  })\n  it('Invalid ISO string', () => {\n    expect(dayjs.duration('Invalid').toISOString()).toBe('P0D')\n  })\n})\n\nit('Is duration', () => {\n  expect(dayjs.isDuration(dayjs.duration())).toBe(true)\n  expect(dayjs.isDuration(dayjs.duration(1))).toBe(true)\n  expect(dayjs.isDuration(dayjs())).toBe(false)\n  expect(dayjs.isDuration({})).toBe(false)\n  expect(dayjs.isDuration()).toBe(false)\n})\n\nit('toJSON', () => {\n  expect(JSON.stringify({\n    postDuration: dayjs.duration(5, 'minutes')\n  })).toBe('{\"postDuration\":\"PT5M\"}')\n})\n\ndescribe('Humanize', () => {\n  it('Humaniz', () => {\n    expect(dayjs.duration(1, 'minutes').humanize()).toBe('a minute')\n    expect(dayjs.duration(2, 'minutes').humanize()).toBe('2 minutes')\n    expect(dayjs.duration(24, 'hours').humanize()).toBe('a day')\n    expect(dayjs.duration(1, 'minutes').humanize(true)).toBe('in a minute')\n    expect(dayjs.duration(-1, 'minutes').humanize(true)).toBe('a minute ago')\n  })\n\n  it('Locale', () => {\n    expect(dayjs.duration(1, 'minutes').humanize(true)).toBe('in a minute')\n    expect(dayjs.duration(1, 'minutes').locale('fr').humanize(true)).toBe('dans une minute')\n    expect(dayjs.duration(1, 'minutes').locale('es').humanize(true)).toBe('en un minuto')\n  })\n  it('Global Locale', () => {\n    dayjs.locale('en')\n    expect(dayjs.duration(1, 'minutes').humanize(true)).toBe('in a minute')\n    dayjs.locale('fr')\n    expect(dayjs.duration(1, 'minutes').humanize(true)).toBe('dans une minute')\n    dayjs.locale('es')\n    expect(dayjs.duration(1, 'minutes').humanize(true)).toBe('en un minuto')\n    dayjs.locale('en')\n  })\n})\n\ndescribe('Clone', () => {\n  it('Locale clone', () => {\n    const d = dayjs.duration(1, 'minutes').locale('fr')\n    const r = 'dans une minute'\n    expect(d.humanize(true)).toBe(r)\n    expect(d.clone().humanize(true)).toBe(r)\n  })\n})\n\ndescribe('Milliseconds', () => {\n  expect(dayjs.duration(500).milliseconds()).toBe(500)\n  expect(dayjs.duration(1500).milliseconds()).toBe(500)\n  expect(dayjs.duration(15000).milliseconds()).toBe(0)\n  expect(dayjs.duration(500).asMilliseconds()).toBe(500)\n  expect(dayjs.duration(1500).asMilliseconds()).toBe(1500)\n  expect(dayjs.duration(15000).asMilliseconds()).toBe(15000)\n})\n\ndescribe('Milliseconds', () => {\n  describe('Positive number', () => {\n    expect(dayjs.duration(500).milliseconds()).toBe(500)\n    expect(dayjs.duration(1500).milliseconds()).toBe(500)\n    expect(dayjs.duration(15000).milliseconds()).toBe(0)\n    expect(dayjs.duration(500).asMilliseconds()).toBe(500)\n    expect(dayjs.duration(1500).asMilliseconds()).toBe(1500)\n    expect(dayjs.duration(15000).asMilliseconds()).toBe(15000)\n  })\n\n  describe('Negative number', () => {\n    expect(dayjs.duration(-500).milliseconds()).toBe(-500)\n    expect(dayjs.duration(-1500).milliseconds()).toBe(-500)\n    expect(dayjs.duration(-15000).milliseconds()).toBe(0)\n    expect(dayjs.duration(-500).asMilliseconds()).toBe(-500)\n    expect(dayjs.duration(-1500).asMilliseconds()).toBe(-1500)\n    expect(dayjs.duration(-15000).asMilliseconds()).toBe(-15000)\n  })\n})\n\ndescribe('Add', () => {\n  const a = dayjs.duration(1, 'days')\n  const b = dayjs.duration(2, 'days')\n  expect(a.add(b).days()).toBe(3)\n  expect(a.add(1, 'days').days()).toBe(2)\n  expect(a.add({ days: 5 }).days()).toBe(6)\n})\n\ndescribe('Add to a dayjs()', () => {\n  const a = dayjs()\n  const b = dayjs.duration({ hours: 7, minutes: 10 })\n  expect(a.add(b)).toEqual(a.add(7, 'hours').add(10, 'minutes'))\n})\n\ntest('Add duration', () => {\n  const a = dayjs('2020-10-01')\n  const days = dayjs.duration(2, 'days')\n  expect(a.add(days).format('YYYY-MM-DD')).toBe('2020-10-03')\n\n  const b = dayjs('2023-02-01 00:00:00')\n  const p = dayjs.duration('P1Y1M1DT1H1M1S')\n  expect(b.add(p).format('YYYY-MM-DD HH:mm:ss')).toBe('2024-03-02 01:01:01')\n})\n\ndescribe('Subtract', () => {\n  const a = dayjs.duration(3, 'days')\n  const b = dayjs.duration(2, 'days')\n  expect(a.subtract(b).days()).toBe(1)\n})\n\ntest('Subtract duration', () => {\n  const a = dayjs('2020-10-20')\n  const days = dayjs.duration(2, 'days')\n  expect(a.subtract(days).format('YYYY-MM-DD')).toBe('2020-10-18')\n\n  const b = dayjs('2023-03-02 02:02:02')\n  const p = dayjs.duration('P1Y1M1DT1H1M1S')\n  expect(b.subtract(p).format('YYYY-MM-DD HH:mm:ss')).toBe('2022-02-01 01:01:01')\n})\n\ndescribe('Seconds', () => {\n  expect(dayjs.duration(500).seconds()).toBe(0)\n  expect(dayjs.duration(1500).seconds()).toBe(1)\n  expect(dayjs.duration(15000).seconds()).toBe(15)\n  expect(dayjs.duration(61000).seconds()).toBe(1) // 1 minute 1 second\n  expect(dayjs.duration(500).asSeconds()).toBe(0.5)\n  expect(dayjs.duration(1500).asSeconds()).toBe(1.5)\n  expect(dayjs.duration(15000).asSeconds()).toBe(15)\n})\n\ndescribe('Minutes', () => {\n  expect(dayjs.duration(100000).minutes()).toBe(1)\n  expect(dayjs.duration(61000).minutes()).toBe(1) // 1 minute 1 second\n  expect(dayjs.duration(100000).asMinutes().toFixed(2)).toBe('1.67')\n})\n\ndescribe('Hours', () => {\n  expect(dayjs.duration(10000000).hours()).toBe(2)\n  expect(dayjs.duration(10000000).asHours().toFixed(2)).toBe('2.78')\n})\n\ndescribe('Days', () => {\n  it('positive number', () => {\n    expect(dayjs.duration(100000000).days()).toBe(1)\n    expect(dayjs.duration(100000000).asDays().toFixed(2)).toBe('1.16')\n  })\n\n  it('negative number', () => {\n    expect(dayjs.duration(-1).days()).toBe(0)\n    expect(dayjs.duration(-86399999).asDays()).toBeCloseTo(-0.999999, 4)\n  })\n})\n\ndescribe('Weeks', () => {\n  expect(dayjs.duration(1000000000).weeks()).toBe(1)\n  expect(dayjs.duration(1000000000).asWeeks().toFixed(2)).toBe('1.65')\n})\n\ndescribe('Month', () => {\n  expect(dayjs.duration(10000000000).months()).toBe(3)\n  expect(dayjs.duration({ months: 3 }).asMonths()).toBe(3)\n})\n\ndescribe('Years', () => {\n  expect(dayjs.duration(100000000000).years()).toBe(3)\n  expect(dayjs.duration(100000000000).asYears().toFixed(2)).toBe('3.17')\n})\n\ndescribe('prettyUnit', () => {\n  const d = dayjs.duration(2, 's')\n  expect(d.toISOString()).toBe('PT2S')\n  expect(d.as('seconds')).toBe(2)\n  expect(d.get('s')).toBe(2)\n  expect(dayjs.duration({\n    M: 12,\n    m: 12\n  }).toISOString()).toBe('P12MT12M')\n})\n\ndescribe('Format', () => {\n  test('no formatStr', () => {\n    const d = dayjs.duration(15, 'seconds')\n      .add(13, 'hours')\n      .add(35, 'minutes')\n      .add(16, 'days')\n      .add(10, 'months')\n      .add(22, 'years')\n    expect(d.format()).toBe('0022-10-16T13:35:15')\n  })\n\n  test('with formatStr for all tokens', () => {\n    const d = dayjs.duration(1, 'seconds')\n      .add(8, 'hours')\n      .add(5, 'minutes')\n      .add(6, 'days')\n      .add(9, 'months')\n      .add(2, 'years')\n      .add(10, 'milliseconds')\n    expect(d.format('Y/YY.YYYYTESTM:MM:D:DD:H:HH:m:mm:s:ss:SSS'))\n      .toBe('2/02.0002TEST9:09:6:06:8:08:5:05:1:01:010')\n  })\n\n  test('formats YYY as YY + Y', () => {\n    const d = dayjs.duration(2, 'years')\n    expect(d.format('YYY')).toBe('022')\n  })\n})\n"
  },
  {
    "path": "test/plugin/isBetween.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src/index'\nimport isBetween from '../../src/plugin/isBetween/index'\n\ndayjs.extend(isBetween)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ntest('bounds can be swapped', () => {\n  expect(dayjs('2018-01-01').isBetween(dayjs('2017-12-31'), dayjs('2018-01-02'))).toBeTruthy()\n  expect(dayjs('2018-01-01').isBetween(dayjs('2018-01-02'), dayjs('2017-12-31'))).toBeTruthy()\n})\n\ntest('bounds can be swapped with inclusivity', () => {\n  expect(dayjs('2018-01-01').isBetween(dayjs('2017-12-31'), dayjs('2018-01-01'), null, '[]')).toBeTruthy()\n  expect(dayjs('2018-01-01').isBetween(dayjs('2018-01-01'), dayjs('2017-12-31'), null, '[]')).toBeTruthy()\n})\n\ntest('is between without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'year is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2013, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'year is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10))\n  )).toBe(true, 'year is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'month is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 5, 2, 3, 4, 5, 10))\n  )).toBe(false, 'month is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 4, 2, 3, 4, 5, 10))\n  )).toBe(true, 'month is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'day is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 4, 3, 4, 5, 10))\n  )).toBe(false, 'day is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 3, 3, 4, 5, 10))\n  )).toBe(true, 'day is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 1, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'hour is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 5, 4, 5, 10))\n  )).toBe(false, 'hour is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 4, 4, 5, 10))\n  )).toBe(true, 'hour is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 6, 5, 10))\n  )).toBe(false, 'minute is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 2, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'minute is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 5, 5, 10))\n  )).toBe(true, 'minute is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 7, 10))\n  )).toBe(false, 'second is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 3, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'second is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 4, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 6, 10))\n  )).toBe(true, 'second is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 12))\n  )).toBe(false, 'millisecond is later')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 8)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  )).toBe(false, 'millisecond is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 11))\n  )).toBe(true, 'millisecond is between')\n\n  expect(m.isBetween(m, m)).toBe(false, 'moments are not between themselves')\n  expect(+m).toEqual(+mCopy, 'isBetween second should not change moment')\n})\n\ntest('is between year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)),\n    'year'\n  )).toBe(false, 'year match')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)),\n    'years'\n  )).toBe(true, 'plural should work')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)),\n    'year'\n  )).toBe(true, 'year is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2013, 5, 6, 7, 8, 9, 10)),\n    'year'\n  )).toBe(false, 'year is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)),\n    'year'\n  )).toBe(false, 'year is later')\n\n  expect(m.isBetween(m, 'year')).toBe(false, 'same moments are not between the same year')\n  expect(+m).toEqual(+mCopy, 'isBetween year should not change moment')\n})\n\ntest('is between month', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)),\n    'month'\n  )).toBe(false, 'month match')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 0, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)),\n    'months'\n  )).toBe(true, 'plural should work')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 0, 31, 23, 59, 59, 999)),\n    dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)),\n    'month'\n  )).toBe(true, 'month is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)),\n    'month'\n  )).toBe(false, 'month is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 11, 6, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)),\n    'month'\n  )).toBe(false, 'month is later')\n\n  expect(m.isBetween(m, 'month')).toBe(false, 'same moments are not between the same month')\n  expect(+m).toEqual(+mCopy, 'isBetween month should not change moment')\n})\n\ntest('is between day', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    'day'\n  )).toBe(false, 'day match')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 1, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 3, 7, 8, 9, 10)),\n    'days'\n  )).toBe(true, 'plural should work')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 1, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 3, 7, 8, 9, 10)),\n    'day'\n  )).toBe(true, 'day is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 4, 7, 8, 9, 10)),\n    'day'\n  )).toBe(false, 'day is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 1, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    'day'\n  )).toBe(false, 'day is later')\n\n  expect(m.isBetween(m, 'day')).toBe(false, 'same moments are not between the same day')\n  expect(+m).toEqual(+mCopy, 'isBetween day should not change moment')\n})\n\ntest('is between hour', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 5, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 9, 9, 10)), 'hour'\n  ))\n    .toBe(false, 'hour match')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 1, 59, 59, 999)),\n    dayjs(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hours'\n  ))\n    .toBe(true, 'plural should work')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 2, 59, 59, 999)),\n    dayjs(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'\n  ))\n    .toBe(true, 'hour is between')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'\n  ))\n    .toBe(false, 'hour is earlier')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'\n  ))\n    .toBe(false, 'hour is later')\n  expect(m.isBetween(m, 'hour'))\n    .toBe(false, 'same moments are not between the same hour')\n  expect(+m)\n    .toEqual(+mCopy, 'isBetween hour should not change moment')\n})\n\ntest('is between minute', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'\n  ))\n    .toBe(false, 'minute match')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 3, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minutes'\n  ))\n    .toBe(true, 'plural should work')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 3, 59, 999)),\n    dayjs(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'\n  ))\n    .toBe(true, 'minute is between')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 5, 0, 0)),\n    dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'minute'\n  ))\n    .toBe(false, 'minute is earlier')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 2, 9, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'\n  ))\n    .toBe(false, 'minute is later')\n  expect(m.isBetween(m, 'minute'))\n    .toBe(false, 'same moments are not between the same minute')\n  expect(+m)\n    .toEqual(+mCopy, 'isBetween minute should not change moment')\n})\n\ntest('is between second', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'\n  ))\n    .toBe(false, 'second match')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 4, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 6, 10)), 'seconds'\n  ))\n    .toBe(true, 'plural should work')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 4, 999)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'\n  ))\n    .toBe(true, 'second is between')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 6, 0)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 7, 10)), 'second'\n  ))\n    .toBe(false, 'second is earlier')\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 3, 10)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'\n  ))\n    .toBe(false, 'second is later')\n  expect(m.isBetween(m, 'second')).toBe(false, 'same moments are not between the same second')\n  expect(+m).toEqual(+mCopy, 'isBetween second should not change moment')\n})\n\ntest('is between millisecond', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 6)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 6)),\n    'millisecond'\n  )).toBe(false, 'millisecond match')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 5)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 7)),\n    'milliseconds'\n  )).toBe(true, 'plural should work')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 5)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 7)),\n    'millisecond'\n  )).toBe(true, 'millisecond is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 7)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)),\n    'millisecond'\n  )).toBe(false, 'millisecond is earlier')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 4)),\n    dayjs(new Date(2011, 1, 2, 3, 4, 5, 6)),\n    'millisecond'\n  )).toBe(false, 'millisecond is later')\n\n  expect(m.isBetween(m, 'millisecond')).toBe(false, 'same moments are not between the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isBetween millisecond should not change moment')\n})\n\ntest('is between without units inclusivity', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '()'\n  )).toBe(false, 'start and end are excluded, start is equal to dayjs')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '()'\n  )).toBe(false, 'start and end are excluded, end is equal to dayjs')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '()'\n  )).toBe(true, 'start and end are excluded, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    null,\n    '()'\n  )).toBe(false, 'start and end are excluded, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '()'\n  )).toBe(false, 'start and end are excluded, should fail on same start/end date.')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '(]'\n  )).toBe(false, 'start is excluded and end is included should fail on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '(]'\n  )).toBe(true, 'start is excluded and end is included should succeed on end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '(]'\n  )).toBe(true, 'start is excluded and end is included, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    null,\n    '(]'\n  )).toBe(false, 'start is excluded and end is included, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '(]'\n  )).toBe(false, 'start is excluded and end is included, should fail on same start/end date.')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[)'\n  )).toBe(true, 'start is included and end is excluded should succeed on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[)'\n  )).toBe(false, 'start is included and end is excluded should fail on same end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[)'\n  )).toBe(true, 'start is included and end is excluded, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[)'\n  )).toBe(false, 'start is included and end is excluded, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[)'\n  )).toBe(false, 'start is included and end is excluded, should fail on same end and start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[]'\n  )).toBe(true, 'start and end inclusive should succeed on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[]'\n  )).toBe(true, 'start and end inclusive should succeed on same end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[]'\n  )).toBe(true, 'start and end inclusive, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[]'\n  )).toBe(false, 'start and end inclusive, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    null,\n    '[]'\n  )).toBe(true, 'start and end inclusive, should handle same end and start date')\n\n  expect(+m).toEqual(+mCopy, 'isBetween millisecond should not change moment')\n})\n\ntest('is between milliseconds inclusivity', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds'\n  )).toBe(true, 'options, no inclusive')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '()'\n  )).toBe(false, 'start and end are excluded, start is equal to dayjs')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '()'\n  )).toBe(false, 'start and end are excluded, end is equal to dayjs')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '()'\n  )).toBe(true, 'start and end are excluded, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '()'\n  )).toBe(false, 'start and end are excluded, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '()'\n  )).toBe(false, 'start and end are excluded, should fail on same start/end date.')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '(]'\n  )).toBe(false, 'start is excluded and end is included should fail on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '(]'\n  )).toBe(true, 'start is excluded and end is included should succeed on end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '(]'\n  )).toBe(true, 'start is excluded and end is included, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '(]'\n  )).toBe(false, 'start is excluded and end is included, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '(]'\n  )).toBe(false, 'start is excluded and end is included, should fail on same start/end date.')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[)'\n  )).toBe(true, 'start is included and end is excluded should succeed on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[)'\n  )).toBe(false, 'start is included and end is excluded should fail on same end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[)'\n  )).toBe(true, 'start is included and end is excluded, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[)'\n  )).toBe(false, 'start is included and end is excluded, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[)'\n  )).toBe(false, 'start is included and end is excluded, should fail on same end and start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[]'\n  )).toBe(true, 'start and end inclusive should succeed on same start date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[]'\n  )).toBe(true, 'start and end inclusive should succeed on same end date')\n\n  expect(m.isBetween(\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[]'\n  )).toBe(true, 'start and end inclusive, is between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2009, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[]'\n  )).toBe(false, 'start and end inclusive, is not between')\n\n  expect(m.isBetween(\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)),\n    'milliseconds',\n    '[]'\n  )).toBe(true, 'start and end inclusive, should handle same end and start date')\n\n  expect(+m).toEqual(+mCopy, 'isBetween second should not change moment')\n})\n"
  },
  {
    "path": "test/plugin/isLeapYear.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isLeapYear from '../../src/plugin/isLeapYear'\n\ndayjs.extend(isLeapYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('IsLeapYear', () => {\n  expect(dayjs('20000101').isLeapYear()).toBe(true)\n  expect(dayjs('2100-01-01').isLeapYear()).toBe(false)\n})\n"
  },
  {
    "path": "test/plugin/isMoment.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isMoment from '../../src/plugin/isMoment'\n\ndayjs.extend(isMoment)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('IsLeapYear', () => {\n  expect(dayjs.isMoment(dayjs())).toBe(true)\n  expect(dayjs.isMoment(new Date())).toBe(false)\n})\n"
  },
  {
    "path": "test/plugin/isSameOrAfter.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isSameOrAfter from '../../src/plugin/isSameOrAfter'\n\ndayjs.extend(isSameOrAfter)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ntest('is same or after year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year')).toBe(true, 'exact start of year')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'exact end of year')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year')).toBe(false, 'start of next year')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'end of previous year')\n  expect(m.isSameOrAfter(m, 'year')).toBe(true, 'same moments are in the same year')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter year should not change moment')\n})\n\ntest('is same or after without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 3, 2, 3, 5, 5, 10)))).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 3, 2, 3, 3, 5, 10)))).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)))).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)))).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)))).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)))).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)))).toBe(false, 'hour is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)))).toBe(true, 'hour is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)))).toBe(false, 'minute is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)))).toBe(true, 'minute is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)))).toBe(false, 'second is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 11)))).toBe(true, 'second is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)))).toBe(true, 'millisecond match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 11)))).toBe(false, 'millisecond is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)))).toBe(true, 'millisecond is earlier')\n  expect(m.isSameOrAfter(m)).toBe(true, 'moments are the same as themselves')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter second should not change moment')\n})\n\ntest('is same or after without date', () => {\n  const past = dayjs().subtract(1, 'day')\n  const future = dayjs().add(1, 'day')\n  expect(past.isSameOrAfter()).toBe(false, 'past is before now')\n  expect(future.isSameOrAfter()).toBe(true, 'future is not before now')\n})\n\ntest('is same or after month', () => {\n  const m = dayjs(new Date(2011, 2, 3, 4, 5, 6, 7))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month')).toBe(true, 'exact start of month')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month')).toBe(true, 'exact end of month')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month')).toBe(false, 'start of next month')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month')).toBe(true, 'end of previous month')\n  expect(m.isSameOrAfter(m, 'month')).toBe(true, 'same moments are in the same month')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter month should not change moment')\n})\n\ntest('is same or after day', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'day match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day')).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day')).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day')).toBe(true, 'exact start of day')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day')).toBe(true, 'exact end of day')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day')).toBe(false, 'start of next day')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day')).toBe(true, 'end of previous day')\n  expect(m.isSameOrAfter(m, 'day')).toBe(true, 'same moments are in the same day')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter day should not change moment')\n})\n\ntest('is same or after hour', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'hour match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour')).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour')).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour')).toBe(false, 'hour is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour')).toBe(true, 'hour is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour')).toBe(true, 'exact start of hour')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour')).toBe(true, 'exact end of hour')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour')).toBe(false, 'start of next hour')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour')).toBe(true, 'end of previous hour')\n  expect(m.isSameOrAfter(m, 'hour')).toBe(true, 'same moments are in the same hour')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter hour should not change moment')\n})\n\ntest('is same or after minute', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'minute match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute')).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute')).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute')).toBe(false, 'hour is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute')).toBe(true, 'hour is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute')).toBe(false, 'minute is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute')).toBe(true, 'minute is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute')).toBe(true, 'exact start of minute')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute')).toBe(true, 'exact end of minute')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute')).toBe(false, 'start of next minute')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute')).toBe(true, 'end of previous minute')\n  expect(m.isSameOrAfter(m, 'minute')).toBe(true, 'same moments are in the same minute')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter minute should not change moment')\n})\n\ntest('is same or after second', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'second match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second')).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second')).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second')).toBe(false, 'hour is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second')).toBe(true, 'hour is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second')).toBe(false, 'minute is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second')).toBe(true, 'minute is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second')).toBe(false, 'second is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second')).toBe(true, 'second is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second')).toBe(true, 'exact start of second')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second')).toBe(true, 'exact end of second')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second')).toBe(false, 'start of next second')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second')).toBe(true, 'end of previous second')\n  expect(m.isSameOrAfter(m, 'second')).toBe(true, 'same moments are in the same second')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter second should not change moment')\n})\n\ntest('is same or after millisecond', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'millisecond match')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds')).toBe(true, 'plural should work')\n  expect(m.isSameOrAfter(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'year is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'month is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'day is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond')).toBe(true, 'day is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond')).toBe(false, 'hour is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond')).toBe(true, 'hour is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond')).toBe(false, 'minute is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond')).toBe(true, 'minute is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond')).toBe(false, 'second is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond')).toBe(true, 'second is earlier')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond')).toBe(false, 'millisecond is later')\n  expect(m.isSameOrAfter(dayjs(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond')).toBe(true, 'millisecond is earlier')\n  expect(m.isSameOrAfter(m, 'millisecond')).toBe(true, 'same moments are in the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isSameOrAfter millisecond should not change moment')\n})\n\ntest('is same or after with invalid moments', () => {\n  const m = dayjs()\n  const invalid = dayjs(null)\n  expect(invalid.isSameOrAfter(invalid)).toBe(false, 'invalid moments are not considered equal')\n  expect(m.isSameOrAfter(invalid)).toBe(false, 'valid moment is not after invalid moment')\n  expect(invalid.isSameOrAfter(m)).toBe(false, 'invalid moment is not after valid moment')\n  expect(m.isSameOrAfter(invalid, 'year')).toBe(false, 'invalid moment year')\n  expect(m.isSameOrAfter(invalid, 'month')).toBe(false, 'invalid moment month')\n  expect(m.isSameOrAfter(invalid, 'day')).toBe(false, 'invalid moment day')\n  expect(m.isSameOrAfter(invalid, 'hour')).toBe(false, 'invalid moment hour')\n  expect(m.isSameOrAfter(invalid, 'minute')).toBe(false, 'invalid moment minute')\n  expect(m.isSameOrAfter(invalid, 'second')).toBe(false, 'invalid moment second')\n  expect(m.isSameOrAfter(invalid, 'milliseconds')).toBe(false, 'invalid moment milliseconds')\n})\n"
  },
  {
    "path": "test/plugin/isSameOrBefore.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isSameOrBefore from '../../src/plugin/isSameOrBefore'\n\ndayjs.extend(isSameOrBefore)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ntest('is same or before without units', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 3, 2, 3, 5, 5, 10)))).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 3, 2, 3, 3, 5, 10)))).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)))).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)))).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)))).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 1, 3, 4, 5, 10)))).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)))).toBe(true, 'hour is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 2, 4, 5, 10)))).toBe(false, 'hour is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)))).toBe(true, 'minute is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)))).toBe(false, 'minute is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)))).toBe(true, 'second is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 11)))).toBe(false, 'second is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)))).toBe(true, 'millisecond match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 11)))).toBe(true, 'millisecond is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 9)))).toBe(false, 'millisecond is earlier')\n  expect(m.isSameOrBefore(m)).toBe(true, 'moments are the same as themselves')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore second should not change moment')\n})\n\ntest('is same or before without date', () => {\n  const past = dayjs().subtract(1, 'day')\n  const future = dayjs().add(1, 'day')\n  expect(past.isSameOrBefore()).toBe(true, 'past is before now')\n  expect(future.isSameOrBefore()).toBe(false, 'future is not before now')\n})\n\ntest('is same or before year', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year')).toBe(true, 'exact start of year')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year')).toBe(true, 'exact end of year')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year')).toBe(true, 'start of next year')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year')).toBe(false, 'end of previous year')\n  expect(m.isSameOrBefore(m, 'year')).toBe(true, 'same moments are in the same year')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore year should not change moment')\n})\n\ntest('is same or before month', () => {\n  const m = dayjs(new Date(2011, 2, 3, 4, 5, 6, 7))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month')).toBe(true, 'exact start of month')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month')).toBe(true, 'exact end of month')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month')).toBe(true, 'start of next month')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month')).toBe(false, 'end of previous month')\n  expect(m.isSameOrBefore(m, 'month')).toBe(true, 'same moments are in the same month')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore month should not change moment')\n})\n\ntest('is same or before day', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'day match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day')).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day')).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day')).toBe(true, 'exact start of day')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day')).toBe(true, 'exact end of day')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day')).toBe(true, 'start of next day')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day')).toBe(false, 'end of previous day')\n  expect(m.isSameOrBefore(m, 'day')).toBe(true, 'same moments are in the same day')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore day should not change moment')\n})\n\ntest('is same or before hour', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'hour match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour')).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour')).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour')).toBe(true, 'hour is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour')).toBe(false, 'hour is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour')).toBe(true, 'exact start of hour')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour')).toBe(true, 'exact end of hour')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour')).toBe(true, 'start of next hour')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour')).toBe(false, 'end of previous hour')\n  expect(m.isSameOrBefore(m, 'hour')).toBe(true, 'same moments are in the same hour')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore hour should not change moment')\n})\n\ntest('is same or before minute', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'minute match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute')).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute')).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute')).toBe(true, 'hour is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute')).toBe(false, 'hour is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute')).toBe(true, 'minute is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute')).toBe(false, 'minute is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute')).toBe(true, 'exact start of minute')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute')).toBe(true, 'exact end of minute')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute')).toBe(true, 'start of next minute')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute')).toBe(false, 'end of previous minute')\n  expect(m.isSameOrBefore(m, 'minute')).toBe(true, 'same moments are in the same minute')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore minute should not change moment')\n})\n\ntest('is same or before second', () => {\n  const m = dayjs(new Date(2011, 1, 2, 3, 4, 5, 6))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'second match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second')).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second')).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second')).toBe(true, 'hour is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second')).toBe(false, 'hour is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second')).toBe(true, 'minute is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second')).toBe(false, 'minute is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second')).toBe(true, 'second is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second')).toBe(false, 'second is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second')).toBe(true, 'exact start of second')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second')).toBe(true, 'exact end of second')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second')).toBe(true, 'start of next second')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second')).toBe(false, 'end of previous second')\n  expect(m.isSameOrBefore(m, 'second')).toBe(true, 'same moments are in the same second')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore second should not change moment')\n})\n\ntest('is same or before millisecond', () => {\n  const m = dayjs(new Date(2011, 3, 2, 3, 4, 5, 10))\n  const mCopy = dayjs(m)\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'millisecond match')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds')).toBe(true, 'plural should work')\n  expect(m.isSameOrBefore(dayjs(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'year is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'year is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'month is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond')).toBe(false, 'month is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond')).toBe(true, 'day is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond')).toBe(false, 'day is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond')).toBe(true, 'hour is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond')).toBe(false, 'hour is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond')).toBe(true, 'minute is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond')).toBe(false, 'minute is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond')).toBe(true, 'second is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond')).toBe(false, 'second is earlier')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond')).toBe(true, 'millisecond is later')\n  expect(m.isSameOrBefore(dayjs(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond')).toBe(false, 'millisecond is earlier')\n  expect(m.isSameOrBefore(m, 'millisecond')).toBe(true, 'same moments are in the same millisecond')\n  expect(+m).toEqual(+mCopy, 'isSameOrBefore millisecond should not change moment')\n})\n\ntest('is same with invalid moments', () => {\n  const m = dayjs()\n  const invalid = dayjs(null)\n  expect(invalid.isSameOrBefore(invalid)).toBe(false, 'invalid moments are not considered equal')\n  expect(m.isSameOrBefore(invalid)).toBe(false, 'valid moment is not before invalid moment')\n  expect(invalid.isSameOrBefore(m)).toBe(false, 'invalid moment is not before valid moment')\n  expect(m.isSameOrBefore(invalid, 'year')).toBe(false, 'invalid moment year')\n  expect(m.isSameOrBefore(invalid, 'month')).toBe(false, 'invalid moment month')\n  expect(m.isSameOrBefore(invalid, 'day')).toBe(false, 'invalid moment day')\n  expect(m.isSameOrBefore(invalid, 'hour')).toBe(false, 'invalid moment hour')\n  expect(m.isSameOrBefore(invalid, 'minute')).toBe(false, 'invalid moment minute')\n  expect(m.isSameOrBefore(invalid, 'second')).toBe(false, 'invalid moment second')\n  expect(m.isSameOrBefore(invalid, 'milliseconds')).toBe(false, 'invalid moment milliseconds')\n})\n"
  },
  {
    "path": "test/plugin/isToday.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isToday from '../../src/plugin/isToday'\n\ndayjs.extend(isToday)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('is today', () => {\n  expect(dayjs(new Date()).isToday()).toBeTruthy()\n  expect(dayjs('2017-01-01').isToday()).toBeFalsy()\n})\n"
  },
  {
    "path": "test/plugin/isTomorrow.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isTomorrow from '../../src/plugin/isTomorrow'\n\ndayjs.extend(isTomorrow)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('is tomorrow', () => {\n  expect(dayjs().add(1, 'day').isTomorrow()).toBeTruthy()\n  expect(dayjs('2017-01-01').isTomorrow('2019-01-01', '2017-01-01')).toBeFalsy()\n})\n"
  },
  {
    "path": "test/plugin/isYesterday.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isYesterday from '../../src/plugin/isYesterday'\n\ndayjs.extend(isYesterday)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('is yesterday', () => {\n  expect(dayjs().subtract(1, 'day').isYesterday()).toBeTruthy()\n  expect(dayjs('2017-01-01').isYesterday()).toBeFalsy()\n})\n"
  },
  {
    "path": "test/plugin/isoWeek.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport isoWeek from '../../src/plugin/isoWeek'\nimport utc from '../../src/plugin/utc'\n\ndayjs.extend(isoWeek)\ndayjs.extend(utc)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('get isoWeek', () => {\n  expect(dayjs().isoWeek()).toBe(moment().isoWeek())\n})\n\nit('set isoWeek', () => {\n  expect(dayjs().isoWeek(1).valueOf()).toBe(moment().isoWeek(1).valueOf())\n  expect(dayjs().isoWeek(52).valueOf()).toBe(moment().isoWeek(52).valueOf())\n})\n\nit('get isoWeekYear', () => {\n  expect(dayjs().isoWeekYear()).toBe(moment().isoWeekYear())\n})\n\nit('startOf/endOf isoWeek', () => {\n  const ISOWEEK = 'isoWeek'\n  expect(dayjs().startOf(ISOWEEK).valueOf()).toBe(moment().startOf(ISOWEEK).valueOf())\n  expect(dayjs().endOf(ISOWEEK).valueOf()).toBe(moment().endOf(ISOWEEK).valueOf())\n})\n\nit('isoWeekday', () => {\n  expect(dayjs().isoWeekday()).toBe(moment().isoWeekday())\n  expect(dayjs('20200301').isoWeekday(1).valueOf()).toBe(moment('20200301').isoWeekday(1).valueOf()) // Sunday this.day() -> 0\n  for (let i = 0; i < 7; i += 1) {\n    expect(dayjs().add(i, 'day').isoWeekday()).toBe(moment().add(i, 'day').isoWeekday())\n    expect(dayjs().isoWeekday(i).valueOf()).toBe(moment().isoWeekday(i).valueOf())\n    expect(dayjs().add(1, 'day').isoWeekday(i).valueOf()).toBe(moment().add(1, 'day').isoWeekday(i).valueOf())\n  }\n})\n\nit('isoWeek of year', () => {\n  expect(dayjs().isoWeek(1).isoWeek()).toBe(1)\n  expect(dayjs().isoWeek(27).isoWeek()).toBe(27)\n\n\n  expect(dayjs('20191223').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191223').isoWeek()).toBe(52)\n  expect(dayjs('20191224').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191224').isoWeek()).toBe(52)\n  expect(dayjs('20191225').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191225').isoWeek()).toBe(52)\n  expect(dayjs('20191226').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191226').isoWeek()).toBe(52)\n  expect(dayjs('20191227').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191227').isoWeek()).toBe(52)\n  expect(dayjs('20191228').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191228').isoWeek()).toBe(52)\n  expect(dayjs('20191229').isoWeekYear()).toBe(2019)\n  expect(dayjs('20191229').isoWeek()).toBe(52)\n\n  expect(dayjs('20191230').isoWeekYear()).toBe(2020)\n  expect(dayjs('20191230').isoWeek()).toBe(1)\n  expect(dayjs('20191231').isoWeekYear()).toBe(2020)\n  expect(dayjs('20191231').isoWeek()).toBe(1)\n  expect(dayjs('20200101').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200101').isoWeek()).toBe(1)\n  expect(dayjs('20200102').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200102').isoWeek()).toBe(1)\n  expect(dayjs('20200103').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200103').isoWeek()).toBe(1)\n  expect(dayjs('20200104').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200104').isoWeek()).toBe(1)\n  expect(dayjs('20200105').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200105').isoWeek()).toBe(1)\n\n  expect(dayjs('20200106').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200106').isoWeek()).toBe(2)\n  expect(dayjs('20200107').isoWeekYear()).toBe(2020)\n  expect(dayjs('20200107').isoWeek()).toBe(2)\n\n\n  expect(dayjs('20201223').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201223').isoWeek()).toBe(52)\n  expect(dayjs('20201224').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201224').isoWeek()).toBe(52)\n  expect(dayjs('20201225').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201225').isoWeek()).toBe(52)\n  expect(dayjs('20201226').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201226').isoWeek()).toBe(52)\n  expect(dayjs('20201227').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201227').isoWeek()).toBe(52)\n\n  expect(dayjs('20201228').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201228').isoWeek()).toBe(53)\n  expect(dayjs('20201229').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201229').isoWeek()).toBe(53)\n  expect(dayjs('20201230').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201230').isoWeek()).toBe(53)\n  expect(dayjs('20201231').isoWeekYear()).toBe(2020)\n  expect(dayjs('20201231').isoWeek()).toBe(53)\n  expect(dayjs('20210101').isoWeekYear()).toBe(2020)\n  expect(dayjs('20210101').isoWeek()).toBe(53)\n  expect(dayjs('20210102').isoWeekYear()).toBe(2020)\n  expect(dayjs('20210102').isoWeek()).toBe(53)\n  expect(dayjs('20210103').isoWeekYear()).toBe(2020)\n  expect(dayjs('20210103').isoWeek()).toBe(53)\n\n  expect(dayjs('20210104').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210104').isoWeek()).toBe(1)\n  expect(dayjs('20210105').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210105').isoWeek()).toBe(1)\n  expect(dayjs('20210106').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210106').isoWeek()).toBe(1)\n  expect(dayjs('20210107').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210107').isoWeek()).toBe(1)\n  expect(dayjs('20210108').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210108').isoWeek()).toBe(1)\n  expect(dayjs('20210109').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210109').isoWeek()).toBe(1)\n  expect(dayjs('20210110').isoWeekYear()).toBe(2021)\n  expect(dayjs('20210110').isoWeek()).toBe(1)\n})\n\n\nit('utc mode', () => {\n  // Wednesday, 1 January 2020 00:00:00 UTC\n  const d = dayjs.utc(1577836800000).isoWeek()\n  expect(d).toBe(1)\n  expect(moment.utc(1577836800000).isoWeek()).toBe(d)\n})\n"
  },
  {
    "path": "test/plugin/isoWeeksInYear.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport isoWeeksInYear from '../../src/plugin/isoWeeksInYear'\nimport isLeapYear from '../../src/plugin/isLeapYear'\n\ndayjs.extend(isoWeeksInYear)\ndayjs.extend(isLeapYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('isoWeeksInYear', () => {\n  expect(dayjs('2004').isoWeeksInYear()).toBe(53)\n  expect(dayjs('2005').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2006').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2007').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2008').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2009').isoWeeksInYear()).toBe(53)\n  expect(dayjs('2010').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2011').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2012').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2013').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2014').isoWeeksInYear()).toBe(52)\n  expect(dayjs('2015').isoWeeksInYear()).toBe(53)\n})\n"
  },
  {
    "path": "test/plugin/localeData.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport '../../src/locale/fr'\nimport '../../src/locale/ru'\nimport '../../src/locale/zh-cn'\nimport localeData from '../../src/plugin/localeData'\nimport localizedFormat from '../../src/plugin/localizedFormat'\n\ndayjs.extend(localizedFormat)\ndayjs.extend(localeData)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('Instance localeData', () => {\n  ['zh-cn', 'en', 'fr'].forEach((lo) => {\n    it(`Locale: ${lo}`, () => {\n      dayjs.locale(lo)\n      moment.locale(lo)\n      const d = dayjs()\n      const m = moment()\n      const dayjsLocaleData = dayjs().localeData()\n      const momentLocaleData = moment().localeData()\n      expect(dayjsLocaleData.firstDayOfWeek()).toBe(momentLocaleData.firstDayOfWeek())\n      expect(dayjsLocaleData.months(d)).toBe(momentLocaleData.months(m))\n      expect(dayjsLocaleData.months()).toEqual(momentLocaleData.months())\n      expect(dayjsLocaleData.monthsShort(d)).toBe(momentLocaleData.monthsShort(m))\n      expect(dayjsLocaleData.monthsShort()).toEqual(momentLocaleData.monthsShort())\n      expect(dayjsLocaleData.weekdays(d)).toBe(momentLocaleData.weekdays(m))\n      expect(dayjsLocaleData.weekdays()).toEqual(momentLocaleData.weekdays())\n      expect(dayjsLocaleData.weekdaysMin(d)).toBe(momentLocaleData.weekdaysMin(m))\n      expect(dayjsLocaleData.weekdaysMin()).toEqual(momentLocaleData.weekdaysMin())\n      expect(dayjsLocaleData.weekdaysShort(d)).toBe(momentLocaleData.weekdaysShort(m))\n      expect(dayjsLocaleData.weekdaysShort()).toEqual(momentLocaleData.weekdaysShort())\n      const longDateFormats = ['LT', 'LTS', 'L', 'LL', 'LLL', 'LLLL', 'l', 'll', 'lll', 'llll']\n      longDateFormats.forEach((f) => {\n        expect(dayjsLocaleData.longDateFormat(f)).toEqual(momentLocaleData.longDateFormat(f))\n      })\n    })\n  })\n  dayjs.locale('en')\n  moment.locale('en')\n})\n\n\nit('Global localeData', () => {\n  ['zh-cn', 'en', 'fr'].forEach((lo) => {\n    dayjs.locale(lo)\n    moment.locale(lo)\n    const dayjsLocaleData = dayjs.localeData()\n    const momentLocaleData = moment.localeData()\n    expect(dayjsLocaleData.firstDayOfWeek()).toBe(momentLocaleData.firstDayOfWeek())\n    expect(dayjsLocaleData.months()).toEqual(momentLocaleData.months())\n    expect(dayjsLocaleData.monthsShort()).toEqual(momentLocaleData.monthsShort())\n    expect(dayjsLocaleData.weekdays()).toEqual(momentLocaleData.weekdays())\n    expect(dayjsLocaleData.weekdaysShort()).toEqual(momentLocaleData.weekdaysShort())\n    expect(dayjsLocaleData.weekdaysMin()).toEqual(momentLocaleData.weekdaysMin())\n    const longDateFormats = ['LT', 'LTS', 'L', 'LL', 'LLL', 'LLLL', 'l', 'll', 'lll', 'llll']\n    longDateFormats.forEach((f) => {\n      expect(dayjsLocaleData.longDateFormat(f)).toEqual(momentLocaleData.longDateFormat(f))\n    })\n  })\n})\n\n\nit('Listing the months and weekdays', () => {\n  ['zh-cn', 'en', 'fr'].forEach((lo) => {\n    dayjs.locale(lo)\n    moment.locale(lo)\n    expect(dayjs.months()).toEqual(moment.months())\n    expect(dayjs.monthsShort()).toEqual(moment.monthsShort())\n    expect(dayjs.weekdays()).toEqual(moment.weekdays())\n    expect(dayjs.weekdaysShort()).toEqual(moment.weekdaysShort())\n    expect(dayjs.weekdaysMin()).toEqual(moment.weekdaysMin())\n  })\n})\n\nit('Month function', () => {\n  const dayjsLocaleData = dayjs().locale('ru').localeData()\n  const momentLocaleData = moment().locale('ru').localeData()\n  expect(dayjsLocaleData.months()).toEqual(momentLocaleData.months())\n  expect(dayjsLocaleData.monthsShort()).toEqual(momentLocaleData.monthsShort())\n  dayjs.locale('ru')\n  moment.locale('ru')\n  expect(dayjs.months()).toEqual(moment.months())\n  expect(dayjs.monthsShort()).toEqual(moment.monthsShort())\n})\n\nit('Locale order', () => {\n  dayjs.locale('fr')\n  moment.locale('fr')\n  expect(dayjs.weekdays(true)).toEqual(moment.weekdays(true))\n  expect(dayjs.weekdaysShort(true)).toEqual(moment.weekdaysShort(true))\n  expect(dayjs.weekdaysMin(true)).toEqual(moment.weekdaysMin(true))\n  expect(dayjs.weekdays()).not.toEqual(dayjs.weekdays(true))\n  dayjs.locale('en')\n  moment.locale('en')\n  expect(dayjs.weekdays(true)).toEqual(moment.weekdays(true))\n})\n\nit('meridiem', () => {\n  dayjs.locale('zh-cn')\n  expect(typeof dayjs.localeData().meridiem).toEqual('function')\n  expect(typeof dayjs().localeData().meridiem).toEqual('function')\n  dayjs.locale('en')\n})\n\nit('ordinal', () => {\n  dayjs.locale('zh-cn')\n  expect(typeof dayjs.localeData().ordinal).toEqual('function')\n  expect(typeof dayjs().localeData().ordinal).toEqual('function')\n  dayjs.locale('en')\n})\n"
  },
  {
    "path": "test/plugin/localizedFormat.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport es from '../../src/locale/es'\nimport znCn from '../../src/locale/zh-cn'\nimport localizedFormat from '../../src/plugin/localizedFormat'\n\ndayjs.extend(localizedFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Declares English localized formats', () => {\n  expect(dayjs.en).toBeDefined()\n  expect(dayjs.en.formats).toBeDefined();\n  ['LT', 'LTS', 'L', 'LL', 'LLL', 'LLLL'].forEach(option =>\n    expect(dayjs.en.formats[option]).toBeDefined())\n})\n\nit('Should not interpolate characters inside square brackets', () => {\n  const date = new Date(0)\n  const actualDate = dayjs(date)\n  const expectedDate = moment(date)\n\n  expect(actualDate.format('[l]')).toBe('l')\n  expect(actualDate.format('YYYY [l] YYYY')).toBe('1970 l 1970')\n  expect(actualDate.format('l [l] l')).toBe('1/1/1970 l 1/1/1970')\n  expect(actualDate.format('[L LL LLL LLLL]')).toBe(expectedDate.format('[L LL LLL LLLL]'))\n\n\n  const localeFormats = {\n    L: '[MMMM MM DD dddd]'\n  }\n  const mockedDayJsLocale = {\n    ...es,\n    name: 'fake-locale',\n    formats: {\n      ...localeFormats\n    }\n  }\n  const fakeDate = dayjs(date, { locale: mockedDayJsLocale })\n\n  expect(fakeDate.locale('fake-locale').format('l')).toEqual('MMMM MM DD dddd')\n})\n\nit('Recognizes localized format options', () => {\n  const { formats } = dayjs.en\n  const date = dayjs();\n  ['LT', 'LTS', 'L', 'LL', 'LLL', 'LLLL'].forEach(option =>\n    expect(date.format(option)).toBe(date.format(formats[option])))\n})\n\nit('Uses correct English formats', () => {\n  const date = new Date()\n  const actualDate = dayjs(date)\n  const expectedDate = moment(date);\n  ['LT', 'LTS', 'L', 'LL', 'LLL', 'LLLL'].forEach(option =>\n    expect(actualDate.format(option)).toBe(expectedDate.format(option)))\n})\n\nit('Uses English formats in other locales as default', () => {\n  const date = new Date()\n  const actualDate = dayjs(date)\n  const expectedDate = moment(date)\n  const mockLocale = {\n    name: 'mock',\n    weekdays: Array(7).fill(' '),\n    months: Array(12).fill(' ')\n  }\n  expect(actualDate.locale(mockLocale).format('L')).toBe(expectedDate.format('L'))\n})\n\nit('Leaves the default format intact', () => {\n  const date = new Date()\n  const actualDate = dayjs(date)\n  const expectedDate = moment(date)\n  expect(actualDate.format()).toBe(expectedDate.format())\n})\n\nit('Uses the locale of the dayjs instance', () => {\n  const date = new Date()\n  const englishDate = dayjs(date)\n  const spanishDate = dayjs(date, { locale: es })\n  expect(englishDate.format('L LTS')).not.toBe(spanishDate.format('L LTS'))\n})\n\n\nit('Uses the localized lowercase formats if defined', () => {\n  const date = new Date()\n  const znDate = dayjs(date, { locale: znCn });\n  ['l', 'll', 'lll', 'llll'].forEach(option => expect(znDate.format(option)).toBe(znDate.format(znCn.formats[option])))\n})\n\nit('Uses fallback to xx if xx-yy not available', () => {\n  expect(dayjs('2019-02-01').locale('en-yy').format('MMMM'))\n    .toBe('February')\n})\n\nit('Uses xx-yy if xx-YY is provided', () => {\n  expect(dayjs('2019-02-01').locale('es-US').format('MMMM'))\n    .toBe('febrero')\n})\n\nit('Uses the localized uppercase formats as a base for lowercase formats, if not defined', () => {\n  const date = new Date()\n  const spanishDate = dayjs(date, { locale: es });\n\n  ['l', 'll', 'lll', 'llll'].forEach((option) => {\n    const upperCaseFormat = es.formats[option.toUpperCase()]\n    const adaptedFormat = upperCaseFormat.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g, (_, a, b) => a || b.slice(1))\n    expect(spanishDate.format(option)).toBe(spanishDate.format(adaptedFormat))\n  })\n})\n"
  },
  {
    "path": "test/plugin/minMax.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport minMax from '../../src/plugin/minMax'\n\ndayjs.extend(minMax)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nconst arg1 = dayjs('2019-01-01')\nconst arg2 = dayjs('2018-01-01')\nconst arg3 = dayjs('2017-01-01')\nconst arg4 = dayjs('Invalid Date')\n\nit('Return current time if no argument', () => {\n  expect(dayjs.max())\n    .toBe(null)\n  expect(dayjs.min())\n    .toBe(null)\n  expect(dayjs.max(null))\n    .toBe(null)\n  expect(dayjs.min(null))\n    .toBe(null)\n})\n\nit('Return current time if passing empty array', () => {\n  expect(dayjs.max([]))\n    .toBe(null)\n  expect(dayjs.min([]))\n    .toBe(null)\n})\n\nit('Compare between arguments', () => {\n  expect(dayjs.max(arg1, arg2, arg3).format())\n    .toBe(arg1.format())\n  expect(dayjs.min(arg1, arg2, arg3).format())\n    .toBe(arg3.format())\n})\n\nit('Compare in array', () => {\n  expect(dayjs.max([arg1, arg2, arg3]).format())\n    .toBe(arg1.format())\n  expect(dayjs.min([arg1, arg2, arg3]).format())\n    .toBe(arg3.format())\n})\n\nit('If Invalid Date return Invalid Date', () => {\n  expect(dayjs.max(arg1, arg2, arg3, arg4).format())\n    .toBe(arg4.format())\n  expect(dayjs.min([arg1, arg2, arg3, arg4]).format())\n    .toBe(arg4.format())\n})\n\nit('Ignore if exists an \"null\" argument', () => {\n  expect(dayjs.max(null, null, arg1, arg2, null, arg3).format())\n    .toBe(arg1.format())\n  expect(dayjs.min([null, null, arg1, arg2, null, arg3]).format())\n    .toBe(arg3.format())\n})\n\nit('Return the only date if just provided one argument', () => {\n  expect(dayjs.max(arg1).format())\n    .toBe(arg1.format())\n  expect(dayjs.min([arg1]).format())\n    .toBe(arg1.format())\n})\n"
  },
  {
    "path": "test/plugin/negativeYear.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from 'dayjs'\nimport negativeYear from '../../src/plugin/negativeYear'\nimport utc from '../../src/plugin/utc'\nimport { REGEX_PARSE } from '../../src/constant'\n\n\ndayjs.extend(negativeYear)\ndayjs.extend(utc)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('negativeYear', () => {\n  it('parses negative years', () => {\n    expect(dayjs('-2020-01-01').year()).toBe(-2020)\n    const date = '-2021/01/03'\n    const date2 = '01/03/-2021'\n    const date3 = '01-03--2021'\n    const date4 = '-03-15'\n    const d = date.match(REGEX_PARSE)\n    expect(dayjs(date).format('YYYY-MM-DD')).toBe('-2021-01-03')\n    expect(dayjs(date2).format('YYYY-MM-DD')).toBe('Invalid Date')\n    expect(dayjs(date3).format()).toBe('Invalid Date')\n    expect(dayjs(date4).format('YYYY-MM-DD')).toBe('2001-03-15')\n    expect(d).toBe(null)\n  })\n\n  it('does not parse non-negative years', () => {\n    expect(dayjs('2020-01-01').year()).toBe(2020)\n  })\n\n  it('works with other plugins', () => {\n    expect(dayjs.utc('-2020-01-01').year()).toBe(-2020)\n  })\n\n  it('Add and subtract with negative years', () => {\n    expect(dayjs('-2006').add(1, 'y')).toEqual(dayjs('-2005'))\n    expect(dayjs('-2006').subtract(1, 'y')).toEqual(dayjs('-2007'))\n    expect(dayjs('-2006').add(1, 'y').format('YYYY')).toBe(dayjs('-2005').format('YYYY'))\n    expect(dayjs('-2006').subtract(1, 'y').format('YYYY')).toBe(dayjs('-2007').format('YYYY'))\n  })\n\n  it('Compare date with negative years', () => {\n    expect(dayjs('-2006').isAfter(dayjs('-2007'))).toBeTruthy()\n    expect(dayjs('-2006').isBefore(dayjs('-2005'))).toBeTruthy()\n    expect(dayjs('-2006').isSame('-2006')).toBeTruthy()\n  })\n})\n"
  },
  {
    "path": "test/plugin/objectSupport.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport objectSupport from '../../src/plugin/objectSupport'\nimport quarterOfYear from '../../src/plugin/quarterOfYear'\nimport utc from '../../src/plugin/utc'\nimport utils from '../../src/utils'\n\ndayjs.extend(utc)\ndayjs.extend(quarterOfYear)\ndayjs.extend(objectSupport)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\nconst now = new Date()\nconst currentYear = now.getFullYear()\nconst currentMonth = utils.s(now.getMonth() + 1, 2, '0')\nconst currentDate = utils.s(now.getDate(), 2, '0')\nconst currentUTCYear = now.getUTCFullYear()\nconst currentUTCMonth = utils.s(now.getUTCMonth() + 1, 2, '0')\nconst currentUTCDate = utils.s(now.getUTCDate(), 2, '0')\nconst fmt = 'YYYY-MM-DD HH:mm:ss.SSS'\nconst tests = [\n  [{ year: 2010 }, '2010-01-01 00:00:00.000'],\n  [{ year: 2010, month: 1 }, '2010-02-01 00:00:00.000'],\n  [{ year: 2010, month: 1, day: 12 }, '2010-02-12 00:00:00.000'],\n  [{ year: 2010, month: 1, date: 12 }, '2010-02-12 00:00:00.000'],\n  [\n    {\n      hour: 15, minute: 25, second: 50, millisecond: 125\n    },\n    `${currentYear}-${currentMonth}-${currentDate} 15:25:50.125`,\n    `${currentUTCYear}-${currentUTCMonth}-${currentUTCDate} 15:25:50.125`],\n  [\n    {\n      year: 2010, month: 1, day: 12, hours: 1\n    },\n    '2010-02-12 01:00:00.000'\n  ],\n  [\n    {\n      year: 2010, month: 1, date: 12, hours: 1\n    },\n    '2010-02-12 01:00:00.000'\n  ],\n  [\n    {\n      year: 2010, month: 1, day: 12, hours: 1, minutes: 1\n    },\n    '2010-02-12 01:01:00.000'\n  ],\n  [\n    {\n      year: 2010, month: 1, date: 12, hours: 1, minutes: 1\n    },\n    '2010-02-12 01:01:00.000'\n  ],\n  [\n    {\n      year: 2010,\n      month: 1,\n      day: 12,\n      hours: 1,\n      minutes: 1,\n      seconds: 1\n    },\n    '2010-02-12 01:01:01.000'\n  ],\n  [\n    {\n      year: 2010,\n      month: 1,\n      day: 12,\n      hours: 1,\n      minutes: 1,\n      seconds: 1,\n      milliseconds: 1\n    },\n    '2010-02-12 01:01:01.001'\n  ],\n  [\n    {\n      years: 2010,\n      months: 1,\n      days: 14,\n      hours: 15,\n      minutes: 25,\n      seconds: 50,\n      milliseconds: 125\n    },\n    '2010-02-14 15:25:50.125'\n  ],\n  [\n    {\n      year: 2010,\n      month: 1,\n      day: 14,\n      hour: 15,\n      minute: 25,\n      second: 50,\n      millisecond: 125\n    },\n    '2010-02-14 15:25:50.125'\n  ],\n  [\n    {\n      y: 2010, M: 1, d: 14, h: 15, m: 25, s: 50, ms: 125\n    },\n    '2010-02-14 15:25:50.125'\n  ]\n]\n\ndescribe('parse empty object', () => {\n  it('local', () => {\n    expect(dayjs({}).format())\n      .toBe(moment({}).format())\n  })\n  it('utc', () => {\n    expect(dayjs.utc({}).format())\n      .toBe(moment.utc({}).format())\n  })\n})\n\nit('Constructor from Object', () => {\n  for (let i = 0; i < tests.length; i += 1) {\n    expect(dayjs(tests[i][0]).format(fmt)).toBe(tests[i][1])\n    expect(moment(tests[i][0]).format(fmt)).toBe(tests[i][1])\n  }\n})\n\nit('Constructor from Object UTC', () => {\n  for (let i = 0; i < tests.length; i += 1) {\n    const result = tests[i][2] || tests[i][1]\n    expect(dayjs.utc(tests[i][0]).format(fmt)).toBe(result)\n    expect(moment.utc(tests[i][0]).format(fmt)).toBe(result)\n  }\n})\n\nit('Constructor from null should return Invalid Date', () => {\n  expect(dayjs(null).isValid()).toBe(false)\n  expect(moment(null).isValid()).toBe(false)\n})\n\nit('Set from Object', () => {\n  for (let i = 0; i < tests.length; i += 1) {\n    expect(dayjs(now).set(tests[i][0]).format(fmt)).toBe(moment(now).set(tests[i][0]).format(fmt))\n  }\n})\n\nit('add short reverse args', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n  expect(a.add({ ms: 50 }).millisecond()).toBe(550)\n  expect(a.add({ s: 1 }).second()).toBe(9)\n  expect(a.add({ m: 1 }).minute()).toBe(8)\n  expect(a.add({ h: 1 }).hour()).toBe(7)\n  expect(a.add({ d: 1 }).date()).toBe(13)\n  expect(a.add({ w: 1 }).date()).toBe(19)\n  expect(a.add({ M: 1 }).month()).toBe(10)\n  expect(a.add({ y: 1 }).year()).toBe(2012)\n  expect(a.add({ Q: 1 }).month()).toBe(0)\n\n  const aM = moment({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n  expect(aM.clone().add({ ms: 50 }).millisecond()).toBe(550)\n  expect(aM.clone().add({ s: 1 }).second()).toBe(9)\n  expect(aM.clone().add({ m: 1 }).minute()).toBe(8)\n  expect(aM.clone().add({ h: 1 }).hour()).toBe(7)\n  expect(aM.clone().add({ d: 1 }).date()).toBe(13)\n  expect(aM.clone().add({ w: 1 }).date()).toBe(19)\n  expect(aM.clone().add({ M: 1 }).month()).toBe(10)\n  expect(aM.clone().add({ y: 1 }).year()).toBe(2012)\n  expect(aM.clone().add({ Q: 1 }).month()).toBe(0)\n\n  const b = dayjs([2010, 1, 31]).add({ M: 1 })\n  const c = dayjs([2010, 2, 28]).subtract({ M: 1 })\n  const d = dayjs([2010, 2, 28]).subtract({ Q: 1 })\n\n  expect(b.month()).toBe(1)\n  expect(b.date()).toBe(28)\n  expect(c.month()).toBe(0)\n  expect(c.date()).toBe(28)\n  expect(d.month()).toBe(10)\n  expect(d.date()).toBe(28)\n  expect(d.year()).toBe(2009)\n})\n\nit('add long reverse args', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add({ milliseconds: 50 }).millisecond()).toBe(550)\n  expect(a.add({ seconds: 1 }).second()).toBe(9)\n  expect(a.add({ minutes: 1 }).minute()).toBe(8)\n  expect(a.add({ hours: 1 }).hour()).toBe(7)\n  expect(a.add({ days: 1 }).date()).toBe(13)\n  expect(a.add({ weeks: 1 }).date()).toBe(19)\n  expect(a.add({ months: 1 }).month()).toBe(10)\n  expect(a.add({ years: 1 }).year()).toBe(2012)\n  expect(a.add({ quarters: 1 }).month()).toBe(0)\n})\n\nit('add long singular reverse args', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add({ millisecond: 50 }).millisecond()).toBe(550)\n  expect(a.add({ second: 1 }).second()).toBe(9)\n  expect(a.add({ minute: 1 }).minute()).toBe(8)\n  expect(a.add({ hour: 1 }).hour()).toBe(7)\n  expect(a.add({ day: 1 }).date()).toBe(13)\n  expect(a.add({ week: 1 }).date()).toBe(19)\n  expect(a.add({ month: 1 }).month()).toBe(10)\n  expect(a.add({ year: 1 }).year()).toBe(2012)\n  expect(a.add({ quarter: 1 }).month()).toBe(0)\n})\n\nit('add string long', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add(50, 'millisecond').millisecond()).toBe(550)\n  expect(a.add(1, 'second').second()).toBe(9)\n  expect(a.add(1, 'minute').minute()).toBe(8)\n  expect(a.add(1, 'hour').hour()).toBe(7)\n  expect(a.add(1, 'day').date()).toBe(13)\n  expect(a.add(1, 'week').date()).toBe(19)\n  expect(a.add(1, 'month').month()).toBe(10)\n  expect(a.add(1, 'year').year()).toBe(2012)\n  expect(a.add(1, 'quarter').month()).toBe(0)\n})\n\nit('add string long singular', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add(50, 'milliseconds').millisecond()).toBe(550)\n  expect(a.add(1, 'seconds').second()).toBe(9)\n  expect(a.add(1, 'minutes').minute()).toBe(8)\n  expect(a.add(1, 'hours').hour()).toBe(7)\n  expect(a.add(1, 'days').date()).toBe(13)\n  expect(a.add(1, 'weeks').date()).toBe(19)\n  expect(a.add(1, 'months').month()).toBe(10)\n  expect(a.add(1, 'years').year()).toBe(2012)\n  expect(a.add(1, 'quarters').month()).toBe(0)\n})\n\nit('add string short', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add(50, 'ms').millisecond()).toBe(550)\n  expect(a.add(1, 's').second()).toBe(9)\n  expect(a.add(1, 'm').minute()).toBe(8)\n  expect(a.add(1, 'h').hour()).toBe(7)\n  expect(a.add(1, 'd').date()).toBe(13)\n  expect(a.add(1, 'w').date()).toBe(19)\n  expect(a.add(1, 'M').month()).toBe(10)\n  expect(a.add(1, 'y').year()).toBe(2012)\n  expect(a.add(1, 'Q').month()).toBe(0)\n})\n\nit('add strings string short', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add('50', 'ms').millisecond()).toBe(550)\n  expect(a.add('1', 's').second()).toBe(9)\n  expect(a.add('1', 'm').minute()).toBe(8)\n  expect(a.add('1', 'h').hour()).toBe(7)\n  expect(a.add('1', 'd').date()).toBe(13)\n  expect(a.add('1', 'w').date()).toBe(19)\n  expect(a.add('1', 'M').month()).toBe(10)\n  expect(a.add('1', 'y').year()).toBe(2012)\n  expect(a.add('1', 'Q').month()).toBe(0)\n})\n\nit('add no string with milliseconds default', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n\n  expect(a.add(50).millisecond()).toBe(550)\n})\n\nit('subtract strings string short', () => {\n  const a = dayjs({\n    year: 2011,\n    month: 9,\n    date: 12,\n    hour: 6,\n    minute: 7,\n    second: 8,\n    millisecond: 500\n  })\n  expect(a.subtract('50', 'ms').millisecond()).toBe(450)\n  expect(a.subtract('1', 's').second()).toBe(7)\n  expect(a.subtract('1', 'm').minute()).toBe(6)\n  expect(a.subtract('1', 'h').hour()).toBe(5)\n  expect(a.subtract('1', 'd').date()).toBe(11)\n  expect(a.subtract('1', 'w').date()).toBe(5)\n  expect(a.subtract('1', 'M').month()).toBe(8)\n  expect(a.subtract('1', 'y').year()).toBe(2010)\n  expect(a.subtract('1', 'Q').month()).toBe(6)\n})\n\nit('add decimal values of days and months', () => {\n  expect(dayjs([2016, 4, 3]).add(1.6, 'days').date()).toBe(5)\n  expect(dayjs([2016, 4, 3]).add(-1.6, 'days').date()).toBe(1)\n  expect(dayjs([2016, 4, 1]).add(-1.6, 'days').date()).toBe(30)\n  expect(dayjs([2016, 4, 3]).add(1.6, 'months').month()).toBe(4)\n  expect(dayjs([2016, 4, 3]).add(-1.6, 'months').month()).toBe(1)\n  expect(dayjs([2016, 1, 3]).add(-1.6, 'months').month()).toBe(11)\n  expect(dayjs([2016, 4, 3]).subtract(1.6, 'days').date()).toBe(1)\n  expect(dayjs([2016, 4, 2]).subtract(1.6, 'days').date()).toBe(31)\n  expect(dayjs([2016, 2, 1]).subtract(1.1, 'days').date()).toBe(31)\n  expect(dayjs([2016, 4, 3]).subtract(-1.6, 'days').date()).toBe(5)\n  expect(dayjs([2016, 4, 30]).subtract(-1.6, 'days').date()).toBe(2)\n  expect(dayjs([2016, 4, 3]).subtract(1.6, 'months').month()).toBe(1)\n  expect(dayjs([2016, 4, 3]).subtract(-1.6, 'months').month()).toBe(4)\n  expect(dayjs([2016, 12, 31]).subtract(-1.6, 'months').month()).toBe(0)\n  expect(dayjs([2016, 1, 1]).add(1.6, 'years').format('YYYY-MM-DD')).toBe('2017-01-01')\n  expect(dayjs([2016, 7, 1]).add(1.6, 'years').format('YYYY-MM-DD')).toBe('2017-07-01')\n  expect(dayjs([2016, 1, 1]).add(1.1, 'quarters').format('YYYY-MM-DD')).toBe('2016-04-01')\n})\n\nit('returns valid date on undefined', () => {\n  expect(dayjs().isValid()).toBe(true)\n})\n\nit('returns invalid date on null', () => {\n  expect(dayjs(null).isValid()).toBe(false)\n})\n"
  },
  {
    "path": "test/plugin/pluralGetSet.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport pluralGetSet from '../../src/plugin/pluralGetSet'\n\ndayjs.extend(pluralGetSet)\nconst warnBackup = global.console.warn\nbeforeEach(() => {\n  MockDate.set(new Date())\n  global.console.warn = jest.genMockFunction()\n  // moment.js .years, .dates, .months will throw warn\n})\n\nafterEach(() => {\n  MockDate.reset()\n  global.console.warn = warnBackup\n})\n\nit('Years', () => {\n  expect(dayjs().get('years')).toBe(moment().get('years'))\n  expect(dayjs().years()).toBe(moment().years())\n  expect(dayjs().years(0).valueOf()).toBe(moment().years(0).valueOf())\n  expect(dayjs().years(2000).valueOf()).toBe(moment().years(2000).valueOf())\n})\n\nit('Months', () => {\n  expect(dayjs().get('months')).toBe(moment().get('months'))\n  expect(dayjs().months()).toBe(moment().months())\n  expect(dayjs().months(0).valueOf()).toBe(moment().months(0).valueOf())\n  expect(dayjs().months(1).valueOf()).toBe(moment().months(1).valueOf())\n})\n\nit('Days of Week', () => {\n  expect(dayjs().get('days')).toBe(moment().get('days'))\n  expect(dayjs().days()).toBe(moment().days())\n  expect(dayjs().days(0).format()).toBe(moment().days(0).format())\n  expect(dayjs().days(1).format()).toBe(moment().days(1).format())\n})\n\nit('Dates', () => {\n  expect(dayjs().get('dates')).toBe(moment().get('dates'))\n  expect(dayjs().dates()).toBe(moment().dates())\n  expect(dayjs().dates(0).valueOf()).toBe(moment().dates(0).valueOf())\n  expect(dayjs().dates(1).valueOf()).toBe(moment().dates(1).valueOf())\n})\n\nit('Hours', () => {\n  expect(dayjs().get('hours')).toBe(moment().get('hours'))\n  expect(dayjs().hours()).toBe(moment().hours())\n  expect(dayjs().hours(0).valueOf()).toBe(moment().hours(0).valueOf())\n  expect(dayjs().hours(1).valueOf()).toBe(moment().hours(1).valueOf())\n})\n\nit('Minutes', () => {\n  expect(dayjs().get('minutes')).toBe(moment().get('minutes'))\n  expect(dayjs().minutes()).toBe(moment().minutes())\n  expect(dayjs().minutes(0).valueOf()).toBe(moment().minutes(0).valueOf())\n  expect(dayjs().minutes(1).valueOf()).toBe(moment().minutes(1).valueOf())\n})\n\nit('Seconds', () => {\n  expect(dayjs().get('seconds')).toBe(moment().get('seconds'))\n  expect(dayjs().seconds()).toBe(moment().seconds())\n  expect(dayjs().seconds(0).valueOf()).toBe(moment().seconds(0).valueOf())\n  expect(dayjs().seconds(1).valueOf()).toBe(moment().seconds(1).valueOf())\n})\n\nit('Milliseconds', () => {\n  expect(dayjs().get('milliseconds')).toBe(moment().get('milliseconds'))\n  expect(dayjs().milliseconds()).toBe(moment().milliseconds())\n  expect(dayjs().milliseconds(0).valueOf()).toBe(moment().milliseconds(0).valueOf())\n  expect(dayjs().milliseconds(1).valueOf()).toBe(moment().milliseconds(1).valueOf())\n})\n\nit('Set Dates', () => {\n  expect(dayjs().date(30).valueOf()).toBe(moment().dates(30).valueOf())\n  expect(dayjs().set('dates', 30).valueOf()).toBe(moment().set('dates', 30).valueOf())\n})\n\nit('Set Days of Week', () => {\n  expect(dayjs().days(0).valueOf()).toBe(moment().days(0).valueOf())\n  expect(dayjs().set('days', 0).valueOf()).toBe(moment().set('days', 0).valueOf())\n})\n\nit('Set Months', () => {\n  expect(dayjs().months(11).valueOf()).toBe(moment().months(11).valueOf())\n  expect(dayjs().set('months', 11).valueOf()).toBe(moment().set('months', 11).valueOf())\n})\n\nit('Set Years', () => {\n  expect(dayjs().years(2008).valueOf()).toBe(moment().year(2008).valueOf())\n  expect(dayjs().set('years', 2008).valueOf()).toBe(moment().set('years', 2008).valueOf())\n})\n\nit('Set Hours', () => {\n  expect(dayjs().set('hours', 6).valueOf()).toBe(moment().set('hours', 6).valueOf())\n  expect(dayjs().hours(6).valueOf()).toBe(moment().hours(6).valueOf())\n})\n\nit('Set Minutes', () => {\n  expect(dayjs().minutes(59).valueOf()).toBe(moment().minutes(59).valueOf())\n  expect(dayjs().set('minutes', 59).valueOf()).toBe(moment().set('minutes', 59).valueOf())\n})\n\nit('Set Seconds', () => {\n  expect(dayjs().seconds(59).valueOf()).toBe(moment().seconds(59).valueOf())\n  expect(dayjs().set('second', 59).valueOf()).toBe(moment().set('second', 59).valueOf())\n})\n\nit('Set Milliseconds', () => {\n  expect(dayjs().milliseconds(999).valueOf()).toBe(moment().milliseconds(999).valueOf())\n  expect(dayjs().set('millisecond', 999).valueOf()).toBe(moment().set('millisecond', 999).valueOf())\n})\n\nit('Set Month and Year in last day of month', () => {\n  // 2011-07-31 -> 2011-02-28\n  const origin = dayjs('2011-07-31T14:48:00.000Z')\n  const setMonth = origin.set('month', 1)\n  expect(setMonth.months()).toBe(1)\n  expect(origin.dates()).toBe(31)\n  expect(setMonth.dates()).toBe(28)\n  // 2000-02-29 -> 2001-02-28\n  const origin2 = dayjs('2000-02-29T14:48:00.000Z')\n  const setYear = origin2.set('years', 2001)\n  expect(setYear.months()).toBe(1)\n  expect(origin2.dates()).toBe(29)\n  expect(setYear.dates()).toBe(28)\n})\n"
  },
  {
    "path": "test/plugin/preParsePostFormat.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport preParsePostFormat from '../../src/plugin/preParsePostFormat'\nimport localeData from '../../src/plugin/localeData'\nimport duration from '../../src/plugin/duration'\nimport calendar from '../../src/plugin/calendar'\nimport objectSupport from '../../src/plugin/objectSupport'\nimport customParseFormat from '../../src/plugin/customParseFormat'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport utc from '../../src/plugin/utc'\nimport arraySupport from '../../src/plugin/arraySupport'\nimport en from '../../src/locale/en'\n\ndayjs.extend(utc)\ndayjs.extend(localeData)\ndayjs.extend(customParseFormat)\ndayjs.extend(arraySupport)\ndayjs.extend(objectSupport)\ndayjs.extend(calendar)\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\ndayjs.extend(preParsePostFormat)\n\nconst symbolMap = {\n  1: '!',\n  2: '@',\n  3: '#',\n  4: '$',\n  5: '%',\n  6: '^',\n  7: '&',\n  8: '*',\n  9: '(',\n  0: ')'\n}\nconst numberMap = {\n  '!': '1',\n  '@': '2',\n  '#': '3',\n  $: '4',\n  '%': '5',\n  '^': '6',\n  '&': '7',\n  '*': '8',\n  '(': '9',\n  ')': '0'\n}\n\nconst localeCustomizations = {\n  ...en,\n  preparse(string) {\n    if (typeof string !== 'string') {\n      throw new Error(`preparse - Expected string, got ${typeof string}`)\n    }\n    try {\n      return string.replace(/[!@#$%^&*()]/g, match => numberMap[match])\n    } catch (error) {\n      throw new Error(`Unexpected error during preparse of '${string}' - ${error}`)\n    }\n  },\n  postformat(string) {\n    if (typeof string !== 'string') {\n      throw new Error(`postformat - Expected string, got ${typeof string}`)\n    }\n    try {\n      return string.replace(/\\d/g, match => symbolMap[match])\n    } catch (error) {\n      throw new Error(`Unexpected error during postFormat of '${string}' - ${error}`)\n    }\n  }\n}\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n  dayjs.locale('symbol', localeCustomizations)\n})\n\nafterEach(() => {\n  MockDate.reset()\n  dayjs.locale('symbol', null)\n})\n\ndescribe('preparse and postformat', () => {\n  describe('transform', () => {\n    const TEST_DATE = '@)!@-)*-@&'\n    const TEST_NUM = 1346025600\n    it('preparse string + format', () =>\n      expect(dayjs.utc(TEST_DATE, 'YYYY-MM-DD').unix()).toBe(TEST_NUM))\n    it('preparse ISO8601 string', () =>\n      expect(dayjs.utc(TEST_DATE).unix()).toBe(TEST_NUM))\n    it('postformat', () =>\n      expect(dayjs\n        .unix(TEST_NUM)\n        .utc()\n        .format('YYYY-MM-DD'))\n        .toBe(TEST_DATE))\n  })\n\n  describe('transform from', () => {\n    dayjs.locale('symbol', localeCustomizations)\n    const start = dayjs([2007, 1, 28])\n\n    const t1 = dayjs([2007, 1, 28]).add({ s: 90 })\n    it('postformat should work on dayjs.fn.from', () =>\n      expect(start.from(t1, true)).toBe('@ minutes'))\n\n    const t2 = dayjs().add(6, 'd')\n    it('postformat should work on dayjs.fn.fromNow', () =>\n      expect(t2.fromNow(true)).toBe('^ days'))\n\n    it('postformat should work on dayjs.duration.fn.humanize', () =>\n      expect(dayjs.duration(10, 'h').humanize()).toBe('!) hours'))\n  })\n})\n\ndescribe('calendar day', () => {\n  const a = dayjs()\n    .hour(12)\n    .minute(0)\n    .second(0)\n\n  it('today at the same time', () =>\n    expect(dayjs(a).calendar()).toBe('Today at !@:)) PM'))\n\n  it('Now plus 25 min', () =>\n    expect(dayjs(a)\n      .add({ m: 25 })\n      .calendar())\n      .toBe('Today at !@:@% PM'))\n\n  it('Now plus 1 hour', () =>\n    expect(dayjs(a)\n      .add({ h: 1 })\n      .calendar())\n      .toBe('Today at !:)) PM'))\n\n  it('tomorrow at the same time', () =>\n    expect(dayjs(a)\n      .add({ d: 1 })\n      .calendar())\n      .toBe('Tomorrow at !@:)) PM'))\n\n  it('Now minus 1 hour', () =>\n    expect(dayjs(a)\n      .subtract({ h: 1 })\n      .calendar())\n      .toBe('Today at !!:)) AM'))\n\n  it('yesterday at the same time', () =>\n    expect(dayjs(a)\n      .subtract({ d: 1 })\n      .calendar())\n      .toBe('Yesterday at !@:)) PM'))\n})\n"
  },
  {
    "path": "test/plugin/quarterOfYear.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport quarterOfYear from '../../src/plugin/quarterOfYear'\n\ndayjs.extend(quarterOfYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('get QuarterOfYear', () => {\n  expect(dayjs('2013-01-01T00:00:00.000').quarter()).toBe(1)\n  expect(dayjs('2013-04-01T00:00:00.000').subtract(1, 'ms').quarter()).toBe(1)\n  expect(dayjs('2013-04-01T00:00:00.000').quarter()).toBe(2)\n  expect(dayjs('2013-07-01T00:00:00.000').subtract(1, 'ms').quarter()).toBe(2)\n  expect(dayjs('2013-07-01T00:00:00.000').quarter()).toBe(3)\n  expect(dayjs('2013-10-01T00:00:00.000').subtract(1, 'ms').quarter()).toBe(3)\n  expect(dayjs('2013-10-01T00:00:00.000').quarter()).toBe(4)\n  expect(dayjs('2014-01-01T00:00:00.000').subtract(1, 'ms').quarter()).toBe(4)\n})\n\nit('set QuarterOfYear', () => {\n  const d1 = '2013-01-01T00:00:00.000'\n  expect(dayjs(d1).quarter(2).format())\n    .toBe(moment(d1).quarter(2).format())\n  const d2 = '2013-02-05T05:06:07.000'\n  expect(dayjs(d2).quarter(2).format())\n    .toBe(moment(d2).quarter(2).format())\n  const d3 = '2018-11-25T05:06:07.000'\n  expect(dayjs(d3).quarter(3).format())\n    .toBe(moment(d3).quarter(3).format())\n})\n\nit('add subtract quarter', () => {\n  expect(dayjs().add(2, 'quarter').format())\n    .toBe(moment().add(2, 'quarter').format())\n  expect(dayjs().subtract(2, 'quarter').format())\n    .toBe(moment().subtract(2, 'quarter').format())\n})\n\nit('startOf endOf quarter', () => {\n  expect(dayjs().startOf('quarter').format())\n    .toBe(moment().startOf('quarter').format())\n  expect(dayjs().endOf('quarter').format())\n    .toBe(moment().endOf('quarter').format())\n})\n"
  },
  {
    "path": "test/plugin/relativeTime.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport * as C from '../../src/constant'\nimport relativeTime from '../../src/plugin/relativeTime'\nimport updateLocale from '../../src/plugin/updateLocale'\nimport utc from '../../src/plugin/utc'\nimport '../../src/locale/ru'\n\ndayjs.extend(relativeTime)\n\nbeforeEach(() => {\n  MockDate.set(new Date('2018-04-04T16:00:00.000Z'))\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Time from X', () => {\n  const T = [\n    [0, 'second'], // a few seconds\n    [1, 'second'], // a few seconds\n    [44, 'second'], // a few seconds\n    [44.4, 'second'], // a few seconds\n    [44.5, 'second'], // a minute\n    [45, 'second'], // a minute\n    [1, 'minute'], // a minute\n    [89, 'second'], // a minute\n    [89.4, 'second'], // a minute\n    [89.5, 'second'], // a minute\n    [90, 'second'], // 2 minutes\n    [44, 'minute'], // 44 minutes\n    [44.4, 'minute'],\n    [44.5, 'minute'],\n    [45, 'minute'], // an hour\n    [1, 'hour'], // an hour\n    [89, 'minute'], // an hour\n    [89.4, 'minute'],\n    [89.5, 'minute'],\n    [90, 'minute'], // 2 hours\n    [21, 'hour'], // 21 hours\n    [21.4, 'hour'],\n    [21.5, 'hour'],\n    [22, 'hour'], // a day\n    [1, 'day'], // a day\n    [35, 'hour'], // a day\n    [35.4, 'hour'],\n    [35.5, 'hour'],\n    [36, 'hour'], // 2 days\n    [25, 'day'], // 25 days\n    [26, 'day'], // a month\n    [1, 'month'], // a month\n    [45, 'day'], // a month\n    [47, 'day'], // 2 month\n    [10, 'month'], // 10 month\n    [11, 'month'], // a year\n    [1, 'year'], // a year\n    [17, 'month'], // a year\n    [18, 'month'] // 2 years\n  ]\n\n  T.forEach((t) => {\n    expect(dayjs().from(dayjs().add(t[0], t[1]))).toBe(moment().from(moment().add(t[0], t[1])))\n  })\n  // withoutSuffix\n  expect(dayjs().from(dayjs().add(3, 'year'), true)).toBe(moment().from(moment().add(3, 'year'), true))\n  // past date\n  expect(dayjs().from(dayjs().subtract(3, 'year'))).toBe(moment().from(moment().subtract(3, 'year')))\n})\n\nit('Time from now', () => {\n  expect(dayjs().fromNow()).toBe(moment().fromNow())\n  expect(dayjs().fromNow(true)).toBe(moment().fromNow(true))\n})\n\nit('Time to now', () => {\n  expect(dayjs().toNow()).toBe(moment().toNow())\n  expect(dayjs().toNow(true)).toBe(moment().toNow(true))\n})\n\nit('Time to X', () => {\n  // withoutSuffix\n  expect(dayjs().to(dayjs().add(3, 'year'), true)).toBe(moment().to(moment().add(3, 'year'), true))\n  // past date\n  expect(dayjs().to(dayjs().subtract(3, 'year'))).toBe(moment().to(moment().subtract(3, 'year')))\n})\n\nit('Locale Function', () => {\n  // e.g. in ru locale, m: x minute require additional processing\n  // and provides as a function instead of a string\n  const str0 = '2020-01-06 15:53:00'\n  const str = '2020-01-06 15:52:15'\n  const result = dayjs(str0).locale('ru').to(str)\n  expect(result).toEqual(expect.any(String))\n})\n\n// https://github.com/iamkun/dayjs/issues/646\nit('Time from now with UTC', () => {\n  dayjs.extend(utc)\n\n  expect(dayjs.utc().fromNow()).toBe(moment.utc().fromNow())\n\n  const currentTime = new Date()\n  const currentTimestamp = currentTime.getTime()\n  const currentTimestampAfter37hrs = currentTimestamp + (37 * 60 * 60 * 1000)\n\n  let dutc = dayjs.utc(currentTimestampAfter37hrs)\n  let mutc = moment.utc(currentTimestampAfter37hrs)\n\n  expect(dutc.fromNow()).toBe(mutc.fromNow())\n\n  // More precise\n  const currentTimestampAfter36hrs = currentTimestamp + (36.0001 * 60 * 60 * 1000)\n  dutc = dayjs.utc(currentTimestampAfter36hrs)\n  mutc = moment.utc(currentTimestampAfter36hrs)\n\n  expect(dutc.fromNow()).toBe(mutc.fromNow())\n})\n\nit('Custom thresholds and rounding support', () => {\n  expect(dayjs().subtract(45, 'm').fromNow()).toBe('an hour ago')\n  delete relativeTime.$i // this allow plugin to be installed again\n  dayjs.extend(relativeTime, {\n    rounding: Math.floor,\n    thresholds: [\n      { l: 's', r: 1 },\n      { l: 'm', r: 1 },\n      { l: 'mm', r: 59, d: C.MIN },\n      { l: 'h', r: 1 },\n      { l: 'hh', r: 23, d: C.H },\n      { l: 'd', r: 1 },\n      { l: 'dd', r: 29, d: C.D },\n      { l: 'M', r: 1 },\n      { l: 'MM', r: 11, d: C.M },\n      { l: 'y' },\n      { l: 'yy', d: C.Y }\n    ]\n  })\n  expect(dayjs().subtract(45, 'm').fromNow()).toBe('45 minutes ago')\n})\n\nit('Locale without relativeTime config fallback', () => {\n  expect(dayjs().locale({\n    name: 'test-locale'\n  }).fromNow()).toEqual(expect.any(String))\n})\n\nit('Past and Future keys should support function for additional processing', () => {\n  dayjs.extend(updateLocale)\n  dayjs.updateLocale('en', {\n    relativeTime: {\n      future: input => `${input} modified`,\n      past: input => `${input} modified`,\n      s: 'just now',\n      m: ' 1 min',\n      mm: '%d min',\n      h: '1 hr',\n      hh: '%d hrs',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    }\n  })\n\n\n  const past = Date.now() - 1000\n  expect(dayjs(past).fromNow()).toEqual(' 1 min modified')\n  const future = Date.now() + 1000\n  expect(dayjs(future).fromNow()).toEqual(' 1 min modified')\n})\n"
  },
  {
    "path": "test/plugin/timezone.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment-timezone'\nimport dayjs from '../../src'\nimport timezone from '../../src/plugin/timezone'\nimport customParseFormat from '../../src/plugin/customParseFormat'\nimport utc from '../../src/plugin/utc'\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(customParseFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nconst NY = 'America/New_York'\nconst VAN = 'America/Vancouver'\nconst DEN = 'America/Denver'\nconst TOKYO = 'Asia/Tokyo'\nconst PARIS = 'Europe/Paris'\n\ndescribe('Guess', () => {\n  it('return string', () => {\n    expect(typeof dayjs.tz.guess()).toBe('string')\n  })\n})\n\n\ndescribe('Parse', () => {\n  it('parse target time string', () => {\n    const newYork = dayjs.tz('2014-06-01 12:00', NY)\n    const MnewYork = moment.tz('2014-06-01 12:00', NY)\n    expect(newYork.format()).toBe('2014-06-01T12:00:00-04:00')\n    expect(newYork.format()).toBe(MnewYork.format())\n    expect(newYork.utcOffset()).toBe(-240)\n    expect(newYork.utcOffset()).toBe(MnewYork.utcOffset())\n    expect(newYork.valueOf()).toBe(1401638400000)\n    expect(newYork.valueOf()).toBe(MnewYork.valueOf())\n  })\n\n  it('parse timestamp, js Date, Day.js object', () => {\n    const d = new Date('2020-08-07T12:00-07:00')\n    const result = '2020-08-07T12:00:00-07:00'\n    const TjsDate = dayjs.tz(d, VAN)\n    const Tdayjs = dayjs.tz(dayjs(d), VAN)\n    const Timestamp = dayjs.tz(d.getTime(), VAN)\n    const Tmoment = moment.tz(d, VAN)\n    expect(TjsDate.format()).toBe(result)\n    expect(Tdayjs.format()).toBe(result)\n    expect(Timestamp.format()).toBe(result)\n    expect(Tmoment.format()).toBe(result)\n  })\n\n  it('parse and convert between timezones', () => {\n    const newYork = dayjs.tz('2014-06-01 12:00', NY)\n    expect(newYork.tz('America/Los_Angeles').format()).toBe('2014-06-01T09:00:00-07:00')\n    expect(newYork.tz('Europe/London').format()).toBe('2014-06-01T17:00:00+01:00')\n  })\n\n  it('preserve milliseconds', () => {\n    const d = dayjs(1596735327399)\n    const oldMs = d.millisecond()\n    const dTz = d.tz('America/New_York')\n    const newMs = dTz.millisecond()\n    expect(oldMs).toEqual(newMs)\n  })\n})\n\ndescribe('Convert', () => {\n  it('convert to target time', () => {\n    const losAngeles = dayjs('2014-06-01T12:00:00Z').tz('America/Los_Angeles')\n    const MlosAngeles = moment('2014-06-01T12:00:00Z').tz('America/Los_Angeles')\n    expect(losAngeles.format()).toBe('2014-06-01T05:00:00-07:00')\n    expect(losAngeles.format()).toBe(MlosAngeles.format())\n    expect(losAngeles.valueOf()).toBe(1401624000000)\n    expect(losAngeles.valueOf()).toBe(MlosAngeles.valueOf())\n    expect(losAngeles.utcOffset()).toBe(-420)\n    expect(losAngeles.utcOffset()).toBe(MlosAngeles.utcOffset())\n  })\n\n  it('convert to target time', () => {\n    [dayjs, moment].forEach((_) => {\n      const losAngeles = _('2014-06-01T12:00:00Z').tz('America/Los_Angeles')\n      expect(losAngeles.format()).toBe('2014-06-01T05:00:00-07:00')\n      expect(losAngeles.valueOf()).toBe(1401624000000)\n    })\n  })\n\n  it('convert from time with timezone to target time', () => {\n    const losAngelesInUTC = dayjs('2014-06-01T05:00:00-07:00').tz('UTC')\n    const MlosAngelesInUTC = moment('2014-06-01T05:00:00-07:00').tz('UTC')\n    expect(losAngelesInUTC.format()).toBe('2014-06-01T12:00:00Z')\n    expect(losAngelesInUTC.format()).toBe(MlosAngelesInUTC.format())\n  })\n\n  it('DST', () => {\n    [dayjs, moment].forEach((_) => {\n      const jun = _('2014-06-01T12:00:00Z')\n      const dec = _('2014-12-01T12:00:00Z')\n      expect(jun.tz('America/Los_Angeles').format('ha')).toBe('5am')\n      expect(jun.tz('America/Los_Angeles').utcOffset()).toBe(-7 * 60)\n      expect(dec.tz('America/Los_Angeles').format('ha')).toBe('4am')\n      expect(dec.tz('America/Los_Angeles').utcOffset()).toBe(-8 * 60)\n      expect(jun.tz(NY).format('ha')).toBe('8am')\n      expect(dec.tz(NY).format('ha')).toBe('7am')\n      expect(jun.tz(TOKYO).format('ha')).toBe('9pm')\n      expect(dec.tz(TOKYO).format('ha')).toBe('9pm')\n      expect(jun.tz('Australia/Sydney').format('ha')).toBe('10pm')\n      expect(dec.tz('Australia/Sydney').format('ha')).toBe('11pm')\n    })\n  })\n\n  it('format Z', () => {\n    [dayjs, moment].forEach((_) => {\n      const t = _('2020-08-06T03:48:10.258Z').tz(TOKYO)\n      expect(t.format('Z')).toBe('+09:00')\n    })\n  })\n})\n\n\ndescribe('DST, a time that never existed Spring Forward', () => {\n  // 11 March 2012, 02:00:00 clocks were\n  // turned forward 1 hour to 11 March 2012, 03:00:00 local\n  // daylight time instead.\n  // 02:00 -> 03:00\n  // 02:59 -> 03:59\n\n  it('2012-03-11 01:59:59', () => {\n    const s = '2012-03-11 01:59:59'\n    const d = dayjs.tz(s, NY)\n    const m = moment.tz(s, NY)\n    expect(d.format()).toBe('2012-03-11T01:59:59-05:00')\n    expect(d.format()).toBe(m.format())\n    expect(d.utcOffset()).toBe(-300)\n    expect(d.utcOffset()).toBe(m.utcOffset())\n    expect(d.valueOf()).toBe(1331449199000)\n    expect(d.valueOf()).toBe(m.valueOf())\n  })\n  it('2012-03-11 02:00:00', () => {\n    const s = '2012-03-11 02:00:00'\n    const d = dayjs.tz(s, NY)\n    const m = moment.tz(s, NY)\n    expect(d.format()).toBe('2012-03-11T03:00:00-04:00')\n    expect(d.format()).toBe(m.format())\n    expect(d.valueOf()).toBe(m.valueOf())\n    expect(d.valueOf()).toBe(1331449200000)\n    expect(d.utcOffset()).toBe(-240)\n    expect(d.utcOffset()).toBe(m.utcOffset())\n  })\n  it('2012-03-11 02:59:59', () => {\n    const s = '2012-03-11 02:59:59'\n    const d = dayjs.tz(s, NY)\n    const m = moment.tz(s, NY)\n    expect(d.format()).toBe('2012-03-11T03:59:59-04:00')\n    expect(d.format()).toBe(m.format())\n    expect(d.valueOf()).toBe(m.valueOf())\n    expect(d.valueOf()).toBe(1331452799000)\n    expect(d.utcOffset()).toBe(-240)\n    expect(d.utcOffset()).toBe(m.utcOffset())\n  })\n  it('2012-03-11 03:00:00', () => {\n    const s = '2012-03-11 03:00:00'\n    const d = dayjs.tz(s, NY)\n    const m = moment.tz(s, NY)\n    expect(d.format()).toBe('2012-03-11T03:00:00-04:00')\n    expect(d.format()).toBe(m.format())\n    expect(d.valueOf()).toBe(m.valueOf())\n    expect(d.valueOf()).toBe(1331449200000)\n    expect(d.utcOffset()).toBe(-240)\n    expect(d.utcOffset()).toBe(m.utcOffset())\n  })\n})\n\ndescribe('DST, a time that never existed Fall Back', () => {\n  // In the fall, at the end of DST\n\n  it('2012-11-04 00:59:59', () => {\n    const s = '2012-11-04 00:59:59';\n    [dayjs, moment].forEach((_) => {\n      const d = _.tz(s, NY)\n      expect(d.format()).toBe('2012-11-04T00:59:59-04:00')\n      expect(d.utcOffset()).toBe(-240)\n      expect(d.valueOf()).toBe(1352005199000)\n    })\n  })\n  it('2012-11-04 00:59:59', () => {\n    const s = '2012-11-04 00:59:59';\n    [dayjs, moment].forEach((_) => {\n      const d = _.tz(s, NY)\n      expect(d.format()).toBe('2012-11-04T00:59:59-04:00')\n      expect(d.utcOffset()).toBe(-240)\n      expect(d.valueOf()).toBe(1352005199000)\n    })\n  })\n\n  // there's no sense to test \"2012-11-04 01:59:59 America/New_York\"\n  // cause it's an invalid date and never exist\n  // and dayjs result it as \"2012-11-04T01:59:00-05:00\"\n\n  it('2012-11-04 02:00:00', () => {\n    const s = '2012-11-04 02:00:00';\n    [dayjs, moment].forEach((_) => {\n      const d = _.tz(s, NY)\n      expect(d.format()).toBe('2012-11-04T02:00:00-05:00')\n      expect(d.utcOffset()).toBe(-300)\n      expect(d.valueOf()).toBe(1352012400000)\n    })\n  })\n})\n\nit('DST valueOf', () => {\n  const day1 = '2021-11-17T09:45:00.000Z'\n  const d1 = dayjs.utc(day1).tz(PARIS)\n  const m1 = moment.tz(day1, PARIS)\n  expect(d1.valueOf()).toBe(m1.valueOf())\n\n  const day2 = '2021-05-17T09:45:00.000Z'\n  const d2 = dayjs.utc(day2).tz(PARIS)\n  const m2 = moment.tz(day2, PARIS)\n  expect(d2.valueOf()).toBe(m2.valueOf())\n})\n\ndescribe('set Default', () => {\n  it('default timezone', () => {\n    const dateStr = '2014-06-01 12:00'\n    dayjs.tz.setDefault(NY)\n    const newYork = dayjs.tz(dateStr)\n    expect(newYork.format()).toBe('2014-06-01T12:00:00-04:00')\n    expect(newYork.utcOffset()).toBe(-240)\n    expect(newYork.valueOf()).toBe(1401638400000)\n\n    expect(dayjs(dateStr).tz().format()).toBe(dayjs(dateStr).tz(NY).format())\n  })\n\n  it('empty timezone means local timezone', () => {\n    const LOCAL_TZ = dayjs.tz.guess()\n    const dateStr = '2014-06-01 12:00'\n    dayjs.tz.setDefault()\n    expect(dayjs(dateStr).tz().valueOf()).toBe(dayjs(dateStr).tz(LOCAL_TZ).valueOf())\n    expect(dayjs.tz(dateStr).valueOf()).toBe(dayjs.tz(dateStr, LOCAL_TZ).valueOf())\n  })\n\n  it('change default timezone', () => {\n    dayjs.tz.setDefault(NY)\n    const newYork = dayjs.tz('2014-06-01 12:00')\n    expect(newYork.utcOffset()).toBe(-240)\n\n    dayjs.tz.setDefault(TOKYO)\n    const tokyo = dayjs.tz('2014-06-01 12:00')\n    expect(tokyo.format()).toBe('2014-06-01T12:00:00+09:00')\n    expect(tokyo.format('Z')).toBe('+09:00')\n    expect(tokyo.valueOf()).toBe(1401591600000)\n  })\n\n  it('override default timezone in proto.tz', () => {\n    dayjs.tz.setDefault(NY)\n    const tokyo = dayjs.tz('2014-06-01 12:00', TOKYO)\n    expect(tokyo.format()).toBe('2014-06-01T12:00:00+09:00')\n    expect(tokyo.format('Z')).toBe('+09:00')\n    expect(tokyo.valueOf()).toBe(1401591600000)\n  })\n\n  it('override default timezone in d.tz', () => {\n    dayjs.tz.setDefault(NY)\n    const tokyo = dayjs.tz('2014-06-01 12:00', TOKYO)\n    expect(tokyo.format()).toBe('2014-06-01T12:00:00+09:00')\n    expect(tokyo.format('Z')).toBe('+09:00')\n    expect(tokyo.valueOf()).toBe(1401591600000)\n  })\n})\n\ndescribe('keepLocalTime', () => {\n  const base = dayjs.tz('2013-11-18 11:55', 'America/Toronto')\n  it('keepLocalTime', () => {\n    expect(base.tz('Europe/Berlin').format()).toBe('2013-11-18T17:55:00+01:00')\n    expect(base.tz('Europe/Berlin', true).format()).toBe('2013-11-18T11:55:00+01:00')\n  })\n})\n\ndescribe('Get offsetName', () => {\n  const dtz = dayjs.tz('2012-03-11 01:59:59', NY)\n  it('short', () => {\n    const d = dtz.offsetName('short')\n    const m = moment.tz('2012-03-11 01:59:59', NY).format('z')\n    expect(d).toBe(m)\n    expect(d).toBe('EST')\n  })\n  it('long', () => {\n    const d = dtz.offsetName('long')\n    expect(d).toBe('Eastern Standard Time')\n  })\n})\n\ndescribe('CustomPraseFormat', () => {\n  const result = 1602786600\n  it('normal', () => {\n    expect(dayjs.tz('2020/10/15 12:30', DEN).unix()).toBe(result)\n  })\n  it('custom', () => {\n    expect(dayjs.tz('10/15/2020 12:30', 'MM/DD/YYYY HH:mm', DEN).unix()).toBe(result)\n  })\n})\n\ndescribe('startOf and endOf', () => {\n  it('corrects for timezone offset in startOf', () => {\n    const originalDay = dayjs.tz('2010-01-01 00:00:00', NY)\n    const startOfDay = originalDay.startOf('day')\n    expect(startOfDay.valueOf()).toEqual(originalDay.valueOf())\n  })\n\n  it('corrects for timezone offset in endOf', () => {\n    const originalDay = dayjs.tz('2009-12-31 23:59:59.999', NY)\n    const endOfDay = originalDay.endOf('day')\n    expect(endOfDay.valueOf()).toEqual(originalDay.valueOf())\n  })\n\n  it('preserves locality when tz is called', () => {\n    const tzWithoutLocality = dayjs.tz('2023-02-17 00:00:00', NY)\n    const tzWithLocality = dayjs.tz('2023-02-17 00:00:00', NY).locale({\n      name: 'locale_test',\n      weekStart: 3\n    })\n\n    expect(tzWithoutLocality.startOf('week').format('YYYY-MM-DD')).toEqual('2023-02-12')\n    expect(tzWithLocality.startOf('week').format('YYYY-MM-DD')).toEqual('2023-02-15')\n  })\n})\n\n\ndescribe('UTC timezone', () => {\n  it('TZ with UTC with Locale', () => {\n    const test1 = dayjs('2000-01-01T09:00:00+09:00').tz('Asia/Seoul').locale('en')\n    expect(test1.hour()).toBe(9)\n    const test2 = dayjs('2000-01-01T09:00:00+09:00').tz('Asia/Hong_Kong').locale('en')\n    expect(test2.hour()).toBe(8)\n    const test3 = dayjs('2000-01-01T09:00:00+09:00').tz('Etc/UTC').locale('en')\n    expect(test3.hour()).toBe(0)\n  })\n\n  it('TZ with UTC', () => {\n    const dayjs1 = dayjs('2000-01-01T09:01:00+09:00').tz('Etc/UTC', false)\n    expect(dayjs1.format()).toBe('2000-01-01T00:01:00Z')\n    const moment1 = moment('2000-01-01T09:01:00+09:00').tz('Etc/UTC', false)\n    expect(moment1.format()).toBe('2000-01-01T00:01:00Z')\n    const dayjs2 = dayjs('2000-01-01T09:01:00+09:00').tz('Etc/UTC', true)\n    const moment2 = moment('2000-01-01T09:01:00+09:00').tz('Etc/UTC', true)\n    expect(dayjs2.format()).toBe(moment2.format())\n  })\n})\n"
  },
  {
    "path": "test/plugin/toArray.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport toArray from '../../src/plugin/toArray'\n\ndayjs.extend(toArray)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('As Array -> toArray', () => {\n  expect(dayjs().toArray()).toEqual(moment().toArray())\n})\n"
  },
  {
    "path": "test/plugin/toObject.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport toObject from '../../src/plugin/toObject'\n\ndayjs.extend(toObject)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('As Object -> toObject', () => {\n  expect(dayjs().toObject()).toEqual(moment().toObject())\n})\n"
  },
  {
    "path": "test/plugin/updateLocale.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport updateLocale from '../../src/plugin/updateLocale'\nimport localizedFormat from '../../src/plugin/localizedFormat'\nimport '../../src/locale/zh-cn'\n\ndayjs.extend(updateLocale)\ndayjs.extend(localizedFormat)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nconst newLocale = {\n  months: new Array(12).fill('testMonth'),\n  formats: { // formats for dayjs and longDateFormat for momentjs\n    LT: '[testFormat]'\n  },\n  longDateFormat: {\n    LT: '[testFormat]'\n  }\n}\n\nconst formatString = 'MMMM LT'\n\ndescribe('Update locale', () => {\n  it('Invalid argument', () => {\n    const result = dayjs.updateLocale('InvalidLocaleName', {})\n    expect(result)\n      .toEqual(undefined)\n    expect(dayjs().format(formatString))\n      .toEqual(moment().format(formatString))\n  })\n\n  it('Return value', () => {\n    const result1 = dayjs.updateLocale('en')\n    expect(typeof result1).toEqual('object')\n    const result2 = dayjs.updateLocale('en', {})\n    expect(typeof result2).toEqual('object')\n    const result3 = dayjs.updateLocale('en', newLocale)\n    expect(typeof result3).toEqual('object')\n  })\n\n  it('Update build-in en locale', () => {\n    moment.updateLocale('en', newLocale)\n    dayjs.updateLocale('en', newLocale)\n\n    expect(dayjs().format(formatString))\n      .toEqual('testMonth testFormat')\n\n    expect(dayjs().format(formatString))\n      .toEqual(moment().format(formatString))\n  })\n\n  it('Update imported zh-cn locale', () => {\n    moment.updateLocale('zh-cn', newLocale)\n    dayjs.updateLocale('zh-cn', newLocale)\n    dayjs.locale('zh-cn')\n    moment.locale('zh-cn')\n    expect(dayjs().format(formatString))\n      .toEqual('testMonth testFormat')\n\n    expect(dayjs().format(formatString))\n      .toEqual(moment().format(formatString))\n  })\n\n  it('Partial update to nested object (formats)', () => {\n    dayjs.locale('en')\n    // First, get the original formats\n    const originalLocale = dayjs.Ls.en\n    const originalLT = originalLocale.formats && originalLocale.formats.LT\n\n    // Update only L format\n    dayjs.updateLocale('en', {\n      formats: {\n        L: 'DD/MM/YYYY'\n      }\n    })\n\n    const updatedLocale = dayjs.Ls.en\n    // The updated key should have the new value\n    expect(updatedLocale.formats.L).toBe('DD/MM/YYYY')\n    // Other keys in formats should be preserved\n    expect(updatedLocale.formats.LT).toBe(originalLT)\n  })\n\n  it('Non-object values should still be replaced entirely', () => {\n    const newMonths = new Array(12).fill('newMonth')\n    dayjs.updateLocale('en', {\n      months: newMonths\n    })\n    const updatedLocale = dayjs.Ls.en\n    expect(updatedLocale.months).toEqual(newMonths)\n  })\n\n  it('Update invalid date string', () => {\n    const locale = 'en'\n    const localeSetting = { invalidDate: 'bad date' }\n    dayjs.updateLocale(locale, localeSetting)\n    moment.updateLocale(locale, localeSetting)\n    dayjs.locale(locale)\n    moment.locale(locale)\n    expect(dayjs('').format()).toBe(moment('').format())\n    expect(dayjs('otherString').format()).toBe(moment('otherString').format())\n  })\n})\n"
  },
  {
    "path": "test/plugin/utc-utcOffset.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport utc from '../../src/plugin/utc'\n\ndayjs.extend(utc)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Set utcOffset -> Get utcOffset', () => {\n  expect(dayjs().utcOffset(540).utcOffset()).toBe(moment().utcOffset(540).utcOffset())\n  expect(dayjs().utcOffset(540).format()).toBe(moment().utcOffset(540).format())\n  expect(dayjs().utcOffset(60).format()).toBe(moment().utcOffset(60).format())\n  expect(dayjs().utcOffset(8).format()).toBe(moment().utcOffset(8).format())\n\n  expect(dayjs().utcOffset(-540).utcOffset()).toBe(moment().utcOffset(-540).utcOffset())\n  expect(dayjs().utcOffset(-540).format()).toBe(moment().utcOffset(-540).format())\n\n  expect(dayjs().utcOffset(-60).format()).toBe(moment().utcOffset(-60).format())\n  expect(dayjs().utcOffset(-8).format()).toBe(moment().utcOffset(-8).format())\n})\n\nit('valueOf, toDate, toString, toISOString should be the same as original', () => {\n  const d = dayjs()\n  const du = dayjs().utcOffset(9)\n  const mu = moment().utcOffset(9)\n  expect(d.valueOf()).toBe(du.valueOf())\n  expect(du.valueOf()).toBe(mu.valueOf())\n  expect(d.toDate()).toEqual(du.toDate())\n  expect(du.toDate()).toEqual(mu.toDate())\n  expect(du.toISOString()).toEqual(mu.toISOString())\n  expect(d.toString()).toEqual(d.toString())\n})\n\nit('clone', () => {\n  const du = dayjs().utcOffset(9)\n  const duClone = du.clone()\n  expect(du.valueOf()).toBe(duClone.valueOf())\n  expect(du.format()).toBe(duClone.format())\n  expect(du.utcOffset()).toBe(duClone.utcOffset())\n})\n\nit('immutable', () => {\n  const d = dayjs()\n  const du = d.utcOffset(d.utcOffset() + 1)\n  expect(d.utcOffset()).not.toBe(du.utcOffset())\n  expect(d.format()).not.toBe(du.format())\n})\n\nit('utcOffset(0) enable utc mode', () => {\n  expect(dayjs().utcOffset(0).format()).toBe(moment().utcOffset(0).format())\n  expect(dayjs().utcOffset(0).isUTC()).toBeTruthy()\n})\n\nit('utcOffset keepLocalTime', () => {\n  const d = '2000-01-01T06:00:00Z'\n  expect(dayjs.utc(d).utcOffset(5, true).format())\n    .toBe(moment.utc(d).utcOffset(5, true).format())\n  expect(dayjs.utc(d).utcOffset(0, true).format())\n    .toBe(moment.utc(d).utcOffset(0, true).format())\n  expect(dayjs.utc(d).utcOffset(-5, true).format())\n    .toBe(moment.utc(d).utcOffset(-5, true).format())\n  const d2 = '2016-01-01 00:00:00'\n  expect(dayjs(d2).utcOffset(0, true).format())\n    .toBe(moment(d2).utcOffset(0, true).format())\n  expect(dayjs(d2).utcOffset(-5, true).format())\n    .toBe(moment(d2).utcOffset(-5, true).format())\n  expect(dayjs(d2).utcOffset(5, true).format())\n    .toBe(moment(d2).utcOffset(5, true).format())\n})\n\ntest('UTC mode', () => {\n  const d = dayjs.utc('2000-01-01T06:00:00Z')\n  expect(d.isUTC()).toBeTruthy()\n  expect(d.utcOffset(0).isUTC()).toBeTruthy()\n  expect(d.utcOffset(1).isUTC()).toBeFalsy()\n})\n\ntest('change hours when changing the utc offset in UTC mode', () => {\n  const d = dayjs.utc('2000-01-01T06:31:00Z')\n  expect(d.hour()).toBe(6)\n  expect(d.utcOffset(0).hour()).toBe(6)\n  expect(d.utcOffset(-60).hour()).toBe(5)\n  expect(d.utcOffset(60).hour()).toBe(7)\n  expect(d.utcOffset(-30).format('HH:mm')).toBe('06:01')\n  expect(d.utcOffset(30).format('HH:mm')).toBe('07:01')\n  expect(d.utcOffset(-1380).format('HH:mm')).toBe('07:31')\n})\n\ntest('correctly set and add hours in offset mode', () => {\n  const d10 = dayjs('2000-01-30T06:31:00+10:00').utcOffset(10)\n  const dm8 = dayjs('2000-01-30T06:31:00-08:00').utcOffset(-8)\n\n  expect(d10.hour(5).hour()).toBe(5)\n  expect(d10.hour(5).add(1, 'hour').hour()).toBe(6)\n  expect(d10.hour(5).add(-10, 'hour').hour()).toBe(19)\n\n  expect(dm8.hour(5).hour()).toBe(5)\n  expect(dm8.hour(5).add(1, 'hour').hour()).toBe(6)\n  expect(dm8.hour(5).add(-10, 'hour').hour()).toBe(19)\n})\n\ntest('keep hours when adding month in offset mode', () => {\n  const d10 = dayjs('2000-01-30T06:31:00+10:00').utcOffset(10)\n  const dm8 = dayjs('2000-01-30T06:31:00-08:00').utcOffset(-8)\n\n  expect(d10.add(1, 'month').hour()).toBe(6)\n  expect(dm8.add(1, 'month').hour()).toBe(6)\n\n  expect(d10.add(-2, 'month').hour()).toBe(6)\n  expect(dm8.add(-2, 'month').hour()).toBe(6)\n})\n\ntest('utc costrustor', () => {\n  const d = new Date(2019, 8, 11, 0, 0, 0).getTime()\n  expect(moment(d).utc().utcOffset(480).valueOf())\n    .toBe(dayjs(d).utc().utcOffset(480).valueOf())\n\n  expect(moment(d).utc().local()\n    .utcOffset(480)\n    .valueOf())\n    .toBe(dayjs(d).utc().local()\n      .utcOffset(480)\n      .valueOf())\n})\n\ntest('utc startOf', () => {\n  const d = new Date(2019, 8, 11, 0, 0, 0, 0).getTime()\n  expect(moment(d).utc().utcOffset(480).endOf('day')\n    .valueOf())\n    .toBe(dayjs(d).utc().utcOffset(480).endOf('day')\n      .valueOf())\n\n  expect(moment(d).utc().utcOffset(480).endOf('day')\n    .valueOf())\n    .toBe(dayjs(d).utc().utcOffset(480).endOf('day')\n      .valueOf())\n  const d2 = '2017-07-20T11:00:00+00:00'\n  const d2d = dayjs(d2).utcOffset(-12).startOf('day').valueOf()\n  const d2m = moment(d2).utcOffset(-12).startOf('day').valueOf()\n  expect(d2d)\n    .toBe(d2m)\n  expect(d2d)\n    .toBe(1500465600000)\n})\n\ntest('cloning dates modified with utcOffset', () => {\n  const djs = dayjs('2023-10-29T00:00:00+03:00')\n\n  const tests = [\n    djs,\n    djs.utcOffset(-240),\n    djs.utcOffset(-240, true),\n    djs.utcOffset(120),\n    djs.utcOffset(120, true),\n    djs.utcOffset(0),\n    djs.utcOffset(0, true)\n  ]\n\n  tests.forEach((d) => {\n    expect(dayjs(d).format()).toEqual(d.format())\n  })\n})\n"
  },
  {
    "path": "test/plugin/utc.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport customParseFormat from '../../src/plugin/customParseFormat'\nimport utc from '../../src/plugin/utc'\n\ndayjs.extend(utc)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\ndescribe('UTC Get', () => {\n  it('UTC Year', () => {\n    expect(dayjs().utc().year()).toBe(moment().utc().year())\n  })\n\n  it('UTC Month', () => {\n    expect(dayjs().utc().month()).toBe(moment().utc().month())\n  })\n\n  it('UTC Day of Week', () => {\n    expect(dayjs().utc().day()).toBe(moment().utc().day())\n  })\n\n  it('UTC Date', () => {\n    expect(dayjs().utc().date()).toBe(moment().utc().date())\n  })\n\n  it('UTC Hour', () => {\n    expect(dayjs().utc().hour()).toBe(moment().utc().hour())\n  })\n\n  it('UTC Minute', () => {\n    expect(dayjs().utc().minute()).toBe(moment().utc().minute())\n  })\n\n  it('UTC Second', () => {\n    expect(dayjs().utc().second()).toBe(moment().utc().second())\n  })\n\n  it('UTC Millisecond', () => {\n    expect(dayjs().utc().millisecond()).toBe(moment().utc().millisecond())\n  })\n})\n\ndescribe('Parse UTC ', () => {\n  it('Parse Now', () => {\n    expect(dayjs.utc().format()).toBe(moment.utc().format())\n    expect(dayjs().utc().format()).toBe(moment().utc().format())\n  })\n\n  it('Parse date string without timezone', () => {\n    const d = '2018-09-06'\n    expect(dayjs.utc(d).format()).toEqual(moment.utc(d).format())\n    expect(dayjs.utc(d).format()).toEqual('2018-09-06T00:00:00Z')\n    expect(dayjs(d).utc().format()).toEqual(moment(d).utc().format())\n    const d2 = '2018-09'\n    expect(dayjs.utc(d2).format()).toEqual(moment.utc(d2).format())\n    expect(dayjs.utc(d2).format()).toEqual('2018-09-01T00:00:00Z')\n    expect(dayjs(d2).utc().format()).toEqual(moment(d2).utc().format())\n    const d3 = '2018'\n    expect(dayjs.utc(d3).format()).toEqual(moment.utc(d3).format())\n    expect(dayjs.utc(d3).format()).toEqual('2018-01-01T00:00:00Z')\n    expect(dayjs(d3).utc().format()).toEqual(moment(d3).utc().format())\n  })\n\n  it('creating with utc with timezone', () => {\n    const d = '2011-02-02T03:04:05+00:00'\n    expect(dayjs.utc(d).format()).toEqual(moment.utc(d).format())\n    const d2 = '2012-01-02T08:20:00+09:00'\n    expect(dayjs.utc(d2).format()).toEqual(moment.utc(d2).format())\n  })\n\n  it('Parse date string without timezone', () => {\n    const d = '2017-04-22 19:50:16'\n    expect(dayjs.utc(d).format()).toEqual('2017-04-22T19:50:16Z')\n    expect(dayjs.utc(d).format()).toEqual(moment.utc(d).format())\n    expect(dayjs(d).utc().format()).toBe(moment(d).utc().format())\n    const d2 = '2012-01-02T08:20:00'\n    expect(dayjs.utc(d2).format()).toEqual(moment.utc(d2).format())\n  })\n\n  it('Parse date string set utc in config', () => {\n    const d = '2018-09-06T19:34:28Z'\n    expect(dayjs(d, { utc: true }).format()).toEqual('2018-09-06T19:34:28Z')\n    expect(dayjs(d, { utc: true }).format()).toEqual(moment(d).utc().format())\n    expect(dayjs(d).utc().format()).toEqual('2018-09-06T19:34:28Z')\n    expect(dayjs(d).utc().format()).toEqual(moment(d).utc().format())\n    expect(dayjs.utc(d).format()).toEqual('2018-09-06T19:34:28Z')\n    expect(dayjs.utc(d).format()).toEqual(moment.utc(d).format())\n  })\n\n  it('parses unlimited millisecond in utc', () => {\n    const date = '2019-03-25T06:41:00.999999999'\n    const ds = dayjs.utc(date)\n    const ms = moment.utc(date)\n    expect(ds.valueOf()).toEqual(ms.valueOf())\n    expect(ds.millisecond()).toEqual(ms.millisecond())\n  })\n})\n\nit('Clone retains the UTC mode', () => {\n  const instance = dayjs('2018-09-06').utc()\n  const another = instance.clone()\n  expect(another.$u).toBeTruthy()\n})\n\nit('UTC mode format tokens', () => {\n  const d = '2018-09-06T19:34:28.657Z'\n  const instance = dayjs(d).utc()\n  const format = 'HH-hh-mm-ss-SSS-Z-ZZ'\n  expect(instance.format(format)).toBe('19-07-34-28-657-+00:00-+0000')\n  expect(instance.format(format)).toBe(moment.utc(d).format(format))\n})\n\ndescribe('local', () => {\n  it('Returns a new instance', () => {\n    const instance = dayjs.utc('2018-09-06T19:34:28.657Z')\n    const local = instance.local()\n    expect(local).not.toBe(instance)\n  })\n\n  it('UTC to local', () => {\n    const d = '2018-09-06'\n    expect(dayjs.utc(d).local().format()).toEqual(moment.utc(d).local().format())\n  })\n})\n\nit('StartOf EndOf Year ... in UTC mode', () => {\n  const testArr = ['year', 'month', 'day', 'date', 'week', 'hour', 'minute', 'second']\n  testArr.forEach((d) => {\n    expect(dayjs().utc().startOf(d).format()).toBe(moment().utc().startOf(d).format())\n    expect(dayjs().utc().endOf(d).format()).toBe(moment().utc().endOf(d).format())\n  })\n})\n\ndescribe('UTC Set', () => {\n  it('Set UTC Day', () => {\n    expect(dayjs().utc().set('date', 30).valueOf()).toBe(moment().utc().set('date', 30).valueOf())\n  })\n\n  it('Set UTC Day of Week', () => {\n    expect(dayjs().utc().set('day', 0).valueOf()).toBe(moment().utc().set('day', 0).valueOf())\n  })\n\n  it('Set UTC Month', () => {\n    expect(dayjs().utc().set('month', 11).valueOf()).toBe(moment().utc().set('month', 11).valueOf())\n  })\n\n  it('Set UTC Year', () => {\n    expect(dayjs().utc().set('year', 2008).valueOf()).toBe(moment().utc().set('year', 2008).valueOf())\n  })\n\n  it('Set UTC Hour', () => {\n    expect(dayjs().utc().set('hour', 6).valueOf()).toBe(moment().utc().set('hour', 6).valueOf())\n  })\n\n  it('Set UTC Minute', () => {\n    expect(dayjs().utc().set('minute', 59).valueOf()).toBe(moment().utc().set('minute', 59).valueOf())\n  })\n\n  it('Set UTC Second', () => {\n    expect(dayjs().utc().set('second', 59).valueOf()).toBe(moment().utc().set('second', 59).valueOf())\n  })\n\n  it('Set UTC Millisecond', () => {\n    expect(dayjs().utc().set('millisecond', 999).valueOf()).toBe(moment().utc().set('millisecond', 999).valueOf())\n  })\n})\n\nit('isUTC', () => {\n  expect(dayjs().isUTC()).toBe(false)\n  expect(dayjs().utc().isUTC()).toBe(true)\n  expect(dayjs.utc().isUTC()).toBe(true)\n})\n\ndescribe('UTC and local', () => {\n  const localDay = dayjs(Date.UTC(2011, 1, 2, 3, 4, 5, 6))\n  const utcDay = localDay.utc()\n\n  it('utc', () => {\n    expect(utcDay.date()).toBe(2)\n    expect(utcDay.day()).toBe(3)\n    expect(utcDay.hour()).toBe(3)\n  })\n\n  const localAnainDay = utcDay.local()\n  it('local', () => {\n    if (localAnainDay.utcOffset() < -180) {\n      expect(localAnainDay.date()).toBe(1)\n      expect(localAnainDay.day()).toBe(2)\n    } else {\n      expect(localAnainDay.date()).toBe(2)\n      expect(localAnainDay.day()).toBe(3)\n    }\n  })\n\n  const offset = Math.floor(localAnainDay.utcOffset() / 60)\n  const expected = (24 + 3 + offset) % 24\n  it('utcOffset', () => {\n    expect(localAnainDay.hour()).toBe(expected)\n    expect(dayjs().utc().utcOffset()).toBe(0)\n  })\n})\n\n\ndescribe('UTC with customParseFormat', () => {\n  it('Custom Parse Format', () => {\n    dayjs.extend(customParseFormat)\n    const instant = dayjs.utc('2011-02-02 03:04:05', 'YYYY-MM-DD HH:mm:ss')\n    const momentInstant = moment.utc('2011-02-02 03:04:05', 'YYYY-MM-DD HH:mm:ss')\n    expect(instant.date()).toBe(2)\n    expect(instant.hour()).toBe(3)\n    expect(instant.format()).toBe('2011-02-02T03:04:05Z')\n    expect(instant.format()).toBe(momentInstant.format())\n  })\n})\n\ndescribe('UTC Offset', () => {\n  it('get utcOffset', () => {\n    expect(dayjs().utcOffset()).toBe(moment().utcOffset())\n    expect(dayjs().utc().utcOffset()).toBe(moment().utc().utcOffset())\n  })\n\n  it('get utc offset with a number value', () => {\n    const time = '2021-02-28 19:40:10'\n    const hoursOffset = -8\n    const daysJS = dayjs(time).utc().utcOffset(hoursOffset * 60, true)\n    const momentJS = moment(time).utc(true).utcOffset(hoursOffset, true)\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(hoursOffset * 60)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with a negative valid string value, format: HH:mm', () => {\n    const time = '2021-02-28 19:40:10'\n    const hoursOffset = -8\n    const daysJS = dayjs(time).utc().utcOffset(`-0${Math.abs(hoursOffset)}:00`, true)\n    const momentJS = moment(time).utc(true).utcOffset(`-0${Math.abs(hoursOffset)}:00`, true)\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(hoursOffset * 60)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with a positive valid string value, format: HH:mm', () => {\n    const time = '2021-02-28 19:40:10'\n    const hoursOffset = 8\n    const daysJS = dayjs(time).utc().utcOffset(`+0${hoursOffset}:00`, true)\n    const momentJS = moment(time).utc(true).utcOffset(`+0${hoursOffset}:00`, true)\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(hoursOffset * 60)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with a negative valid string value, format: HHmm', () => {\n    const time = '2021-02-28 19:40:10'\n    const hoursOffset = -8\n    const daysJS = dayjs(time).utc().utcOffset(`-0${Math.abs(hoursOffset)}00`, true)\n    const momentJS = moment(time).utc(true).utcOffset(`-0${Math.abs(hoursOffset)}00`, true)\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(hoursOffset * 60)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with a positive valid string value, format: HHmm', () => {\n    const time = '2021-02-28 19:40:10'\n    const hoursOffset = 8\n    const daysJS = dayjs(time).utc().utcOffset(`+0${hoursOffset}00`, true)\n    const momentJS = moment(time).utc(true).utcOffset(`+0${hoursOffset}00`, true)\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(hoursOffset * 60)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with an invalid string value, value: random', () => {\n    const time = '2021-02-28 19:40:10'\n    const daysJS = dayjs(time, { utc: true }).utc(true).utcOffset('random')\n    const momentJS = moment(time).utc(true).utcOffset('random')\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(0)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n\n  it('get utc offset with an invalid string value, value: 0', () => {\n    const time = '2021-02-28 19:40:10'\n    const daysJS = dayjs(time, { utc: true }).utc(true).utcOffset('+0000')\n    const momentJS = moment(time).utc(true).utcOffset('+0000')\n\n    expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n    expect(daysJS.utcOffset()).toEqual(0)\n    expect(daysJS.utcOffset()).toEqual(momentJS.utcOffset())\n  })\n})\n\ndescribe('Diff', () => {\n  const d1 = '2021-06-07'\n  const d2 = '2021-06-06'\n  it('utc.diff(utc)', () => {\n    [dayjs, moment].forEach((_) => {\n      expect(_.utc(d1).diff(_.utc(d2), 'days')).toBe(1)\n      expect(_.utc(d1).diff(_.utc(d2), 'm')).toBe(1440)\n    })\n  })\n  it('default diff', () => {\n    expect(dayjs().diff()).toBeDefined()\n  })\n  it('local.diff(utc)', () => {\n    expect(dayjs(d1).diff(dayjs.utc(d2), 'days'))\n      .toBe(moment(d1).diff(moment.utc(d2), 'days'))\n    expect(dayjs(d1).diff(dayjs.utc(d2), 'm'))\n      .toBe(moment(d1).diff(moment.utc(d2), 'm'))\n  })\n  it('utc.diff(local)', () => {\n    expect(dayjs.utc(d1).diff(d2, 'days'))\n      .toBe(moment.utc(d1).diff(d2, 'days'))\n    expect(dayjs.utc(d1).diff(d2, 'm'))\n      .toBe(moment.utc(d1).diff(d2, 'm'))\n  })\n})\n\nit('utc keepLocalTime', () => {\n  const t = '2016-05-03 22:15:01'\n  const d = dayjs(t).utc(true)\n  const m = moment(t).utc(true)\n  const fd = d.format()\n  const dd = d.toDate()\n  const vd = d.valueOf()\n  const fm = m.format()\n  const dm = m.toDate()\n  const vm = m.valueOf()\n  expect(fd).toEqual(fm)\n  expect(fd).toEqual('2016-05-03T22:15:01Z')\n  expect(dd).toEqual(dm)\n  expect(vd).toEqual(vm)\n})\n\nit('utc diff undefined edge case', () => {\n  expect(dayjs().diff(undefined, 'seconds')).toBeDefined()\n})\n"
  },
  {
    "path": "test/plugin/weekOfYear.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport advancedFormat from '../../src/plugin/advancedFormat'\nimport '../../src/locale/en-gb'\n\ndayjs.extend(advancedFormat)\ndayjs.extend(weekOfYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Week of year', () => {\n  dayjs.locale('en')\n\n  const day = '2018-12-31T10:59:09+08:00'\n  const week = 27\n  expect(dayjs(day).week()).toBe(moment(day).week())\n  expect(dayjs().week()).toBe(moment().week())\n  expect(dayjs().week(week).week()).toBe(moment().week(week).week())\n  expect(dayjs().weeks(week).week()).toBe(moment().weeks(week).week())\n  expect(dayjs().weeks(-week).week()).toBe(moment().weeks(-week).week())\n  expect(dayjs().weeks(55).week()).toBe(moment().weeks(55).week())\n  expect(dayjs().weeks()).toBe(moment().weeks())\n})\n\nit('Week of year with locale', () => {\n  dayjs.locale('en-gb')\n  moment.locale('en-gb')\n  const day = '2019-07-28'\n  expect(dayjs(day).week()).toBe(moment(day).week())\n})\n\ndescribe('Week of year with locale edges', () => {\n  const testCases = [\n    '2018-12-30',\n    '2018-12-31',\n    '2019-12-29',\n    '2019-12-30',\n    '2016-01-01',\n    '2016-01-04'\n  ]\n  testCases.forEach((t) => {\n    it(`Edges ${t}`, () => {\n      expect(dayjs(t).week())\n        .toBe(moment(t).week())\n    })\n  })\n})\n\nit('Format w ww wo', () => {\n  const day = '2019-07-28'\n  const D = dayjs(day)\n  const M = moment(day)\n  expect(D.format('w ww wo')).toBe(M.format('w ww wo'))\n})\n"
  },
  {
    "path": "test/plugin/weekYear.test.js",
    "content": "import moment from 'moment'\nimport MockDate from 'mockdate'\nimport dayjs from '../../src'\nimport weekYear from '../../src/plugin/weekYear'\nimport weekOfYear from '../../src/plugin/weekOfYear'\nimport '../../src/locale/en-gb'\n\ndayjs.extend(weekYear)\ndayjs.extend(weekOfYear)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Week Year', () => {\n  const daySet = [\n    ['2018-12-01', 2018],\n    ['2018-12-30', 2019],\n    ['2018-12-31', 2019],\n    ['2019-01-01', 2019]\n  ]\n  daySet.forEach((d) => {\n    const [day, result] = d\n    const dResult = dayjs(day).weekYear()\n    expect(dResult).toBe(result)\n    expect(dResult).toBe(moment(day).weekYear())\n  })\n})\n\nit('yearStart: 4', () => {\n  const daySet = [\n    ['2020-12-31', 2020],\n    ['2021-01-01', 2020],\n    ['2021-01-02', 2020],\n    ['2021-01-03', 2020],\n    ['2021-01-04', 2021],\n    ['2021-01-05', 2021]\n  ]\n  daySet.forEach((d) => {\n    const [day, result] = d\n    const dResult = dayjs(day).locale('en-gb').weekYear()\n    expect(dResult).toBe(result)\n    expect(dResult).toBe(moment(day).locale('en-gb').weekYear())\n  })\n})\n"
  },
  {
    "path": "test/plugin/weekday.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../../src'\nimport weekday from '../../src/plugin/weekday'\nimport '../../src/locale/zh-cn'\nimport '../../src/locale/ar'\n\ndayjs.extend(weekday)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n  moment.locale('en')\n  dayjs.locale('en')\n})\n\nit('Sunday is the first day of the week', () => {\n  expect(dayjs().weekday()).toBe(moment().weekday())\n  expect(dayjs().weekday(0).date()).toBe(moment().weekday(0).date())\n  expect(dayjs().weekday(-7).format()).toBe(moment().weekday(-7).format())\n  expect(dayjs().weekday(7).format()).toBe(moment().weekday(7).format())\n})\n\nit('Monday is the first day of the week', () => {\n  moment.locale('zh-cn')\n  dayjs.locale('zh-cn')\n  expect(dayjs().weekday()).toBe(moment().weekday())\n  expect(dayjs().weekday(0).date()).toBe(moment().weekday(0).date())\n  expect(dayjs().weekday(-7).format()).toBe(moment().weekday(-7).format())\n  expect(dayjs().weekday(7).format()).toBe(moment().weekday(7).format())\n  const d1 = '2020-01-05'\n  expect(dayjs(d1).weekday()).toBe(moment(d1).weekday())\n  const d2 = '2020-01-07'\n  expect(dayjs(d2).weekday()).toBe(moment(d2).weekday())\n})\n\nit('Saturday is the first day of the week', () => {\n  moment.locale('ar')\n  dayjs.locale('ar')\n  expect(dayjs().weekday()).toBe(moment().weekday())\n  expect(dayjs().weekday(0).date()).toBe(moment().weekday(0).date())\n  expect(dayjs().weekday(-7).valueOf()).toBe(moment().weekday(-7).valueOf())\n  expect(dayjs().weekday(7).valueOf()).toBe(moment().weekday(7).valueOf())\n})\n"
  },
  {
    "path": "test/plugin.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../src'\n\nconst testPlugin = (o, c, d) => {\n  c.prototype.newApi = () => ('hello world')\n  d.newFunc = () => ('hi world')\n}\nconst testPluginWithConfig = (o, c) => {\n  c.prototype.newApiWithConfig = () => (`hello world ${o || ''}`)\n}\n\ndayjs.extend(testPlugin)\ndayjs.extend(testPluginWithConfig, 'good')\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Plugin extend method and option', () => {\n  expect(dayjs().newApi()).toBe('hello world')\n  expect(dayjs().newApiWithConfig()).toBe('hello world good')\n})\n\nit('Plugin extend dayjs', () => {\n  expect(dayjs.newFunc()).toBe('hi world')\n})\n\nit('Plugin use core utils', () => {\n  // u => isUndefined\n  expect(dayjs().$utils().u).toBeInstanceOf(Function)\n})\n"
  },
  {
    "path": "test/query.test.js",
    "content": "import MockDate from 'mockdate'\nimport dayjs from '../src'\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\n\ndescribe('Is Before Is After Is Same', () => {\n  it('Compare to dayjs object', () => {\n    const dayA = dayjs()\n    const dayB = dayA.clone().add(1, 'day')\n    const dayC = dayA.clone().subtract(1, 'day')\n    expect(dayC.isBefore(dayA)).toBe(true)\n    expect(dayA.isSame(dayjs())).toBe(true)\n    expect(dayB.isAfter(dayA)).toBe(true)\n    expect(dayA.isSame()).toBe(true)\n    expect(dayB.isAfter()).toBe(true)\n    expect(dayC.isBefore()).toBe(true)\n  })\n\n  it('No value', () => {\n    const dayA = dayjs()\n    const dayB = dayA.clone().add(1, 'day')\n    const dayC = dayA.clone().subtract(1, 'day')\n    expect(dayA.isSame()).toBe(true)\n    expect(dayB.isAfter()).toBe(true)\n    expect(dayC.isBefore()).toBe(true)\n  })\n\n  it('With string', () => {\n    const dayD = dayjs()\n    expect(dayD.isSame('20180101')).toBe(false)\n    expect(dayD.isAfter('20180101')).toBe(true)\n    expect(dayD.isBefore('20180101')).toBe(false)\n  })\n})\n"
  },
  {
    "path": "test/timezone.test.js",
    "content": "import MockDate from 'mockdate'\nimport moment from 'moment'\nimport dayjs from '../src'\nimport timezone from '../src/plugin/timezone'\nimport utc from '../src/plugin/utc'\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\n\nbeforeEach(() => {\n  MockDate.set(new Date())\n})\n\nafterEach(() => {\n  MockDate.reset()\n})\n\nit('Add Time days (DST)', () => {\n  // change timezone before running test\n  // New Zealand (-720)\n  expect(dayjs('2018-04-01').add(1, 'd').format()).toBe(moment('2018-04-01').add(1, 'd').format())\n  expect(dayjs('2018-03-28').add(1, 'w').format()).toBe(moment('2018-03-28').add(1, 'w').format())\n  // London (-60)\n  expect(dayjs('2018-10-28').add(1, 'd').format()).toBe(moment('2018-10-28').add(1, 'd').format())\n  expect(dayjs('2018-10-26').add(1, 'w').format()).toBe(moment('2018-10-26').add(1, 'w').format())\n})\n\nit('Utc Offset', () => {\n  expect(dayjs().utcOffset()).toBe(moment().utcOffset())\n})\n\nit('Diff (DST)', () => {\n  const day = '2018-10-28'\n  const dayjsA = dayjs(day)\n  const dayjsB = dayjs(day).add(-1000, 'days')\n  const momentA = moment(day)\n  const momentB = moment(day).add(-1000, 'days')\n  const units = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'quarters', 'years']\n  units.forEach((unit) => {\n    expect(dayjsA.diff(dayjsB, unit)).toBe(momentA.diff(momentB, unit))\n    expect(dayjsA.diff(dayjsB, unit, true)).toBe(momentA.diff(momentB, unit, true))\n  })\n})\n\nit('UTC add day in DST', () => {\n  const testDate = '2019-03-10'\n  const dayTest = dayjs(testDate)\n    .utc()\n    .startOf('day')\n  const momentTest = moment(testDate)\n    .utc()\n    .startOf('day')\n  expect(dayTest.add(1, 'day').format())\n    .toBe(momentTest.clone().add(1, 'day').format())\n  expect(dayTest.add(2, 'day').format())\n    .toBe(momentTest.clone().add(2, 'day').format())\n})\n\nit('UTC and utcOffset', () => {\n  const test1 = 1331449199000 // 2012/3/11 06:59:59 GMT+0000\n  expect(dayjs(test1).utcOffset(-300).format())\n    .toBe(moment(test1).utcOffset(-300).format())\n  const test2 = '2000-01-01T06:31:00Z'\n  expect(dayjs.utc(test2).utcOffset(-60).format())\n    .toBe(moment.utc(test2).utcOffset(-60).format())\n\n  // across DST, copied from utc.test.js#get utc offset with a number value\n  const time = '2021-02-28 19:40:10'\n  const hoursOffset = -8\n  const daysJS = dayjs(time).utc().utcOffset(hoursOffset * 60, true)\n  const momentJS = moment(time).utc(true).utcOffset(hoursOffset, true)\n\n  expect(daysJS.toISOString()).toEqual(momentJS.toISOString())\n})\n\nit('UTC diff in DST', () => {\n  // DST till 2020-10-25\n  const day1 = dayjs.utc('20201023') // in DST\n  const day2 = dayjs.utc('20201026')\n  expect(day1.diff(day2, 'd'))\n    .toBe(-3)\n})\n"
  },
  {
    "path": "test/utils.test.js",
    "content": "import Utils from '../src/utils'\n\nconst prettyUnit = Utils.p\nconst padStart = Utils.s\nconst padZoneStr = Utils.z\n\nit('PrettyUnit', () => {\n  expect(prettyUnit('Days')).toBe('day')\n  expect(prettyUnit('days')).toBe('day')\n  expect(prettyUnit('day')).toBe('day')\n  expect(prettyUnit('quarter')).toBe('quarter')\n  expect(prettyUnit('quarters')).toBe('quarter')\n  expect(prettyUnit('D')).toBe('date')\n  expect(prettyUnit('d')).toBe('day')\n  expect(prettyUnit('M')).toBe('month')\n  expect(prettyUnit('y')).toBe('year')\n  expect(prettyUnit('h')).toBe('hour')\n  expect(prettyUnit('m')).toBe('minute')\n  expect(prettyUnit('s')).toBe('second')\n  expect(prettyUnit('ms')).toBe('millisecond')\n  expect(prettyUnit('Q')).toBe('quarter')\n  expect(prettyUnit()).toBe('')\n})\n\nit('PadZoneStr', () => {\n  const instance = {}\n  instance.utcOffset = () => 0 * -1\n  expect(padZoneStr(instance)).toBe('+00:00')\n  instance.utcOffset = () => 1 * 60 * -1\n  expect(padZoneStr(instance)).toBe('-01:00')\n  instance.utcOffset = () => -1 * 60 * -1\n  expect(padZoneStr(instance)).toBe('+01:00')\n  instance.utcOffset = () => -10 * 60 * -1\n  expect(padZoneStr(instance)).toBe('+10:00')\n  instance.utcOffset = () => 10 * 60 * -1\n  expect(padZoneStr(instance)).toBe('-10:00')\n  instance.utcOffset = () => ((-5 * 60) - 30) * -1\n  expect(padZoneStr(instance)).toBe('+05:30')\n})\n\nit('PadStart', () => {\n  expect(padStart(1, 2, '0')).toBe('01')\n  expect(padStart(0, 2, '0')).toBe('00')\n})\n"
  },
  {
    "path": "types/index.d.ts",
    "content": "/// <reference path=\"./locale/index.d.ts\" />\n\nexport = dayjs;\n\ndeclare function dayjs (date?: dayjs.ConfigType): dayjs.Dayjs\n\ndeclare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean): dayjs.Dayjs\n\ndeclare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, locale?: string, strict?: boolean): dayjs.Dayjs\n\ndeclare namespace dayjs {\n  interface ConfigTypeMap {\n    default: string | number | Date | Dayjs | null | undefined\n  }\n\n  export type ConfigType = ConfigTypeMap[keyof ConfigTypeMap]\n\n  export interface FormatObject { locale?: string, format?: string, utc?: boolean }\n\n  export type OptionType = FormatObject | string | string[]\n\n  export type UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms'\n\n  export type UnitTypeLong = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'date'\n\n  export type UnitTypeLongPlural = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'months' | 'years' | 'dates'\n  \n  export type UnitType = UnitTypeLong | UnitTypeLongPlural | UnitTypeShort;\n\n  export type OpUnitType = UnitType | \"week\" | \"weeks\" | 'w';\n  export type QUnitType = UnitType | \"quarter\" | \"quarters\" | 'Q';\n  export type ManipulateType = Exclude<OpUnitType, 'date' | 'dates'>;\n  class Dayjs {\n    constructor (config?: ConfigType)\n    /**\n     * All Day.js objects are immutable. Still, `dayjs#clone` can create a clone of the current object if you need one.\n     * ```\n     * dayjs().clone()// => Dayjs\n     * dayjs(dayjs('2019-01-25')) // passing a Dayjs object to a constructor will also clone it\n     * ```\n     * Docs: https://day.js.org/docs/en/parse/dayjs-clone\n     */\n    clone(): Dayjs\n    /**\n     * This returns a `boolean` indicating whether the Day.js object contains a valid date or not.\n     * ```\n     * dayjs().isValid()// => boolean\n     * ```\n     * Docs: https://day.js.org/docs/en/parse/is-valid\n     */\n    isValid(): boolean\n    /**\n     * Get the year.\n     * ```\n     * dayjs().year()// => 2020\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/year\n     */\n    year(): number\n    /**\n     * Set the year.\n     * ```\n     * dayjs().year(2000)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/year\n     */\n    year(value: number): Dayjs\n    /**\n     * Get the month.\n     *\n     * Months are zero indexed, so January is month 0.\n     * ```\n     * dayjs().month()// => 0-11\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/month\n     */\n    month(): number\n    /**\n     * Set the month.\n     *\n     * Months are zero indexed, so January is month 0.\n     *\n     * Accepts numbers from 0 to 11. If the range is exceeded, it will bubble up to the next year.\n     * ```\n     * dayjs().month(0)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/month\n     */\n    month(value: number): Dayjs\n    /**\n     * Get the date of the month.\n     * ```\n     * dayjs().date()// => 1-31\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/date\n     */\n    date(): number\n    /**\n     * Set the date of the month.\n     *\n     * Accepts numbers from 1 to 31. If the range is exceeded, it will bubble up to the next months.\n     * ```\n     * dayjs().date(1)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/date\n     */\n    date(value: number): Dayjs\n    /**\n     * Get the day of the week.\n     *\n     * Returns numbers from 0 (Sunday) to 6 (Saturday).\n     * ```\n     * dayjs().day()// 0-6\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/day\n     */\n    day(): 0 | 1 | 2 | 3 | 4 | 5 | 6\n    /**\n     * Set the day of the week.\n     *\n     * Accepts numbers from 0 (Sunday) to 6 (Saturday). If the range is exceeded, it will bubble up to next weeks.\n     * ```\n     * dayjs().day(0)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/day\n     */\n    day(value: number): Dayjs\n    /**\n     * Get the hour.\n     * ```\n     * dayjs().hour()// => 0-23\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/hour\n     */\n    hour(): number\n    /**\n     * Set the hour.\n     *\n     * Accepts numbers from 0 to 23. If the range is exceeded, it will bubble up to the next day.\n     * ```\n     * dayjs().hour(12)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/hour\n     */\n    hour(value: number): Dayjs\n    /**\n     * Get the minutes.\n     * ```\n     * dayjs().minute()// => 0-59\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/minute\n     */\n    minute(): number\n    /**\n     * Set the minutes.\n     *\n     * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next hour.\n     * ```\n     * dayjs().minute(59)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/minute\n     */\n    minute(value: number): Dayjs\n    /**\n     * Get the seconds.\n     * ```\n     * dayjs().second()// => 0-59\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/second\n     */\n    second(): number\n    /**\n     * Set the seconds.\n     *\n     * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next minutes.\n     * ```\n     * dayjs().second(1)// Dayjs\n     * ```\n     */\n    second(value: number): Dayjs\n    /**\n     * Get the milliseconds.\n     * ```\n     * dayjs().millisecond()// => 0-999\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/millisecond\n     */\n    millisecond(): number\n    /**\n     * Set the milliseconds.\n     *\n     * Accepts numbers from 0 to 999. If the range is exceeded, it will bubble up to the next seconds.\n     * ```\n     * dayjs().millisecond(1)// => Dayjs\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/millisecond\n     */\n    millisecond(value: number): Dayjs\n    /**\n     * Generic setter, accepting unit as first argument, and value as second, returns a new instance with the applied changes.\n     *\n     * In general:\n     * ```\n     * dayjs().set(unit, value) === dayjs()[unit](value)\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     * ```\n     * dayjs().set('date', 1)\n     * dayjs().set('month', 3) // April\n     * dayjs().set('second', 30)\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/set\n     */\n    set(unit: UnitType, value: number): Dayjs\n    /**\n     * String getter, returns the corresponding information getting from Day.js object.\n     *\n     * In general:\n     * ```\n     * dayjs().get(unit) === dayjs()[unit]()\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     * ```\n     * dayjs().get('year')\n     * dayjs().get('month') // start 0\n     * dayjs().get('date')\n     * ```\n     * Docs: https://day.js.org/docs/en/get-set/get\n     */\n    get(unit: UnitType): number\n    /**\n     * Returns a cloned Day.js object with a specified amount of time added.\n     * ```\n     * dayjs().add(7, 'day')// => Dayjs\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/manipulate/add\n     */\n    add(value: number, unit?: ManipulateType): Dayjs\n    /**\n     * Returns a cloned Day.js object with a specified amount of time subtracted.\n     * ```\n     * dayjs().subtract(7, 'year')// => Dayjs\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/manipulate/subtract\n     */\n    subtract(value: number, unit?: ManipulateType): Dayjs\n    /**\n     * Returns a cloned Day.js object and set it to the start of a unit of time.\n     * ```\n     * dayjs().startOf('year')// => Dayjs\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/manipulate/start-of\n     */\n    startOf(unit: OpUnitType): Dayjs\n    /**\n     * Returns a cloned Day.js object and set it to the end of a unit of time.\n     * ```\n     * dayjs().endOf('month')// => Dayjs\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/manipulate/end-of\n     */\n    endOf(unit: OpUnitType): Dayjs\n    /**\n     * Get the formatted date according to the string of tokens passed in.\n     *\n     * To escape characters, wrap them in square brackets (e.g. [MM]).\n     * ```\n     * dayjs().format()// => current date in ISO8601, without fraction seconds e.g. '2020-04-02T08:02:17-05:00'\n     * dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')// 'YYYYescape 2019-01-25T00:00:00-02:00Z'\n     * dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'\n     * ```\n     * Docs: https://day.js.org/docs/en/display/format\n     */\n    format(template?: string): string\n    /**\n     * This indicates the difference between two date-time in the specified unit.\n     *\n     * To get the difference in milliseconds, use `dayjs#diff`\n     * ```\n     * const date1 = dayjs('2019-01-25')\n     * const date2 = dayjs('2018-06-05')\n     * date1.diff(date2) // 20214000000 default milliseconds\n     * date1.diff() // milliseconds to current time\n     * ```\n     *\n     * To get the difference in another unit of measurement, pass that measurement as the second argument.\n     * ```\n     * const date1 = dayjs('2019-01-25')\n     * date1.diff('2018-06-05', 'month') // 7\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/display/difference\n     */\n    diff(date?: ConfigType, unit?: QUnitType | OpUnitType, float?: boolean): number\n    /**\n     * This returns the number of **milliseconds** since the Unix Epoch of the Day.js object.\n     * ```\n     * dayjs('2019-01-25').valueOf() // 1548381600000\n     * +dayjs(1548381600000) // 1548381600000\n     * ```\n     * To get a Unix timestamp (the number of seconds since the epoch) from a Day.js object, you should use Unix Timestamp `dayjs#unix()`.\n     *\n     * Docs: https://day.js.org/docs/en/display/unix-timestamp-milliseconds\n     */\n    valueOf(): number\n    /**\n     * This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the Day.js object.\n     * ```\n     * dayjs('2019-01-25').unix() // 1548381600\n     * ```\n     * This value is floored to the nearest second, and does not include a milliseconds component.\n     *\n     * Docs: https://day.js.org/docs/en/display/unix-timestamp\n     */\n    unix(): number\n    /**\n     * Get the number of days in the current month.\n     * ```\n     * dayjs('2019-01-25').daysInMonth() // 31\n     * ```\n     * Docs: https://day.js.org/docs/en/display/days-in-month\n     */\n    daysInMonth(): number\n    /**\n     * To get a copy of the native `Date` object parsed from the Day.js object use `dayjs#toDate`.\n     * ```\n     * dayjs('2019-01-25').toDate()// => Date\n     * ```\n     */\n    toDate(): Date\n    /**\n     * To serialize as an ISO 8601 string.\n     * ```\n     * dayjs('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z'\n     * ```\n     * Docs: https://day.js.org/docs/en/display/as-json\n     */\n    toJSON(): string\n    /**\n     * To format as an ISO 8601 string.\n     * ```\n     * dayjs('2019-01-25').toISOString() // '2019-01-25T02:00:00.000Z'\n     * ```\n     * Docs: https://day.js.org/docs/en/display/as-iso-string\n     */\n    toISOString(): string\n    /**\n     * Returns a string representation of the date.\n     * ```\n     * dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT'\n     * ```\n     * Docs: https://day.js.org/docs/en/display/as-string\n     */\n    toString(): string\n    /**\n     * Get the UTC offset in minutes.\n     * ```\n     * dayjs().utcOffset()\n     * ```\n     * Docs: https://day.js.org/docs/en/manipulate/utc-offset\n     */\n    utcOffset(): number\n    /**\n     * This indicates whether the Day.js object is before the other supplied date-time.\n     * ```\n     * dayjs().isBefore(dayjs('2011-01-01')) // default milliseconds\n     * ```\n     * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.\n     * ```\n     * dayjs().isBefore('2011-01-01', 'year')// => boolean\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/query/is-before\n     */\n    isBefore(date?: ConfigType, unit?: OpUnitType): boolean\n    /**\n     * This indicates whether the Day.js object is the same as the other supplied date-time.\n     * ```\n     * dayjs().isSame(dayjs('2011-01-01')) // default milliseconds\n     * ```\n     * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.\n     * ```\n     * dayjs().isSame('2011-01-01', 'year')// => boolean\n     * ```\n     * Docs: https://day.js.org/docs/en/query/is-same\n     */\n    isSame(date?: ConfigType, unit?: OpUnitType): boolean\n    /**\n     * This indicates whether the Day.js object is after the other supplied date-time.\n     * ```\n     * dayjs().isAfter(dayjs('2011-01-01')) // default milliseconds\n     * ```\n     * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.\n     * ```\n     * dayjs().isAfter('2011-01-01', 'year')// => boolean\n     * ```\n     * Units are case insensitive, and support plural and short forms.\n     *\n     * Docs: https://day.js.org/docs/en/query/is-after\n     */\n    isAfter(date?: ConfigType, unit?: OpUnitType): boolean\n\n    locale(): string\n\n    locale(preset: string | ILocale, object?: Partial<ILocale>): Dayjs\n  }\n\n  export type PluginFunc<T = unknown> = (option: T, c: typeof Dayjs, d: typeof dayjs) => void\n\n  export function extend<T = unknown>(plugin: PluginFunc<T>, option?: T): Dayjs\n\n  export function locale(preset?: string | ILocale, object?: Partial<ILocale>, isLocal?: boolean): string\n\n  export function isDayjs(d: any): d is Dayjs\n\n  export function unix(t: number): Dayjs\n\n  const Ls : { [key: string] :  ILocale }\n}\n"
  },
  {
    "path": "types/locale/index.d.ts",
    "content": "/// <reference path=\"./types.d.ts\" />\n\ndeclare module 'dayjs/locale/*' {\n  namespace locale {\n    interface Locale extends ILocale {}\n  }\n\n  const locale: locale.Locale\n\n  export = locale\n}\n"
  },
  {
    "path": "types/locale/types.d.ts",
    "content": "declare interface ILocale {\n  name: string\n  weekdays?: string[]\n  months?: string[]\n  weekStart?: number\n  weekdaysShort?: string[]\n  monthsShort?: string[]\n  weekdaysMin?: string[]\n  ordinal?: (n: number) => number | string\n  formats: Partial<{\n    LT: string\n    LTS: string\n    L: string\n    LL: string\n    LLL: string\n    LLLL: string\n  }>\n  relativeTime: Partial<{\n    future: string\n    past: string\n    s: string\n    m: string\n    mm: string\n    h: string\n    hh: string\n    d: string\n    dd: string\n    M: string\n    MM: string\n    y: string\n    yy: string\n  }>\n}\n"
  },
  {
    "path": "types/plugin/advancedFormat.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/arraySupport.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare module 'dayjs' {\n  interface ConfigTypeMap {\n    arraySupport: [number?, number?, number?, number?, number?, number?, number?]\n  }\n}\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/badMutable.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/bigIntSupport.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare module 'dayjs' {\n  interface ConfigTypeMap {\n    bigIntSupport: BigInt\n  }\n  export function unix(t: BigInt): Dayjs\n}\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/buddhistEra.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/calendar.d.ts",
    "content": "import { PluginFunc, ConfigType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    calendar(referenceTime?: ConfigType, formats?: object): string\n  }\n}\n"
  },
  {
    "path": "types/plugin/customParseFormat.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare interface PluginOptions {\n    parseTwoDigitYear?: (yearString: string) => number\n}\n\ndeclare const plugin: PluginFunc<PluginOptions>\nexport = plugin\n"
  },
  {
    "path": "types/plugin/dayOfYear.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    dayOfYear(): number\n    dayOfYear(value: number): Dayjs\n  }\n}\n"
  },
  {
    "path": "types/plugin/devHelper.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/duration.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\nimport { OpUnitType, UnitTypeLongPlural } from 'dayjs';\n\ndeclare const plugin: PluginFunc\nexport as namespace plugin;\nexport = plugin\n\ndeclare namespace plugin {\n  /**\n   * @deprecated Please use more strict types\n   */\n  type DurationInputType = string | number | object\n  /**\n   * @deprecated Please use more strict types\n   */\n  type DurationAddType = number | object | Duration\n  \n  type DurationUnitsObjectType = Partial<{\n    [unit in Exclude<UnitTypeLongPlural, \"dates\"> | \"weeks\"]: number\n  }>;\n  type DurationUnitType = Exclude<OpUnitType, \"date\" | \"dates\">\n  type CreateDurationType = \n    ((units: DurationUnitsObjectType) => Duration)\n    & ((time: number, unit?: DurationUnitType) => Duration)\n    & ((ISO_8601: string) => Duration)\n  type AddDurationType = CreateDurationType & ((duration: Duration) => Duration)\n\n  interface Duration {\n    new (input: string | number | object, unit?: string, locale?: string): Duration\n\n    clone(): Duration\n\n    humanize(withSuffix?: boolean): string\n\n    milliseconds(): number\n    asMilliseconds(): number\n\n    seconds(): number\n    asSeconds(): number\n\n    minutes(): number\n    asMinutes(): number\n\n    hours(): number\n    asHours(): number\n\n    days(): number\n    asDays(): number\n\n    weeks(): number\n    asWeeks(): number\n\n    months(): number\n    asMonths(): number\n\n    years(): number\n    asYears(): number\n\n    as(unit: DurationUnitType): number\n\n    get(unit: DurationUnitType): number\n\n    add: AddDurationType\n    \n    subtract: AddDurationType\n\n    toJSON(): string\n\n    toISOString(): string\n\n    format(formatStr?: string): string\n\n    locale(locale: string): Duration\n  }\n}\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    add(duration: plugin.Duration): Dayjs\n    subtract(duration: plugin.Duration): Dayjs\n  }\n\n  /**\n   * @param time If unit is not present, time treated as number of milliseconds\n   */\n  export const duration: plugin.CreateDurationType;\n  export function isDuration(d: any): d is plugin.Duration\n}"
  },
  {
    "path": "types/plugin/isBetween.d.ts",
    "content": "import { PluginFunc, ConfigType, OpUnitType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isBetween(a: ConfigType, b: ConfigType, c?: OpUnitType | null, d?: '()' | '[]' | '[)' | '(]'): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isLeapYear.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isLeapYear(): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isMoment.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n\n  export function isMoment(input: any): boolean\n\n}\n"
  },
  {
    "path": "types/plugin/isSameOrAfter.d.ts",
    "content": "import { PluginFunc, ConfigType, OpUnitType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isSameOrAfter(date?: ConfigType, unit?: OpUnitType): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isSameOrBefore.d.ts",
    "content": "import { PluginFunc, ConfigType, OpUnitType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isSameOrBefore(date?: ConfigType, unit?: OpUnitType): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isToday.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isToday(): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isTomorrow.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isTomorrow(): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isYesterday.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isYesterday(): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isoWeek.d.ts",
    "content": "import { PluginFunc, OpUnitType, ConfigType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ntype ISOUnitType = OpUnitType | 'isoWeek';\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isoWeekYear(): number\n    isoWeek(): number\n    isoWeek(value: number): Dayjs\n\n    isoWeekday(): number\n    isoWeekday(value: number): Dayjs\n\n    startOf(unit: ISOUnitType): Dayjs\n\n    endOf(unit: ISOUnitType): Dayjs\n\n    isSame(date?: ConfigType, unit?: ISOUnitType): boolean\n\n    isBefore(date?: ConfigType, unit?: ISOUnitType): boolean\n\n    isAfter(date?: ConfigType, unit?: ISOUnitType): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/isoWeeksInYear.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    isoWeeksInYear(): number\n  }\n}\n"
  },
  {
    "path": "types/plugin/localeData.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  type WeekdayNames = [string, string, string, string, string, string, string];\n  type MonthNames = [string, string, string, string, string, string, string, string, string, string, string, string];\n\n  interface InstanceLocaleDataReturn {\n    firstDayOfWeek(): number;\n    weekdays(instance?: Dayjs): WeekdayNames;\n    weekdaysShort(instance?: Dayjs): WeekdayNames;\n    weekdaysMin(instance?: Dayjs): WeekdayNames;\n    months(instance?: Dayjs): MonthNames;\n    monthsShort(instance?: Dayjs): MonthNames;\n    longDateFormat(format: string): string;\n    meridiem(hour?: number, minute?: number, isLower?: boolean): string;\n    ordinal(n: number): string\n  }\n\n  interface GlobalLocaleDataReturn {\n    firstDayOfWeek(): number;\n    weekdays(): WeekdayNames;\n    weekdaysShort(): WeekdayNames;\n    weekdaysMin(): WeekdayNames;\n    months(): MonthNames;\n    monthsShort(): MonthNames;\n    longDateFormat(format: string): string;\n    meridiem(hour?: number, minute?: number, isLower?: boolean): string;\n    ordinal(n: number): string\n  }\n\n  interface Dayjs {\n    localeData(): InstanceLocaleDataReturn;\n  }\n\n  export function weekdays(localOrder?: boolean): WeekdayNames;\n  export function weekdaysShort(localOrder?: boolean): WeekdayNames;\n  export function weekdaysMin(localOrder?: boolean): WeekdayNames;\n  export function monthsShort(): MonthNames;\n  export function months(): MonthNames;\n  export function localeData(): GlobalLocaleDataReturn;\n}\n"
  },
  {
    "path": "types/plugin/localizedFormat.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/minMax.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  export function max(dayjs: [Dayjs, ...Dayjs[]]): Dayjs\n  export function max(noDates: never[]): null\n  export function max(maybeDates: Dayjs[]): Dayjs | null\n\n  export function max(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs\n  export function max(...noDates: never[]): null\n  export function max(...maybeDates: Dayjs[]): Dayjs | null\n\n  export function min(dayjs: [Dayjs, ...Dayjs[]]): Dayjs\n  export function min(noDates: never[]): null\n  export function min(maybeDates: Dayjs[]): Dayjs | null\n\n  export function min(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs\n  export function min(...noDates: never[]): null\n  export function min(...maybeDates: Dayjs[]): Dayjs | null\n}\n"
  },
  {
    "path": "types/plugin/negativeYear.d.ts",
    "content": "import {PluginFunc} from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin"
  },
  {
    "path": "types/plugin/objectSupport.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n    interface Dayjs {\n        set(argument: object): Dayjs\n        add(argument: object): Dayjs\n        subtract(argument: object): Dayjs\n    }\n\n    interface ConfigTypeMap {\n        objectSupport: {\n            years?: number | string;\n            year?: number | string;\n            y?: number | string;\n\n            months?: number | string;\n            month?: number | string;\n            M?: number | string;\n\n            days?: number | string;\n            day?: number | string;\n            d?: number | string;\n\n            dates?: number | string;\n            date?: number | string;\n            D?: number | string;\n\n            hours?: number | string;\n            hour?: number | string;\n            h?: number | string;\n\n            minutes?: number | string;\n            minute?: number | string;\n            m?: number | string;\n\n            seconds?: number | string;\n            second?: number | string;\n            s?: number | string;\n\n            milliseconds?: number | string;\n            millisecond?: number | string;\n            ms?: number | string;\n        }\n    }\n}\n"
  },
  {
    "path": "types/plugin/pluralGetSet.d.ts",
    "content": "import { PluginFunc, UnitType, ConfigType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    years(): number\n\n    years(value: number): Dayjs\n\n    months(): number\n\n    months(value: number): Dayjs\n\n    dates(): number\n\n    dates(value: number): Dayjs\n\n    weeks(): number\n\n    weeks(value: number): Dayjs\n\n    days(): number\n\n    days(value: number): Dayjs\n\n    hours(): number\n\n    hours(value: number): Dayjs\n\n    minutes(): number\n\n    minutes(value: number): Dayjs\n\n    seconds(): number\n\n    seconds(value: number): Dayjs\n\n    milliseconds(): number\n\n    milliseconds(value: number): Dayjs\n  }\n}\n"
  },
  {
    "path": "types/plugin/preParsePostFormat.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n"
  },
  {
    "path": "types/plugin/quarterOfYear.d.ts",
    "content": "import { PluginFunc, ConfigType, QUnitType, OpUnitType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    quarter(): number\n\n    quarter(quarter: number): Dayjs\n\n    add(value: number, unit: QUnitType): Dayjs\n\n    subtract(value: number, unit: QUnitType): Dayjs\n\n    startOf(unit: QUnitType | OpUnitType): Dayjs\n\n    endOf(unit: QUnitType | OpUnitType): Dayjs\n\n    isSame(date?: ConfigType, unit?: QUnitType): boolean\n\n    isBefore(date?: ConfigType, unit?: QUnitType): boolean\n\n    isAfter(date?: ConfigType, unit?: QUnitType): boolean\n  }\n}\n"
  },
  {
    "path": "types/plugin/relativeTime.d.ts",
    "content": "import { PluginFunc, ConfigType } from 'dayjs'\n\ndeclare interface RelativeTimeThreshold {\n  l: string\n  r?: number\n  d?: string\n}\n\ndeclare interface RelativeTimeOptions {\n  rounding?: (num: number) => number\n  thresholds?: RelativeTimeThreshold[]\n}\n\ndeclare const plugin: PluginFunc<RelativeTimeOptions>\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    fromNow(withoutSuffix?: boolean): string\n    from(compared: ConfigType, withoutSuffix?: boolean): string\n    toNow(withoutSuffix?: boolean): string\n    to(compared: ConfigType, withoutSuffix?: boolean): string\n  }\n}\n"
  },
  {
    "path": "types/plugin/timezone.d.ts",
    "content": "import { PluginFunc, ConfigType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    tz(timezone?: string, keepLocalTime?: boolean): Dayjs\n    offsetName(type?: 'short' | 'long'): string | undefined\n  }\n\n  interface DayjsTimezone {\n    (date?: ConfigType, timezone?: string): Dayjs\n    (date: ConfigType, format: string, timezone?: string): Dayjs\n    guess(): string\n    setDefault(timezone?: string): void\n  }\n\n  const tz: DayjsTimezone\n}\n"
  },
  {
    "path": "types/plugin/toArray.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    toArray(): number[]\n  }\n}\n"
  },
  {
    "path": "types/plugin/toObject.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ninterface DayjsObject {\n  years: number\n  months: number\n  date: number\n  hours: number\n  minutes: number\n  seconds: number\n  milliseconds: number\n}\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    toObject(): DayjsObject\n  }\n}\n"
  },
  {
    "path": "types/plugin/updateLocale.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  export function updateLocale(localeName: string, customConfig: Record<string, unknown>): Record<string, unknown>\n}\n"
  },
  {
    "path": "types/plugin/utc.d.ts",
    "content": "import { PluginFunc, ConfigType } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    \n    utc(keepLocalTime?: boolean): Dayjs\n    \n    local(): Dayjs\n\n    isUTC(): boolean\n\n    utcOffset(offset: number | string, keepLocalTime?: boolean): Dayjs\n  }\n\n  export function utc(config?: ConfigType, format?: string, strict?: boolean): Dayjs\n}\n"
  },
  {
    "path": "types/plugin/weekOfYear.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    week(): number\n\n    week(value : number): Dayjs\n  }\n}\n"
  },
  {
    "path": "types/plugin/weekYear.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    weekYear(): number\n  }\n}\n"
  },
  {
    "path": "types/plugin/weekday.d.ts",
    "content": "import { PluginFunc } from 'dayjs'\n\ndeclare const plugin: PluginFunc\nexport = plugin\n\ndeclare module 'dayjs' {\n  interface Dayjs {\n    weekday(): number\n\n    weekday(value: number): Dayjs\n  }\n}\n"
  }
]