├── .eslintrc ├── .github └── workflows │ ├── codeql-analysis.yml │ ├── node.js.yml │ └── npm-publish.yml ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── lib └── index.js ├── package-lock.json ├── package.json └── test ├── date_format-test.js └── parse-test.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended" 4 | ], 5 | "env": { 6 | "node": true, 7 | "mocha": true 8 | }, 9 | "plugins": [ 10 | "mocha" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ "master" ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ "master" ] 20 | 21 | jobs: 22 | analyze: 23 | name: Analyze 24 | runs-on: ubuntu-latest 25 | permissions: 26 | actions: read 27 | contents: read 28 | security-events: write 29 | 30 | strategy: 31 | fail-fast: false 32 | matrix: 33 | language: [ 'javascript' ] 34 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 35 | # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support 36 | 37 | steps: 38 | - name: Checkout repository 39 | uses: actions/checkout@v3 40 | 41 | # Initializes the CodeQL tools for scanning. 42 | - name: Initialize CodeQL 43 | uses: github/codeql-action/init@v2 44 | with: 45 | languages: ${{ matrix.language }} 46 | # If you wish to specify custom queries, you can do so here or in a config file. 47 | # By default, queries listed here will override any specified in a config file. 48 | # Prefix the list here with "+" to use these queries and those in the config file. 49 | 50 | # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs 51 | # queries: security-extended,security-and-quality 52 | 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v2 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun 61 | 62 | # If the Autobuild fails above, remove it and uncomment the following three lines. 63 | # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. 64 | 65 | # - run: | 66 | # echo "Run, Build Application using script" 67 | # ./location_of_script_within_repo/buildscript.sh 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v2 71 | with: 72 | category: "/language:${{matrix.language}}" 73 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ "master" ] 9 | pull_request: 10 | branches: [ "master" ] 11 | workflow_dispatch: {} 12 | 13 | jobs: 14 | build: 15 | 16 | runs-on: ubuntu-latest 17 | 18 | defaults: 19 | run: 20 | shell: bash 21 | 22 | strategy: 23 | matrix: 24 | node-version: [4.x, 6.x, 8.x, 10.x, 12.x, 14.x, 16.x, 18.x] 25 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 26 | include: 27 | - node-version: 4.x 28 | npm-i: "eslint@4.x eslint-plugin-mocha@4.x mocha@5.x nyc@11.x" 29 | 30 | - node-version: 6.x 31 | npm-i: "eslint@5.x eslint-plugin-mocha@5.x mocha@6.x nyc@14.x" 32 | 33 | - node-version: 8.x 34 | npm-i: "eslint@6.x eslint-plugin-mocha@6.x mocha@7.x" 35 | 36 | - node-version: 10.x 37 | npm-i: "eslint@7.x eslint-plugin-mocha@8.x mocha@8.x" 38 | 39 | - node-version: 12.x 40 | npm-i: "eslint-plugin-mocha@9.x mocha@9.x" 41 | 42 | steps: 43 | - uses: actions/checkout@v3 44 | - name: Use Node.js ${{ matrix.node-version }} 45 | uses: actions/setup-node@v3 46 | with: 47 | node-version: ${{ matrix.node-version }} 48 | cache: 'npm' 49 | 50 | - name: Configure npm 51 | run: npm config set loglevel error 52 | 53 | - name: Get npm version 54 | id: npm-version 55 | run: | 56 | npm -v 57 | npmMajorVer=$(npm -v | cut -d. -f1) 58 | echo "major=$npmMajorVer" >> $GITHUB_OUTPUT 59 | 60 | - name: Install downgraded modules ${{ matrix.npm-i }} 61 | run: | 62 | npm install --save-dev ${{ matrix.npm-i }} 63 | if [ ${{ steps.npm-version.outputs.major }} -le 5 ]; then 64 | npm install 65 | fi 66 | if: matrix.npm-i != '' 67 | 68 | - run: npm install 69 | if: matrix.npm-i == '' && steps.npm-version.outputs.major <= 5 70 | 71 | - run: npm ci 72 | if: matrix.npm-i == '' && steps.npm-version.outputs.major > 5 73 | 74 | - name: List dependencies 75 | run: npm ls --depth=0 --dev && npm ls --depth=0 --prod 76 | 77 | - run: npm run build --if-present 78 | - run: npm test 79 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a milestone is closed 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages 3 | 4 | name: Node.js Package 5 | 6 | on: 7 | milestone: 8 | types: [closed] 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: 16 18 | - run: npm ci 19 | - run: npm test 20 | 21 | publish-npm: 22 | needs: build 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v3 26 | - uses: actions/setup-node@v3 27 | with: 28 | node-version: 16 29 | registry-url: https://registry.npmjs.org/ 30 | - run: npm ci 31 | - run: | 32 | git config user.name github-actions 33 | git config user.email github-actions@github.com 34 | - run: npm version ${{ github.event.milestone.title }} 35 | - run: git push && git push --tags 36 | - run: npm publish 37 | env: 38 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | node_modules 16 | .nyc_output/ 17 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | sudo: false 3 | node_js: 4 | - "10" 5 | - "8" 6 | - "6" 7 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # date-format Changelog 2 | 3 | ## 4.0.14 4 | 5 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/86) - thanks [@lamweili](https://github.com/lamweili) 6 | - chore(deps-dev): bump eslint from 4.19.1 to 8.24.0 7 | - chore(deps-dev): bump eslint-plugin-mocha from 4.12.1 to 10.1.0 8 | - chore(deps-dev): bump mocha from 5.2.0 to 10.0.0 9 | - chore(deps-dev): bump nyc from 13.0.0 to 15.1.0 10 | - [ci: manually downgrade dev dependencies for older versions](https://github.com/nomiddlename/date-format/pull/87) - thanks [@lamweili](https://github.com/lamweili) 11 | - [ci: separated npm audit](https://github.com/nomiddlename/date-format/pull/85) - thanks [@lamweili](https://github.com/lamweili) 12 | - [ci: updated codeql from v1 to v2](https://github.com/nomiddlename/date-format/pull/80) - thanks [@lamweili](https://github.com/lamweili) 13 | 14 | ## 4.0.13 15 | 16 | - [ci: added tests for Node.js 4.x, 6.x, 8.x, 10.x, 18.x](https://github.com/nomiddlename/date-format/pull/75) - thanks [@lamweili](https://github.com/lamweili) 17 | - [chore(deps-dev): bump hosted-git-info from 2.6.0 to 2.8.9](https://github.com/nomiddlename/date-format/pull/76) - thanks [@Dependabot](https://github.com/dependabot) 18 | - [chore(deps-dev): bump handlebars from 4.0.11 to 4.7.7 ](https://github.com/nomiddlename/date-format/pull/77) - thanks [@Dependabot](https://github.com/dependabot) 19 | - [chore(deps-dev): bump y18n from 3.2.1 to 3.2.2](https://github.com/nomiddlename/date-format/pull/78) - thanks [@Dependabot](https://github.com/dependabot) 20 | 21 | ## 4.0.12 22 | 23 | - [ci: added tests for Node.js 8.x, 10.x, 18.x](https://github.com/nomiddlename/date-format/pull/73) - thanks [@lamweili](https://github.com/lamweili) 24 | - [docs: renamed peteriman to lamweili](https://github.com/nomiddlename/date-format/pull/72) - thanks [@lamweili](https://github.com/lamweili) 25 | 26 | ## 4.0.11 27 | 28 | - [fix: date parsing errors (wrong month due to days overflow)](https://github.com/nomiddlename/date-format/pull/68) - thanks [@lamweili](https://github.com/lamweili) 29 | - [test: use new Date(0) instead of new Date() before setting every field]() - thanks [@lamweili](https://github.com/lamweili) 30 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/70) - thanks [@lamweili](https://github.com/lamweili) 31 | - chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 32 | - chore(deps-dev): bump eslint-plugin-mocha from 10.0.4 to 10.0.5 33 | - chore(deps-dev): updated package-lock.json 34 | 35 | ## 4.0.10 36 | 37 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/66) - thanks [@lamweili](https://github.com/lamweili) 38 | - chore(deps-dev): bump eslint from 8.14.0 to 8.15.0 39 | - chore(deps-dev): bump mocha from 9.2.2 to 10.0.0 40 | - chore(deps-dev): updated package-lock.json 41 | 42 | ## 4.0.9 43 | 44 | - build: is exactly the same as 4.0.8 and is a re-published 4.0.8 to npm 45 | 46 | ## 4.0.8 47 | 48 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/60) - thanks [@lamweili](https://github.com/lamweili) 49 | - chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 50 | - chore(deps-dev): updated package-lock.json 51 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/59) - thanks [@lamweili](https://github.com/lamweili) 52 | - chore(deps-dev): updated package-lock.json 53 | 54 | ## 4.0.7 55 | 56 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/57) - thanks [@lamweili](https://github.com/lamweili) 57 | - chore(deps-dev): bump eslint-plugin-mocha from 10.0.3 to 10.0.4 58 | - chore(deps-dev): updated package-lock.json 59 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/54) - thanks [@lamweili](https://github.com/lamweili) 60 | - chore(deps-dev): bump eslint from 8.11.0 to 8.13.0 61 | - chore(deps-dev): updated package-lock.json 62 | 63 | ## 4.0.6 64 | 65 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/52) - thanks [@lamweili](https://github.com/lamweili) 66 | - chore(deps-dev): updated package-lock.json 67 | 68 | ## 4.0.5 69 | 70 | - [test: better test coverage instead of ignoring](https://github.com/nomiddlename/date-format/pull/48) - thanks [@lamweili](https://github.com/lamweili) 71 | - [docs: updated README.md with badges](https://github.com/nomiddlename/date-format/pull/50) thanks [@lamweili](https://github.com/lamweili) 72 | - [chore(deps-dev): updated dependencies](https://github.com/nomiddlename/date-format/pull/49) - thanks [@lamweili](https://github.com/lamweili) 73 | - chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 74 | - chore(deps-dev): bump mocha from 9.2.1 to 9.2.2 75 | - chore(deps-dev): updated package-lock.json 76 | 77 | ## 4.0.4 78 | 79 | - chore(deps-dev): updated dependencies - thanks [@lamweili](https://github.com/lamweili) 80 | - [chore(deps-dev): bump eslint from 8.8.0 to 8.10.0 and mocha from 9.2.0 to 9.2.1](https://github.com/nomiddlename/date-format/pull/46) 81 | - [chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 and mocha from 9.1.4 to 9.2.0](https://github.com/nomiddlename/date-format/pull/45) 82 | - [chore(deps-dev): updated package-lock.json](https://github.com/nomiddlename/date-format/pull/44) 83 | 84 | ## 4.0.3 85 | 86 | - [test: 100% test coverage](https://github.com/nomiddlename/date-format/pull/42) - thanks [@lamweili](https://github.com/lamweili) 87 | - chore(deps-dev): updated dependencies - thanks [@lamweili](https://github.com/lamweili) 88 | - [chore(deps-dev): bump eslint from 8.6.0 to 8.7.0 and mocha from 9.1.3 to 9.1.4](https://github.com/nomiddlename/date-format/pull/41) 89 | 90 | ## 4.0.2 91 | 92 | - [build: not to publish misc files to NPM](https://github.com/nomiddlename/date-format/pull/39) - thanks [@lamweili](https://github.com/lamweili) 93 | - docs: CHANGELOG.md 94 | - [docs: removed "log4js" from title of CHANGELOG.md](https://github.com/nomiddlename/date-format/pull/37) - thanks [@joshuabremerdexcom](https://github.com/joshuabremerdexcom) 95 | - [docs: added "date-format" to title of CHANGELOG.md](https://github.com/nomiddlename/date-format/commit/64a95d0386853692d7d65174f94a0751e775f7ce#diff-06572a96a58dc510037d5efa622f9bec8519bc1beab13c9f251e97e657a9d4ed) - thanks [@lamweili](https://github.com/lamweili) 96 | - chore(deps-dev): updated dependencies - thanks [@lamweili](https://github.com/lamweili) 97 | - [chore(deps-dev): bump eslint-plugin-mocha from 5.3.0 to 10.0.3](https://github.com/nomiddlename/date-format/pull/38) 98 | 99 | ## 4.0.1 100 | 101 | - build: is exactly the same as 4.0.0 and is a re-published 4.0.0 to npm 102 | 103 | ## 4.0.0 104 | 105 | - [fix: timezone format to include colon separator](https://github.com/nomiddlename/date-format/pull/27) - thanks [@lamweili](https://github.com/lamweili) 106 | - [test: have a test case for timezone with colon](https://github.com/nomiddlename/date-format/pull/32) - thanks [@lamweili](https://github.com/lamweili) 107 | - [docs: updated README.md with more examples and expected output](https://github.com/nomiddlename/date-format/pull/33) - thanks [@lamweili](https://github.com/lamweili) 108 | - chore(deps-dev): updated dependencies 109 | - [chore(deps-dev): bump should-util from 1.0.0 to 1.0.1](https://github.com/nomiddlename/date-format/pull/31) - thanks [@lamweili](https://github.com/lamweili) 110 | - [chore(deps-dev): bump eslint from 5.16.0 to 8.6.0 and mocha from 5.2.0 to 9.1.3](https://github.com/nomiddlename/date-format/pull/30) - thanks [@lamweili](https://github.com/lamweili) 111 | - [chore(deps-dev): bump acorn from 6.2.0 to 6.4.2](https://github.com/nomiddlename/date-format/pull/29) - thanks [@Dependabot](https://github.com/dependabot) 112 | - [chore(deps-dev): bump lodash from 4.17.14 to 4.17.21](https://github.com/nomiddlename/date-format/pull/26) - thanks [@Dependabot](https://github.com/dependabot) 113 | 114 | ## Previous versions 115 | 116 | Change information for older versions can be found by looking at the milestones in github. 117 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Gareth Jones 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | date-format [![CodeQL](https://github.com/nomiddlename/date-format/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/nomiddlename/date-format/actions/workflows/codeql-analysis.yml) [![Node.js CI](https://github.com/nomiddlename/date-format/actions/workflows/node.js.yml/badge.svg)](https://github.com/nomiddlename/date-format/actions/workflows/node.js.yml) 2 | =========== 3 | 4 | [![NPM](https://nodei.co/npm/date-format.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/date-format/) 5 | 6 | node.js formatting of Date objects as strings. Probably exactly the same as some other library out there. 7 | 8 | ```sh 9 | npm install date-format 10 | ``` 11 | 12 | usage 13 | ===== 14 | 15 | Formatting dates as strings 16 | ---- 17 | 18 | ```javascript 19 | var format = require('date-format'); 20 | format.asString(); // defaults to ISO8601 format and current date 21 | format.asString(new Date()); // defaults to ISO8601 format 22 | format.asString('hh:mm:ss.SSS', new Date()); // just the time 23 | format.asString(format.ISO8601_WITH_TZ_OFFSET_FORMAT, new Date()); // in ISO8601 with timezone 24 | ``` 25 | 26 | or 27 | 28 | ```javascript 29 | var format = require('date-format'); 30 | format(); // defaults to ISO8601 format and current date 31 | format(new Date()); // defaults to ISO8601 format 32 | format('hh:mm:ss.SSS', new Date()); // just the time 33 | format(format.ISO8601_WITH_TZ_OFFSET_FORMAT, new Date()); // in ISO8601 with timezone 34 | ``` 35 | 36 | **output:** 37 | ```javascript 38 | 2017-03-14T14:10:20.391 39 | 2017-03-14T14:10:20.391 40 | 14:10:20.391 41 | 2017-03-14T14:10:20.391+11:00 42 | ``` 43 | 44 | Format string can be anything, but the following letters will be replaced (and leading zeroes added if necessary): 45 | * dd - `date.getDate()` 46 | * MM - `date.getMonth() + 1` 47 | * yy - `date.getFullYear().toString().substring(2, 4)` 48 | * yyyy - `date.getFullYear()` 49 | * hh - `date.getHours()` 50 | * mm - `date.getMinutes()` 51 | * ss - `date.getSeconds()` 52 | * SSS - `date.getMilliseconds()` 53 | * O - timezone offset in ±hh:mm format (note that time will still be local if displaying offset) 54 | 55 | Built-in formats: 56 | * `format.ISO8601_FORMAT` - `2017-03-14T14:10:20.391` (local time used) 57 | * `format.ISO8601_WITH_TZ_OFFSET_FORMAT` - `2017-03-14T14:10:20.391+11:00` (local + TZ used) 58 | * `format.DATETIME_FORMAT` - `14 03 2017 14:10:20.391` (local time used) 59 | * `format.ABSOLUTETIME_FORMAT` - `14:10:20.391` (local time used) 60 | 61 | Parsing strings as dates 62 | ---- 63 | The date format library has limited ability to parse strings into dates. It can convert strings created using date format patterns (as above), but if you're looking for anything more sophisticated than that you should probably look for a better library ([momentjs](https://momentjs.com) does pretty much everything). 64 | 65 | ```javascript 66 | var format = require('date-format'); 67 | // pass in the format of the string as first argument 68 | format.parse(format.ISO8601_FORMAT, '2017-03-14T14:10:20.391'); 69 | format.parse(format.ISO8601_WITH_TZ_OFFSET_FORMAT, '2017-03-14T14:10:20.391+1100'); 70 | format.parse(format.ISO8601_WITH_TZ_OFFSET_FORMAT, '2017-03-14T14:10:20.391+11:00'); 71 | format.parse(format.ISO8601_WITH_TZ_OFFSET_FORMAT, '2017-03-14T03:10:20.391Z'); 72 | // returns Date 73 | ``` 74 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | function padWithZeros(vNumber, width) { 4 | var numAsString = vNumber.toString(); 5 | while (numAsString.length < width) { 6 | numAsString = "0" + numAsString; 7 | } 8 | return numAsString; 9 | } 10 | 11 | function addZero(vNumber) { 12 | return padWithZeros(vNumber, 2); 13 | } 14 | 15 | /** 16 | * Formats the TimeOffset 17 | * Thanks to http://www.svendtofte.com/code/date_format/ 18 | * @private 19 | */ 20 | function offset(timezoneOffset) { 21 | var os = Math.abs(timezoneOffset); 22 | var h = String(Math.floor(os / 60)); 23 | var m = String(os % 60); 24 | h = ("0" + h).slice(-2); 25 | m = ("0" + m).slice(-2); 26 | return timezoneOffset === 0 ? "Z" : (timezoneOffset < 0 ? "+" : "-") + h + ":" + m; 27 | } 28 | 29 | function asString(format, date) { 30 | if (typeof format !== "string") { 31 | date = format; 32 | format = module.exports.ISO8601_FORMAT; 33 | } 34 | if (!date) { 35 | date = module.exports.now(); 36 | } 37 | 38 | // Issue # 14 - Per ISO8601 standard, the time string should be local time 39 | // with timezone info. 40 | // See https://en.wikipedia.org/wiki/ISO_8601 section "Time offsets from UTC" 41 | 42 | var vDay = addZero(date.getDate()); 43 | var vMonth = addZero(date.getMonth() + 1); 44 | var vYearLong = addZero(date.getFullYear()); 45 | var vYearShort = addZero(vYearLong.substring(2, 4)); 46 | var vYear = format.indexOf("yyyy") > -1 ? vYearLong : vYearShort; 47 | var vHour = addZero(date.getHours()); 48 | var vMinute = addZero(date.getMinutes()); 49 | var vSecond = addZero(date.getSeconds()); 50 | var vMillisecond = padWithZeros(date.getMilliseconds(), 3); 51 | var vTimeZone = offset(date.getTimezoneOffset()); 52 | var formatted = format 53 | .replace(/dd/g, vDay) 54 | .replace(/MM/g, vMonth) 55 | .replace(/y{1,4}/g, vYear) 56 | .replace(/hh/g, vHour) 57 | .replace(/mm/g, vMinute) 58 | .replace(/ss/g, vSecond) 59 | .replace(/SSS/g, vMillisecond) 60 | .replace(/O/g, vTimeZone); 61 | return formatted; 62 | } 63 | 64 | function setDatePart(date, part, value, local) { 65 | date['set' + (local ? '' : 'UTC') + part](value); 66 | } 67 | 68 | function extractDateParts(pattern, str, missingValuesDate) { 69 | // Javascript Date object doesn't support custom timezone. Sets all felds as 70 | // GMT based to begin with. If the timezone offset is provided, then adjust 71 | // it using provided timezone, otherwise, adjust it with the system timezone. 72 | var local = pattern.indexOf('O') < 0; 73 | var monthOverflow = false; 74 | var matchers = [ 75 | { 76 | pattern: /y{1,4}/, 77 | regexp: "\\d{1,4}", 78 | fn: function(date, value) { 79 | setDatePart(date, 'FullYear', value, local); 80 | } 81 | }, 82 | { 83 | pattern: /MM/, 84 | regexp: "\\d{1,2}", 85 | fn: function(date, value) { 86 | setDatePart(date, 'Month', (value - 1), local); 87 | if (date.getMonth() !== (value - 1)) { 88 | // in the event of 31 May --> 31 Feb --> 3 Mar 89 | // this is correct behavior if no Date is involved 90 | monthOverflow = true; 91 | } 92 | } 93 | }, 94 | { 95 | pattern: /dd/, 96 | regexp: "\\d{1,2}", 97 | fn: function(date, value) { 98 | // in the event of 31 May --> 31 Feb --> 3 Mar 99 | // reset Mar back to Feb, before setting the Date 100 | if (monthOverflow) { 101 | setDatePart(date, 'Month', (date.getMonth() - 1), local); 102 | } 103 | setDatePart(date, 'Date', value, local); 104 | } 105 | }, 106 | { 107 | pattern: /hh/, 108 | regexp: "\\d{1,2}", 109 | fn: function(date, value) { 110 | setDatePart(date, 'Hours', value, local); 111 | } 112 | }, 113 | { 114 | pattern: /mm/, 115 | regexp: "\\d\\d", 116 | fn: function(date, value) { 117 | setDatePart(date, 'Minutes', value, local); 118 | } 119 | }, 120 | { 121 | pattern: /ss/, 122 | regexp: "\\d\\d", 123 | fn: function(date, value) { 124 | setDatePart(date, 'Seconds', value, local); 125 | } 126 | }, 127 | { 128 | pattern: /SSS/, 129 | regexp: "\\d\\d\\d", 130 | fn: function(date, value) { 131 | setDatePart(date, 'Milliseconds', value, local); 132 | } 133 | }, 134 | { 135 | pattern: /O/, 136 | regexp: "[+-]\\d{1,2}:?\\d{2}?|Z", 137 | fn: function(date, value) { 138 | if (value === "Z") { 139 | value = 0; 140 | } 141 | else { 142 | value = value.replace(":", ""); 143 | } 144 | var offset = Math.abs(value); 145 | var timezoneOffset = (value > 0 ? -1 : 1 ) * ((offset % 100) + Math.floor(offset / 100) * 60); 146 | // Per ISO8601 standard: UTC = local time - offset 147 | // 148 | // For example, 2000-01-01T01:00:00-0700 149 | // local time: 2000-01-01T01:00:00 150 | // ==> UTC : 2000-01-01T08:00:00 ( 01 - (-7) = 8 ) 151 | // 152 | // To make it even more confusing, the date.getTimezoneOffset() is 153 | // opposite sign of offset string in the ISO8601 standard. So if offset 154 | // is '-0700' the getTimezoneOffset() would be (+)420. The line above 155 | // calculates timezoneOffset to matche Javascript's behavior. 156 | // 157 | // The date/time of the input is actually the local time, so the date 158 | // object that was constructed is actually local time even thought the 159 | // UTC setters are used. This means the date object's internal UTC 160 | // representation was wrong. It needs to be fixed by substracting the 161 | // offset (or adding the offset minutes as they are opposite sign). 162 | // 163 | // Note: the time zone has to be processed after all other fields are 164 | // set. The result would be incorrect if the offset was calculated 165 | // first then overriden by the other filed setters. 166 | date.setUTCMinutes(date.getUTCMinutes() + timezoneOffset); 167 | } 168 | } 169 | ]; 170 | 171 | var parsedPattern = matchers.reduce( 172 | function(p, m) { 173 | if (m.pattern.test(p.regexp)) { 174 | m.index = p.regexp.match(m.pattern).index; 175 | p.regexp = p.regexp.replace(m.pattern, "(" + m.regexp + ")"); 176 | } else { 177 | m.index = -1; 178 | } 179 | return p; 180 | }, 181 | { regexp: pattern, index: [] } 182 | ); 183 | 184 | var dateFns = matchers.filter(function(m) { 185 | return m.index > -1; 186 | }); 187 | dateFns.sort(function(a, b) { 188 | return a.index - b.index; 189 | }); 190 | 191 | var matcher = new RegExp(parsedPattern.regexp); 192 | var matches = matcher.exec(str); 193 | if (matches) { 194 | var date = missingValuesDate || module.exports.now(); 195 | dateFns.forEach(function(f, i) { 196 | f.fn(date, matches[i + 1]); 197 | }); 198 | 199 | return date; 200 | } 201 | 202 | throw new Error( 203 | "String '" + str + "' could not be parsed as '" + pattern + "'" 204 | ); 205 | } 206 | 207 | function parse(pattern, str, missingValuesDate) { 208 | if (!pattern) { 209 | throw new Error("pattern must be supplied"); 210 | } 211 | 212 | return extractDateParts(pattern, str, missingValuesDate); 213 | } 214 | 215 | /** 216 | * Used for testing - replace this function with a fixed date. 217 | */ 218 | function now() { 219 | return new Date(); 220 | } 221 | 222 | module.exports = asString; 223 | module.exports.asString = asString; 224 | module.exports.parse = parse; 225 | module.exports.now = now; 226 | module.exports.ISO8601_FORMAT = "yyyy-MM-ddThh:mm:ss.SSS"; 227 | module.exports.ISO8601_WITH_TZ_OFFSET_FORMAT = "yyyy-MM-ddThh:mm:ss.SSSO"; 228 | module.exports.DATETIME_FORMAT = "dd MM yyyy hh:mm:ss.SSS"; 229 | module.exports.ABSOLUTETIME_FORMAT = "hh:mm:ss.SSS"; 230 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "date-format", 3 | "version": "4.0.14", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@ampproject/remapping": { 8 | "version": "2.2.0", 9 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", 10 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", 11 | "dev": true, 12 | "requires": { 13 | "@jridgewell/gen-mapping": "^0.1.0", 14 | "@jridgewell/trace-mapping": "^0.3.9" 15 | } 16 | }, 17 | "@babel/code-frame": { 18 | "version": "7.18.6", 19 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 20 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 21 | "dev": true, 22 | "requires": { 23 | "@babel/highlight": "^7.18.6" 24 | } 25 | }, 26 | "@babel/compat-data": { 27 | "version": "7.20.1", 28 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", 29 | "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", 30 | "dev": true 31 | }, 32 | "@babel/core": { 33 | "version": "7.20.2", 34 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", 35 | "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", 36 | "dev": true, 37 | "requires": { 38 | "@ampproject/remapping": "^2.1.0", 39 | "@babel/code-frame": "^7.18.6", 40 | "@babel/generator": "^7.20.2", 41 | "@babel/helper-compilation-targets": "^7.20.0", 42 | "@babel/helper-module-transforms": "^7.20.2", 43 | "@babel/helpers": "^7.20.1", 44 | "@babel/parser": "^7.20.2", 45 | "@babel/template": "^7.18.10", 46 | "@babel/traverse": "^7.20.1", 47 | "@babel/types": "^7.20.2", 48 | "convert-source-map": "^1.7.0", 49 | "debug": "^4.1.0", 50 | "gensync": "^1.0.0-beta.2", 51 | "json5": "^2.2.1", 52 | "semver": "^6.3.0" 53 | } 54 | }, 55 | "@babel/generator": { 56 | "version": "7.20.4", 57 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", 58 | "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", 59 | "dev": true, 60 | "requires": { 61 | "@babel/types": "^7.20.2", 62 | "@jridgewell/gen-mapping": "^0.3.2", 63 | "jsesc": "^2.5.1" 64 | }, 65 | "dependencies": { 66 | "@jridgewell/gen-mapping": { 67 | "version": "0.3.2", 68 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 69 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 70 | "dev": true, 71 | "requires": { 72 | "@jridgewell/set-array": "^1.0.1", 73 | "@jridgewell/sourcemap-codec": "^1.4.10", 74 | "@jridgewell/trace-mapping": "^0.3.9" 75 | } 76 | } 77 | } 78 | }, 79 | "@babel/helper-compilation-targets": { 80 | "version": "7.20.0", 81 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", 82 | "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", 83 | "dev": true, 84 | "requires": { 85 | "@babel/compat-data": "^7.20.0", 86 | "@babel/helper-validator-option": "^7.18.6", 87 | "browserslist": "^4.21.3", 88 | "semver": "^6.3.0" 89 | } 90 | }, 91 | "@babel/helper-environment-visitor": { 92 | "version": "7.18.9", 93 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", 94 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", 95 | "dev": true 96 | }, 97 | "@babel/helper-function-name": { 98 | "version": "7.19.0", 99 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", 100 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", 101 | "dev": true, 102 | "requires": { 103 | "@babel/template": "^7.18.10", 104 | "@babel/types": "^7.19.0" 105 | } 106 | }, 107 | "@babel/helper-hoist-variables": { 108 | "version": "7.18.6", 109 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 110 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 111 | "dev": true, 112 | "requires": { 113 | "@babel/types": "^7.18.6" 114 | } 115 | }, 116 | "@babel/helper-module-imports": { 117 | "version": "7.18.6", 118 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 119 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 120 | "dev": true, 121 | "requires": { 122 | "@babel/types": "^7.18.6" 123 | } 124 | }, 125 | "@babel/helper-module-transforms": { 126 | "version": "7.20.2", 127 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", 128 | "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", 129 | "dev": true, 130 | "requires": { 131 | "@babel/helper-environment-visitor": "^7.18.9", 132 | "@babel/helper-module-imports": "^7.18.6", 133 | "@babel/helper-simple-access": "^7.20.2", 134 | "@babel/helper-split-export-declaration": "^7.18.6", 135 | "@babel/helper-validator-identifier": "^7.19.1", 136 | "@babel/template": "^7.18.10", 137 | "@babel/traverse": "^7.20.1", 138 | "@babel/types": "^7.20.2" 139 | } 140 | }, 141 | "@babel/helper-simple-access": { 142 | "version": "7.20.2", 143 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", 144 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", 145 | "dev": true, 146 | "requires": { 147 | "@babel/types": "^7.20.2" 148 | } 149 | }, 150 | "@babel/helper-split-export-declaration": { 151 | "version": "7.18.6", 152 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 153 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 154 | "dev": true, 155 | "requires": { 156 | "@babel/types": "^7.18.6" 157 | } 158 | }, 159 | "@babel/helper-string-parser": { 160 | "version": "7.19.4", 161 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", 162 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", 163 | "dev": true 164 | }, 165 | "@babel/helper-validator-identifier": { 166 | "version": "7.19.1", 167 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 168 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 169 | "dev": true 170 | }, 171 | "@babel/helper-validator-option": { 172 | "version": "7.18.6", 173 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", 174 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", 175 | "dev": true 176 | }, 177 | "@babel/helpers": { 178 | "version": "7.20.1", 179 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", 180 | "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", 181 | "dev": true, 182 | "requires": { 183 | "@babel/template": "^7.18.10", 184 | "@babel/traverse": "^7.20.1", 185 | "@babel/types": "^7.20.0" 186 | } 187 | }, 188 | "@babel/highlight": { 189 | "version": "7.18.6", 190 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 191 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 192 | "dev": true, 193 | "requires": { 194 | "@babel/helper-validator-identifier": "^7.18.6", 195 | "chalk": "^2.0.0", 196 | "js-tokens": "^4.0.0" 197 | }, 198 | "dependencies": { 199 | "ansi-styles": { 200 | "version": "3.2.1", 201 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 202 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 203 | "dev": true, 204 | "requires": { 205 | "color-convert": "^1.9.0" 206 | } 207 | }, 208 | "chalk": { 209 | "version": "2.4.2", 210 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 211 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 212 | "dev": true, 213 | "requires": { 214 | "ansi-styles": "^3.2.1", 215 | "escape-string-regexp": "^1.0.5", 216 | "supports-color": "^5.3.0" 217 | } 218 | }, 219 | "color-convert": { 220 | "version": "1.9.3", 221 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 222 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 223 | "dev": true, 224 | "requires": { 225 | "color-name": "1.1.3" 226 | } 227 | }, 228 | "color-name": { 229 | "version": "1.1.3", 230 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 231 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 232 | "dev": true 233 | }, 234 | "escape-string-regexp": { 235 | "version": "1.0.5", 236 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 237 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 238 | "dev": true 239 | }, 240 | "has-flag": { 241 | "version": "3.0.0", 242 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 243 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 244 | "dev": true 245 | }, 246 | "supports-color": { 247 | "version": "5.5.0", 248 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 249 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 250 | "dev": true, 251 | "requires": { 252 | "has-flag": "^3.0.0" 253 | } 254 | } 255 | } 256 | }, 257 | "@babel/parser": { 258 | "version": "7.20.3", 259 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", 260 | "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", 261 | "dev": true 262 | }, 263 | "@babel/template": { 264 | "version": "7.18.10", 265 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", 266 | "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", 267 | "dev": true, 268 | "requires": { 269 | "@babel/code-frame": "^7.18.6", 270 | "@babel/parser": "^7.18.10", 271 | "@babel/types": "^7.18.10" 272 | } 273 | }, 274 | "@babel/traverse": { 275 | "version": "7.20.1", 276 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", 277 | "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", 278 | "dev": true, 279 | "requires": { 280 | "@babel/code-frame": "^7.18.6", 281 | "@babel/generator": "^7.20.1", 282 | "@babel/helper-environment-visitor": "^7.18.9", 283 | "@babel/helper-function-name": "^7.19.0", 284 | "@babel/helper-hoist-variables": "^7.18.6", 285 | "@babel/helper-split-export-declaration": "^7.18.6", 286 | "@babel/parser": "^7.20.1", 287 | "@babel/types": "^7.20.0", 288 | "debug": "^4.1.0", 289 | "globals": "^11.1.0" 290 | }, 291 | "dependencies": { 292 | "globals": { 293 | "version": "11.12.0", 294 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 295 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 296 | "dev": true 297 | } 298 | } 299 | }, 300 | "@babel/types": { 301 | "version": "7.20.2", 302 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", 303 | "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", 304 | "dev": true, 305 | "requires": { 306 | "@babel/helper-string-parser": "^7.19.4", 307 | "@babel/helper-validator-identifier": "^7.19.1", 308 | "to-fast-properties": "^2.0.0" 309 | } 310 | }, 311 | "@eslint/eslintrc": { 312 | "version": "1.3.3", 313 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", 314 | "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", 315 | "dev": true, 316 | "requires": { 317 | "ajv": "^6.12.4", 318 | "debug": "^4.3.2", 319 | "espree": "^9.4.0", 320 | "globals": "^13.15.0", 321 | "ignore": "^5.2.0", 322 | "import-fresh": "^3.2.1", 323 | "js-yaml": "^4.1.0", 324 | "minimatch": "^3.1.2", 325 | "strip-json-comments": "^3.1.1" 326 | } 327 | }, 328 | "@humanwhocodes/config-array": { 329 | "version": "0.11.7", 330 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", 331 | "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", 332 | "dev": true, 333 | "requires": { 334 | "@humanwhocodes/object-schema": "^1.2.1", 335 | "debug": "^4.1.1", 336 | "minimatch": "^3.0.5" 337 | } 338 | }, 339 | "@humanwhocodes/module-importer": { 340 | "version": "1.0.1", 341 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 342 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 343 | "dev": true 344 | }, 345 | "@humanwhocodes/object-schema": { 346 | "version": "1.2.1", 347 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 348 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 349 | "dev": true 350 | }, 351 | "@istanbuljs/load-nyc-config": { 352 | "version": "1.1.0", 353 | "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", 354 | "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", 355 | "dev": true, 356 | "requires": { 357 | "camelcase": "^5.3.1", 358 | "find-up": "^4.1.0", 359 | "get-package-type": "^0.1.0", 360 | "js-yaml": "^3.13.1", 361 | "resolve-from": "^5.0.0" 362 | }, 363 | "dependencies": { 364 | "argparse": { 365 | "version": "1.0.10", 366 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 367 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 368 | "dev": true, 369 | "requires": { 370 | "sprintf-js": "~1.0.2" 371 | } 372 | }, 373 | "camelcase": { 374 | "version": "5.3.1", 375 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 376 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 377 | "dev": true 378 | }, 379 | "find-up": { 380 | "version": "4.1.0", 381 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 382 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 383 | "dev": true, 384 | "requires": { 385 | "locate-path": "^5.0.0", 386 | "path-exists": "^4.0.0" 387 | } 388 | }, 389 | "js-yaml": { 390 | "version": "3.14.1", 391 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 392 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 393 | "dev": true, 394 | "requires": { 395 | "argparse": "^1.0.7", 396 | "esprima": "^4.0.0" 397 | } 398 | }, 399 | "locate-path": { 400 | "version": "5.0.0", 401 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 402 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 403 | "dev": true, 404 | "requires": { 405 | "p-locate": "^4.1.0" 406 | } 407 | }, 408 | "p-limit": { 409 | "version": "2.3.0", 410 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 411 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 412 | "dev": true, 413 | "requires": { 414 | "p-try": "^2.0.0" 415 | } 416 | }, 417 | "p-locate": { 418 | "version": "4.1.0", 419 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 420 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 421 | "dev": true, 422 | "requires": { 423 | "p-limit": "^2.2.0" 424 | } 425 | }, 426 | "resolve-from": { 427 | "version": "5.0.0", 428 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 429 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 430 | "dev": true 431 | } 432 | } 433 | }, 434 | "@istanbuljs/schema": { 435 | "version": "0.1.3", 436 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 437 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 438 | "dev": true 439 | }, 440 | "@jridgewell/gen-mapping": { 441 | "version": "0.1.1", 442 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 443 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 444 | "dev": true, 445 | "requires": { 446 | "@jridgewell/set-array": "^1.0.0", 447 | "@jridgewell/sourcemap-codec": "^1.4.10" 448 | } 449 | }, 450 | "@jridgewell/resolve-uri": { 451 | "version": "3.1.0", 452 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 453 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 454 | "dev": true 455 | }, 456 | "@jridgewell/set-array": { 457 | "version": "1.1.2", 458 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 459 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 460 | "dev": true 461 | }, 462 | "@jridgewell/sourcemap-codec": { 463 | "version": "1.4.14", 464 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 465 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 466 | "dev": true 467 | }, 468 | "@jridgewell/trace-mapping": { 469 | "version": "0.3.17", 470 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 471 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 472 | "dev": true, 473 | "requires": { 474 | "@jridgewell/resolve-uri": "3.1.0", 475 | "@jridgewell/sourcemap-codec": "1.4.14" 476 | } 477 | }, 478 | "@nodelib/fs.scandir": { 479 | "version": "2.1.5", 480 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 481 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 482 | "dev": true, 483 | "requires": { 484 | "@nodelib/fs.stat": "2.0.5", 485 | "run-parallel": "^1.1.9" 486 | } 487 | }, 488 | "@nodelib/fs.stat": { 489 | "version": "2.0.5", 490 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 491 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 492 | "dev": true 493 | }, 494 | "@nodelib/fs.walk": { 495 | "version": "1.2.8", 496 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 497 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 498 | "dev": true, 499 | "requires": { 500 | "@nodelib/fs.scandir": "2.1.5", 501 | "fastq": "^1.6.0" 502 | } 503 | }, 504 | "acorn": { 505 | "version": "8.8.1", 506 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", 507 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", 508 | "dev": true 509 | }, 510 | "acorn-jsx": { 511 | "version": "5.3.2", 512 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 513 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 514 | "dev": true 515 | }, 516 | "aggregate-error": { 517 | "version": "3.1.0", 518 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 519 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 520 | "dev": true, 521 | "requires": { 522 | "clean-stack": "^2.0.0", 523 | "indent-string": "^4.0.0" 524 | } 525 | }, 526 | "ajv": { 527 | "version": "6.12.6", 528 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 529 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 530 | "dev": true, 531 | "requires": { 532 | "fast-deep-equal": "^3.1.1", 533 | "fast-json-stable-stringify": "^2.0.0", 534 | "json-schema-traverse": "^0.4.1", 535 | "uri-js": "^4.2.2" 536 | } 537 | }, 538 | "ansi-colors": { 539 | "version": "4.1.1", 540 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 541 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 542 | "dev": true 543 | }, 544 | "ansi-regex": { 545 | "version": "5.0.1", 546 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 547 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 548 | "dev": true 549 | }, 550 | "ansi-styles": { 551 | "version": "4.3.0", 552 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 553 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 554 | "dev": true, 555 | "requires": { 556 | "color-convert": "^2.0.1" 557 | } 558 | }, 559 | "anymatch": { 560 | "version": "3.1.3", 561 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 562 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 563 | "dev": true, 564 | "requires": { 565 | "normalize-path": "^3.0.0", 566 | "picomatch": "^2.0.4" 567 | } 568 | }, 569 | "append-transform": { 570 | "version": "2.0.0", 571 | "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", 572 | "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", 573 | "dev": true, 574 | "requires": { 575 | "default-require-extensions": "^3.0.0" 576 | } 577 | }, 578 | "archy": { 579 | "version": "1.0.0", 580 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 581 | "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", 582 | "dev": true 583 | }, 584 | "argparse": { 585 | "version": "2.0.1", 586 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 587 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 588 | "dev": true 589 | }, 590 | "balanced-match": { 591 | "version": "1.0.2", 592 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 593 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 594 | "dev": true 595 | }, 596 | "binary-extensions": { 597 | "version": "2.2.0", 598 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 599 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 600 | "dev": true 601 | }, 602 | "brace-expansion": { 603 | "version": "1.1.11", 604 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 605 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 606 | "dev": true, 607 | "requires": { 608 | "balanced-match": "^1.0.0", 609 | "concat-map": "0.0.1" 610 | } 611 | }, 612 | "braces": { 613 | "version": "3.0.2", 614 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 615 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 616 | "dev": true, 617 | "requires": { 618 | "fill-range": "^7.0.1" 619 | } 620 | }, 621 | "browser-stdout": { 622 | "version": "1.3.1", 623 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 624 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 625 | "dev": true 626 | }, 627 | "browserslist": { 628 | "version": "4.21.4", 629 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", 630 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", 631 | "dev": true, 632 | "requires": { 633 | "caniuse-lite": "^1.0.30001400", 634 | "electron-to-chromium": "^1.4.251", 635 | "node-releases": "^2.0.6", 636 | "update-browserslist-db": "^1.0.9" 637 | } 638 | }, 639 | "caching-transform": { 640 | "version": "4.0.0", 641 | "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", 642 | "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", 643 | "dev": true, 644 | "requires": { 645 | "hasha": "^5.0.0", 646 | "make-dir": "^3.0.0", 647 | "package-hash": "^4.0.0", 648 | "write-file-atomic": "^3.0.0" 649 | } 650 | }, 651 | "callsites": { 652 | "version": "3.1.0", 653 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 654 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 655 | "dev": true 656 | }, 657 | "camelcase": { 658 | "version": "6.3.0", 659 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 660 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 661 | "dev": true 662 | }, 663 | "caniuse-lite": { 664 | "version": "1.0.30001434", 665 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", 666 | "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", 667 | "dev": true 668 | }, 669 | "chalk": { 670 | "version": "4.1.2", 671 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 672 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 673 | "dev": true, 674 | "requires": { 675 | "ansi-styles": "^4.1.0", 676 | "supports-color": "^7.1.0" 677 | } 678 | }, 679 | "chokidar": { 680 | "version": "3.5.3", 681 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 682 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 683 | "dev": true, 684 | "requires": { 685 | "anymatch": "~3.1.2", 686 | "braces": "~3.0.2", 687 | "fsevents": "~2.3.2", 688 | "glob-parent": "~5.1.2", 689 | "is-binary-path": "~2.1.0", 690 | "is-glob": "~4.0.1", 691 | "normalize-path": "~3.0.0", 692 | "readdirp": "~3.6.0" 693 | }, 694 | "dependencies": { 695 | "glob-parent": { 696 | "version": "5.1.2", 697 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 698 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 699 | "dev": true, 700 | "requires": { 701 | "is-glob": "^4.0.1" 702 | } 703 | } 704 | } 705 | }, 706 | "clean-stack": { 707 | "version": "2.2.0", 708 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 709 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 710 | "dev": true 711 | }, 712 | "cliui": { 713 | "version": "7.0.4", 714 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 715 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 716 | "dev": true, 717 | "requires": { 718 | "string-width": "^4.2.0", 719 | "strip-ansi": "^6.0.0", 720 | "wrap-ansi": "^7.0.0" 721 | } 722 | }, 723 | "color-convert": { 724 | "version": "2.0.1", 725 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 726 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 727 | "dev": true, 728 | "requires": { 729 | "color-name": "~1.1.4" 730 | } 731 | }, 732 | "color-name": { 733 | "version": "1.1.4", 734 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 735 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 736 | "dev": true 737 | }, 738 | "commondir": { 739 | "version": "1.0.1", 740 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 741 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 742 | "dev": true 743 | }, 744 | "concat-map": { 745 | "version": "0.0.1", 746 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 747 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 748 | "dev": true 749 | }, 750 | "convert-source-map": { 751 | "version": "1.9.0", 752 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 753 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 754 | "dev": true 755 | }, 756 | "cross-spawn": { 757 | "version": "7.0.3", 758 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 759 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 760 | "dev": true, 761 | "requires": { 762 | "path-key": "^3.1.0", 763 | "shebang-command": "^2.0.0", 764 | "which": "^2.0.1" 765 | } 766 | }, 767 | "debug": { 768 | "version": "4.3.4", 769 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 770 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 771 | "dev": true, 772 | "requires": { 773 | "ms": "2.1.2" 774 | } 775 | }, 776 | "decamelize": { 777 | "version": "4.0.0", 778 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 779 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 780 | "dev": true 781 | }, 782 | "deep-is": { 783 | "version": "0.1.4", 784 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 785 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 786 | "dev": true 787 | }, 788 | "default-require-extensions": { 789 | "version": "3.0.1", 790 | "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", 791 | "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", 792 | "dev": true, 793 | "requires": { 794 | "strip-bom": "^4.0.0" 795 | } 796 | }, 797 | "diff": { 798 | "version": "5.0.0", 799 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 800 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 801 | "dev": true 802 | }, 803 | "doctrine": { 804 | "version": "3.0.0", 805 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 806 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 807 | "dev": true, 808 | "requires": { 809 | "esutils": "^2.0.2" 810 | } 811 | }, 812 | "electron-to-chromium": { 813 | "version": "1.4.284", 814 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", 815 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", 816 | "dev": true 817 | }, 818 | "emoji-regex": { 819 | "version": "8.0.0", 820 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 821 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 822 | "dev": true 823 | }, 824 | "es6-error": { 825 | "version": "4.1.1", 826 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 827 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 828 | "dev": true 829 | }, 830 | "escalade": { 831 | "version": "3.1.1", 832 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 833 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 834 | "dev": true 835 | }, 836 | "escape-string-regexp": { 837 | "version": "4.0.0", 838 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 839 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 840 | "dev": true 841 | }, 842 | "eslint": { 843 | "version": "8.28.0", 844 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", 845 | "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", 846 | "dev": true, 847 | "requires": { 848 | "@eslint/eslintrc": "^1.3.3", 849 | "@humanwhocodes/config-array": "^0.11.6", 850 | "@humanwhocodes/module-importer": "^1.0.1", 851 | "@nodelib/fs.walk": "^1.2.8", 852 | "ajv": "^6.10.0", 853 | "chalk": "^4.0.0", 854 | "cross-spawn": "^7.0.2", 855 | "debug": "^4.3.2", 856 | "doctrine": "^3.0.0", 857 | "escape-string-regexp": "^4.0.0", 858 | "eslint-scope": "^7.1.1", 859 | "eslint-utils": "^3.0.0", 860 | "eslint-visitor-keys": "^3.3.0", 861 | "espree": "^9.4.0", 862 | "esquery": "^1.4.0", 863 | "esutils": "^2.0.2", 864 | "fast-deep-equal": "^3.1.3", 865 | "file-entry-cache": "^6.0.1", 866 | "find-up": "^5.0.0", 867 | "glob-parent": "^6.0.2", 868 | "globals": "^13.15.0", 869 | "grapheme-splitter": "^1.0.4", 870 | "ignore": "^5.2.0", 871 | "import-fresh": "^3.0.0", 872 | "imurmurhash": "^0.1.4", 873 | "is-glob": "^4.0.0", 874 | "is-path-inside": "^3.0.3", 875 | "js-sdsl": "^4.1.4", 876 | "js-yaml": "^4.1.0", 877 | "json-stable-stringify-without-jsonify": "^1.0.1", 878 | "levn": "^0.4.1", 879 | "lodash.merge": "^4.6.2", 880 | "minimatch": "^3.1.2", 881 | "natural-compare": "^1.4.0", 882 | "optionator": "^0.9.1", 883 | "regexpp": "^3.2.0", 884 | "strip-ansi": "^6.0.1", 885 | "strip-json-comments": "^3.1.0", 886 | "text-table": "^0.2.0" 887 | } 888 | }, 889 | "eslint-plugin-mocha": { 890 | "version": "10.1.0", 891 | "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz", 892 | "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==", 893 | "dev": true, 894 | "requires": { 895 | "eslint-utils": "^3.0.0", 896 | "rambda": "^7.1.0" 897 | } 898 | }, 899 | "eslint-scope": { 900 | "version": "7.1.1", 901 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 902 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 903 | "dev": true, 904 | "requires": { 905 | "esrecurse": "^4.3.0", 906 | "estraverse": "^5.2.0" 907 | } 908 | }, 909 | "eslint-utils": { 910 | "version": "3.0.0", 911 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 912 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 913 | "dev": true, 914 | "requires": { 915 | "eslint-visitor-keys": "^2.0.0" 916 | }, 917 | "dependencies": { 918 | "eslint-visitor-keys": { 919 | "version": "2.1.0", 920 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 921 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 922 | "dev": true 923 | } 924 | } 925 | }, 926 | "eslint-visitor-keys": { 927 | "version": "3.3.0", 928 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 929 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 930 | "dev": true 931 | }, 932 | "espree": { 933 | "version": "9.4.1", 934 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", 935 | "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", 936 | "dev": true, 937 | "requires": { 938 | "acorn": "^8.8.0", 939 | "acorn-jsx": "^5.3.2", 940 | "eslint-visitor-keys": "^3.3.0" 941 | } 942 | }, 943 | "esprima": { 944 | "version": "4.0.1", 945 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 946 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 947 | "dev": true 948 | }, 949 | "esquery": { 950 | "version": "1.4.0", 951 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 952 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 953 | "dev": true, 954 | "requires": { 955 | "estraverse": "^5.1.0" 956 | } 957 | }, 958 | "esrecurse": { 959 | "version": "4.3.0", 960 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 961 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 962 | "dev": true, 963 | "requires": { 964 | "estraverse": "^5.2.0" 965 | } 966 | }, 967 | "estraverse": { 968 | "version": "5.3.0", 969 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 970 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 971 | "dev": true 972 | }, 973 | "esutils": { 974 | "version": "2.0.3", 975 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 976 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 977 | "dev": true 978 | }, 979 | "fast-deep-equal": { 980 | "version": "3.1.3", 981 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 982 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 983 | "dev": true 984 | }, 985 | "fast-json-stable-stringify": { 986 | "version": "2.1.0", 987 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 988 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 989 | "dev": true 990 | }, 991 | "fast-levenshtein": { 992 | "version": "2.0.6", 993 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 994 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 995 | "dev": true 996 | }, 997 | "fastq": { 998 | "version": "1.13.0", 999 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1000 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1001 | "dev": true, 1002 | "requires": { 1003 | "reusify": "^1.0.4" 1004 | } 1005 | }, 1006 | "file-entry-cache": { 1007 | "version": "6.0.1", 1008 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1009 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1010 | "dev": true, 1011 | "requires": { 1012 | "flat-cache": "^3.0.4" 1013 | } 1014 | }, 1015 | "fill-range": { 1016 | "version": "7.0.1", 1017 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1018 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1019 | "dev": true, 1020 | "requires": { 1021 | "to-regex-range": "^5.0.1" 1022 | } 1023 | }, 1024 | "find-cache-dir": { 1025 | "version": "3.3.2", 1026 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 1027 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 1028 | "dev": true, 1029 | "requires": { 1030 | "commondir": "^1.0.1", 1031 | "make-dir": "^3.0.2", 1032 | "pkg-dir": "^4.1.0" 1033 | } 1034 | }, 1035 | "find-up": { 1036 | "version": "5.0.0", 1037 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1038 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1039 | "dev": true, 1040 | "requires": { 1041 | "locate-path": "^6.0.0", 1042 | "path-exists": "^4.0.0" 1043 | } 1044 | }, 1045 | "flat": { 1046 | "version": "5.0.2", 1047 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1048 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1049 | "dev": true 1050 | }, 1051 | "flat-cache": { 1052 | "version": "3.0.4", 1053 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1054 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1055 | "dev": true, 1056 | "requires": { 1057 | "flatted": "^3.1.0", 1058 | "rimraf": "^3.0.2" 1059 | } 1060 | }, 1061 | "flatted": { 1062 | "version": "3.2.7", 1063 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1064 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1065 | "dev": true 1066 | }, 1067 | "foreground-child": { 1068 | "version": "2.0.0", 1069 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 1070 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 1071 | "dev": true, 1072 | "requires": { 1073 | "cross-spawn": "^7.0.0", 1074 | "signal-exit": "^3.0.2" 1075 | } 1076 | }, 1077 | "fromentries": { 1078 | "version": "1.3.2", 1079 | "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", 1080 | "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", 1081 | "dev": true 1082 | }, 1083 | "fs.realpath": { 1084 | "version": "1.0.0", 1085 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1086 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1087 | "dev": true 1088 | }, 1089 | "fsevents": { 1090 | "version": "2.3.2", 1091 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1092 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1093 | "dev": true, 1094 | "optional": true 1095 | }, 1096 | "gensync": { 1097 | "version": "1.0.0-beta.2", 1098 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1099 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1100 | "dev": true 1101 | }, 1102 | "get-caller-file": { 1103 | "version": "2.0.5", 1104 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1105 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1106 | "dev": true 1107 | }, 1108 | "get-package-type": { 1109 | "version": "0.1.0", 1110 | "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 1111 | "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 1112 | "dev": true 1113 | }, 1114 | "glob": { 1115 | "version": "7.2.3", 1116 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1117 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1118 | "dev": true, 1119 | "requires": { 1120 | "fs.realpath": "^1.0.0", 1121 | "inflight": "^1.0.4", 1122 | "inherits": "2", 1123 | "minimatch": "^3.1.1", 1124 | "once": "^1.3.0", 1125 | "path-is-absolute": "^1.0.0" 1126 | } 1127 | }, 1128 | "glob-parent": { 1129 | "version": "6.0.2", 1130 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1131 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1132 | "dev": true, 1133 | "requires": { 1134 | "is-glob": "^4.0.3" 1135 | } 1136 | }, 1137 | "globals": { 1138 | "version": "13.18.0", 1139 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", 1140 | "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", 1141 | "dev": true, 1142 | "requires": { 1143 | "type-fest": "^0.20.2" 1144 | } 1145 | }, 1146 | "graceful-fs": { 1147 | "version": "4.2.10", 1148 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1149 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1150 | "dev": true 1151 | }, 1152 | "grapheme-splitter": { 1153 | "version": "1.0.4", 1154 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 1155 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 1156 | "dev": true 1157 | }, 1158 | "has-flag": { 1159 | "version": "4.0.0", 1160 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1161 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1162 | "dev": true 1163 | }, 1164 | "hasha": { 1165 | "version": "5.2.2", 1166 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", 1167 | "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", 1168 | "dev": true, 1169 | "requires": { 1170 | "is-stream": "^2.0.0", 1171 | "type-fest": "^0.8.0" 1172 | }, 1173 | "dependencies": { 1174 | "type-fest": { 1175 | "version": "0.8.1", 1176 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1177 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1178 | "dev": true 1179 | } 1180 | } 1181 | }, 1182 | "he": { 1183 | "version": "1.2.0", 1184 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1185 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1186 | "dev": true 1187 | }, 1188 | "html-escaper": { 1189 | "version": "2.0.2", 1190 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1191 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1192 | "dev": true 1193 | }, 1194 | "ignore": { 1195 | "version": "5.2.1", 1196 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", 1197 | "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", 1198 | "dev": true 1199 | }, 1200 | "import-fresh": { 1201 | "version": "3.3.0", 1202 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1203 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1204 | "dev": true, 1205 | "requires": { 1206 | "parent-module": "^1.0.0", 1207 | "resolve-from": "^4.0.0" 1208 | } 1209 | }, 1210 | "imurmurhash": { 1211 | "version": "0.1.4", 1212 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1213 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1214 | "dev": true 1215 | }, 1216 | "indent-string": { 1217 | "version": "4.0.0", 1218 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1219 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1220 | "dev": true 1221 | }, 1222 | "inflight": { 1223 | "version": "1.0.6", 1224 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1225 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1226 | "dev": true, 1227 | "requires": { 1228 | "once": "^1.3.0", 1229 | "wrappy": "1" 1230 | } 1231 | }, 1232 | "inherits": { 1233 | "version": "2.0.4", 1234 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1235 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1236 | "dev": true 1237 | }, 1238 | "is-binary-path": { 1239 | "version": "2.1.0", 1240 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1241 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1242 | "dev": true, 1243 | "requires": { 1244 | "binary-extensions": "^2.0.0" 1245 | } 1246 | }, 1247 | "is-extglob": { 1248 | "version": "2.1.1", 1249 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1250 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1251 | "dev": true 1252 | }, 1253 | "is-fullwidth-code-point": { 1254 | "version": "3.0.0", 1255 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1256 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1257 | "dev": true 1258 | }, 1259 | "is-glob": { 1260 | "version": "4.0.3", 1261 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1262 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1263 | "dev": true, 1264 | "requires": { 1265 | "is-extglob": "^2.1.1" 1266 | } 1267 | }, 1268 | "is-number": { 1269 | "version": "7.0.0", 1270 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1271 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1272 | "dev": true 1273 | }, 1274 | "is-path-inside": { 1275 | "version": "3.0.3", 1276 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1277 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1278 | "dev": true 1279 | }, 1280 | "is-plain-obj": { 1281 | "version": "2.1.0", 1282 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1283 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1284 | "dev": true 1285 | }, 1286 | "is-stream": { 1287 | "version": "2.0.1", 1288 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1289 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1290 | "dev": true 1291 | }, 1292 | "is-typedarray": { 1293 | "version": "1.0.0", 1294 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1295 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 1296 | "dev": true 1297 | }, 1298 | "is-unicode-supported": { 1299 | "version": "0.1.0", 1300 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1301 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1302 | "dev": true 1303 | }, 1304 | "is-windows": { 1305 | "version": "1.0.2", 1306 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1307 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 1308 | "dev": true 1309 | }, 1310 | "isexe": { 1311 | "version": "2.0.0", 1312 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1313 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1314 | "dev": true 1315 | }, 1316 | "istanbul-lib-coverage": { 1317 | "version": "3.2.0", 1318 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 1319 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 1320 | "dev": true 1321 | }, 1322 | "istanbul-lib-hook": { 1323 | "version": "3.0.0", 1324 | "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", 1325 | "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", 1326 | "dev": true, 1327 | "requires": { 1328 | "append-transform": "^2.0.0" 1329 | } 1330 | }, 1331 | "istanbul-lib-instrument": { 1332 | "version": "4.0.3", 1333 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", 1334 | "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", 1335 | "dev": true, 1336 | "requires": { 1337 | "@babel/core": "^7.7.5", 1338 | "@istanbuljs/schema": "^0.1.2", 1339 | "istanbul-lib-coverage": "^3.0.0", 1340 | "semver": "^6.3.0" 1341 | } 1342 | }, 1343 | "istanbul-lib-processinfo": { 1344 | "version": "2.0.3", 1345 | "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", 1346 | "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", 1347 | "dev": true, 1348 | "requires": { 1349 | "archy": "^1.0.0", 1350 | "cross-spawn": "^7.0.3", 1351 | "istanbul-lib-coverage": "^3.2.0", 1352 | "p-map": "^3.0.0", 1353 | "rimraf": "^3.0.0", 1354 | "uuid": "^8.3.2" 1355 | } 1356 | }, 1357 | "istanbul-lib-report": { 1358 | "version": "3.0.0", 1359 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 1360 | "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", 1361 | "dev": true, 1362 | "requires": { 1363 | "istanbul-lib-coverage": "^3.0.0", 1364 | "make-dir": "^3.0.0", 1365 | "supports-color": "^7.1.0" 1366 | } 1367 | }, 1368 | "istanbul-lib-source-maps": { 1369 | "version": "4.0.1", 1370 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", 1371 | "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", 1372 | "dev": true, 1373 | "requires": { 1374 | "debug": "^4.1.1", 1375 | "istanbul-lib-coverage": "^3.0.0", 1376 | "source-map": "^0.6.1" 1377 | } 1378 | }, 1379 | "istanbul-reports": { 1380 | "version": "3.1.5", 1381 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", 1382 | "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", 1383 | "dev": true, 1384 | "requires": { 1385 | "html-escaper": "^2.0.0", 1386 | "istanbul-lib-report": "^3.0.0" 1387 | } 1388 | }, 1389 | "js-sdsl": { 1390 | "version": "4.2.0", 1391 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", 1392 | "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", 1393 | "dev": true 1394 | }, 1395 | "js-tokens": { 1396 | "version": "4.0.0", 1397 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1398 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1399 | "dev": true 1400 | }, 1401 | "js-yaml": { 1402 | "version": "4.1.0", 1403 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1404 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1405 | "dev": true, 1406 | "requires": { 1407 | "argparse": "^2.0.1" 1408 | } 1409 | }, 1410 | "jsesc": { 1411 | "version": "2.5.2", 1412 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1413 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1414 | "dev": true 1415 | }, 1416 | "json-schema-traverse": { 1417 | "version": "0.4.1", 1418 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1419 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1420 | "dev": true 1421 | }, 1422 | "json-stable-stringify-without-jsonify": { 1423 | "version": "1.0.1", 1424 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1425 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1426 | "dev": true 1427 | }, 1428 | "json5": { 1429 | "version": "2.2.3", 1430 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1431 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1432 | "dev": true 1433 | }, 1434 | "levn": { 1435 | "version": "0.4.1", 1436 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1437 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1438 | "dev": true, 1439 | "requires": { 1440 | "prelude-ls": "^1.2.1", 1441 | "type-check": "~0.4.0" 1442 | } 1443 | }, 1444 | "locate-path": { 1445 | "version": "6.0.0", 1446 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1447 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1448 | "dev": true, 1449 | "requires": { 1450 | "p-locate": "^5.0.0" 1451 | } 1452 | }, 1453 | "lodash.flattendeep": { 1454 | "version": "4.4.0", 1455 | "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", 1456 | "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", 1457 | "dev": true 1458 | }, 1459 | "lodash.merge": { 1460 | "version": "4.6.2", 1461 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1462 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1463 | "dev": true 1464 | }, 1465 | "log-symbols": { 1466 | "version": "4.1.0", 1467 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1468 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1469 | "dev": true, 1470 | "requires": { 1471 | "chalk": "^4.1.0", 1472 | "is-unicode-supported": "^0.1.0" 1473 | } 1474 | }, 1475 | "make-dir": { 1476 | "version": "3.1.0", 1477 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1478 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1479 | "dev": true, 1480 | "requires": { 1481 | "semver": "^6.0.0" 1482 | } 1483 | }, 1484 | "minimatch": { 1485 | "version": "3.1.2", 1486 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1487 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1488 | "dev": true, 1489 | "requires": { 1490 | "brace-expansion": "^1.1.7" 1491 | } 1492 | }, 1493 | "mocha": { 1494 | "version": "10.1.0", 1495 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", 1496 | "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", 1497 | "dev": true, 1498 | "requires": { 1499 | "ansi-colors": "4.1.1", 1500 | "browser-stdout": "1.3.1", 1501 | "chokidar": "3.5.3", 1502 | "debug": "4.3.4", 1503 | "diff": "5.0.0", 1504 | "escape-string-regexp": "4.0.0", 1505 | "find-up": "5.0.0", 1506 | "glob": "7.2.0", 1507 | "he": "1.2.0", 1508 | "js-yaml": "4.1.0", 1509 | "log-symbols": "4.1.0", 1510 | "minimatch": "5.0.1", 1511 | "ms": "2.1.3", 1512 | "nanoid": "3.3.3", 1513 | "serialize-javascript": "6.0.0", 1514 | "strip-json-comments": "3.1.1", 1515 | "supports-color": "8.1.1", 1516 | "workerpool": "6.2.1", 1517 | "yargs": "16.2.0", 1518 | "yargs-parser": "20.2.4", 1519 | "yargs-unparser": "2.0.0" 1520 | }, 1521 | "dependencies": { 1522 | "glob": { 1523 | "version": "7.2.0", 1524 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1525 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1526 | "dev": true, 1527 | "requires": { 1528 | "fs.realpath": "^1.0.0", 1529 | "inflight": "^1.0.4", 1530 | "inherits": "2", 1531 | "minimatch": "^3.0.4", 1532 | "once": "^1.3.0", 1533 | "path-is-absolute": "^1.0.0" 1534 | }, 1535 | "dependencies": { 1536 | "minimatch": { 1537 | "version": "3.1.2", 1538 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1539 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1540 | "dev": true, 1541 | "requires": { 1542 | "brace-expansion": "^1.1.7" 1543 | } 1544 | } 1545 | } 1546 | }, 1547 | "minimatch": { 1548 | "version": "5.0.1", 1549 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 1550 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 1551 | "dev": true, 1552 | "requires": { 1553 | "brace-expansion": "^2.0.1" 1554 | }, 1555 | "dependencies": { 1556 | "brace-expansion": { 1557 | "version": "2.0.1", 1558 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1559 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1560 | "dev": true, 1561 | "requires": { 1562 | "balanced-match": "^1.0.0" 1563 | } 1564 | } 1565 | } 1566 | }, 1567 | "ms": { 1568 | "version": "2.1.3", 1569 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1570 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1571 | "dev": true 1572 | }, 1573 | "supports-color": { 1574 | "version": "8.1.1", 1575 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1576 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1577 | "dev": true, 1578 | "requires": { 1579 | "has-flag": "^4.0.0" 1580 | } 1581 | } 1582 | } 1583 | }, 1584 | "ms": { 1585 | "version": "2.1.2", 1586 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1587 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1588 | "dev": true 1589 | }, 1590 | "nanoid": { 1591 | "version": "3.3.3", 1592 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", 1593 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 1594 | "dev": true 1595 | }, 1596 | "natural-compare": { 1597 | "version": "1.4.0", 1598 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1599 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1600 | "dev": true 1601 | }, 1602 | "node-preload": { 1603 | "version": "0.2.1", 1604 | "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", 1605 | "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", 1606 | "dev": true, 1607 | "requires": { 1608 | "process-on-spawn": "^1.0.0" 1609 | } 1610 | }, 1611 | "node-releases": { 1612 | "version": "2.0.6", 1613 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", 1614 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", 1615 | "dev": true 1616 | }, 1617 | "normalize-path": { 1618 | "version": "3.0.0", 1619 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1620 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1621 | "dev": true 1622 | }, 1623 | "nyc": { 1624 | "version": "15.1.0", 1625 | "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", 1626 | "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", 1627 | "dev": true, 1628 | "requires": { 1629 | "@istanbuljs/load-nyc-config": "^1.0.0", 1630 | "@istanbuljs/schema": "^0.1.2", 1631 | "caching-transform": "^4.0.0", 1632 | "convert-source-map": "^1.7.0", 1633 | "decamelize": "^1.2.0", 1634 | "find-cache-dir": "^3.2.0", 1635 | "find-up": "^4.1.0", 1636 | "foreground-child": "^2.0.0", 1637 | "get-package-type": "^0.1.0", 1638 | "glob": "^7.1.6", 1639 | "istanbul-lib-coverage": "^3.0.0", 1640 | "istanbul-lib-hook": "^3.0.0", 1641 | "istanbul-lib-instrument": "^4.0.0", 1642 | "istanbul-lib-processinfo": "^2.0.2", 1643 | "istanbul-lib-report": "^3.0.0", 1644 | "istanbul-lib-source-maps": "^4.0.0", 1645 | "istanbul-reports": "^3.0.2", 1646 | "make-dir": "^3.0.0", 1647 | "node-preload": "^0.2.1", 1648 | "p-map": "^3.0.0", 1649 | "process-on-spawn": "^1.0.0", 1650 | "resolve-from": "^5.0.0", 1651 | "rimraf": "^3.0.0", 1652 | "signal-exit": "^3.0.2", 1653 | "spawn-wrap": "^2.0.0", 1654 | "test-exclude": "^6.0.0", 1655 | "yargs": "^15.0.2" 1656 | }, 1657 | "dependencies": { 1658 | "camelcase": { 1659 | "version": "5.3.1", 1660 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1661 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1662 | "dev": true 1663 | }, 1664 | "cliui": { 1665 | "version": "6.0.0", 1666 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 1667 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 1668 | "dev": true, 1669 | "requires": { 1670 | "string-width": "^4.2.0", 1671 | "strip-ansi": "^6.0.0", 1672 | "wrap-ansi": "^6.2.0" 1673 | } 1674 | }, 1675 | "decamelize": { 1676 | "version": "1.2.0", 1677 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1678 | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 1679 | "dev": true 1680 | }, 1681 | "find-up": { 1682 | "version": "4.1.0", 1683 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1684 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1685 | "dev": true, 1686 | "requires": { 1687 | "locate-path": "^5.0.0", 1688 | "path-exists": "^4.0.0" 1689 | } 1690 | }, 1691 | "locate-path": { 1692 | "version": "5.0.0", 1693 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1694 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1695 | "dev": true, 1696 | "requires": { 1697 | "p-locate": "^4.1.0" 1698 | } 1699 | }, 1700 | "p-limit": { 1701 | "version": "2.3.0", 1702 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1703 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1704 | "dev": true, 1705 | "requires": { 1706 | "p-try": "^2.0.0" 1707 | } 1708 | }, 1709 | "p-locate": { 1710 | "version": "4.1.0", 1711 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1712 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1713 | "dev": true, 1714 | "requires": { 1715 | "p-limit": "^2.2.0" 1716 | } 1717 | }, 1718 | "resolve-from": { 1719 | "version": "5.0.0", 1720 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1721 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1722 | "dev": true 1723 | }, 1724 | "wrap-ansi": { 1725 | "version": "6.2.0", 1726 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 1727 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 1728 | "dev": true, 1729 | "requires": { 1730 | "ansi-styles": "^4.0.0", 1731 | "string-width": "^4.1.0", 1732 | "strip-ansi": "^6.0.0" 1733 | } 1734 | }, 1735 | "y18n": { 1736 | "version": "4.0.3", 1737 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 1738 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 1739 | "dev": true 1740 | }, 1741 | "yargs": { 1742 | "version": "15.4.1", 1743 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 1744 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 1745 | "dev": true, 1746 | "requires": { 1747 | "cliui": "^6.0.0", 1748 | "decamelize": "^1.2.0", 1749 | "find-up": "^4.1.0", 1750 | "get-caller-file": "^2.0.1", 1751 | "require-directory": "^2.1.1", 1752 | "require-main-filename": "^2.0.0", 1753 | "set-blocking": "^2.0.0", 1754 | "string-width": "^4.2.0", 1755 | "which-module": "^2.0.0", 1756 | "y18n": "^4.0.0", 1757 | "yargs-parser": "^18.1.2" 1758 | } 1759 | }, 1760 | "yargs-parser": { 1761 | "version": "18.1.3", 1762 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 1763 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 1764 | "dev": true, 1765 | "requires": { 1766 | "camelcase": "^5.0.0", 1767 | "decamelize": "^1.2.0" 1768 | } 1769 | } 1770 | } 1771 | }, 1772 | "once": { 1773 | "version": "1.4.0", 1774 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1775 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1776 | "dev": true, 1777 | "requires": { 1778 | "wrappy": "1" 1779 | } 1780 | }, 1781 | "optionator": { 1782 | "version": "0.9.1", 1783 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1784 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1785 | "dev": true, 1786 | "requires": { 1787 | "deep-is": "^0.1.3", 1788 | "fast-levenshtein": "^2.0.6", 1789 | "levn": "^0.4.1", 1790 | "prelude-ls": "^1.2.1", 1791 | "type-check": "^0.4.0", 1792 | "word-wrap": "^1.2.3" 1793 | } 1794 | }, 1795 | "p-limit": { 1796 | "version": "3.1.0", 1797 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1798 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1799 | "dev": true, 1800 | "requires": { 1801 | "yocto-queue": "^0.1.0" 1802 | } 1803 | }, 1804 | "p-locate": { 1805 | "version": "5.0.0", 1806 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1807 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1808 | "dev": true, 1809 | "requires": { 1810 | "p-limit": "^3.0.2" 1811 | } 1812 | }, 1813 | "p-map": { 1814 | "version": "3.0.0", 1815 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", 1816 | "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", 1817 | "dev": true, 1818 | "requires": { 1819 | "aggregate-error": "^3.0.0" 1820 | } 1821 | }, 1822 | "p-try": { 1823 | "version": "2.2.0", 1824 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1825 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1826 | "dev": true 1827 | }, 1828 | "package-hash": { 1829 | "version": "4.0.0", 1830 | "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", 1831 | "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", 1832 | "dev": true, 1833 | "requires": { 1834 | "graceful-fs": "^4.1.15", 1835 | "hasha": "^5.0.0", 1836 | "lodash.flattendeep": "^4.4.0", 1837 | "release-zalgo": "^1.0.0" 1838 | } 1839 | }, 1840 | "parent-module": { 1841 | "version": "1.0.1", 1842 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1843 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1844 | "dev": true, 1845 | "requires": { 1846 | "callsites": "^3.0.0" 1847 | } 1848 | }, 1849 | "path-exists": { 1850 | "version": "4.0.0", 1851 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1852 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1853 | "dev": true 1854 | }, 1855 | "path-is-absolute": { 1856 | "version": "1.0.1", 1857 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1858 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1859 | "dev": true 1860 | }, 1861 | "path-key": { 1862 | "version": "3.1.1", 1863 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1864 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1865 | "dev": true 1866 | }, 1867 | "picocolors": { 1868 | "version": "1.0.0", 1869 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1870 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1871 | "dev": true 1872 | }, 1873 | "picomatch": { 1874 | "version": "2.3.1", 1875 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1876 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1877 | "dev": true 1878 | }, 1879 | "pkg-dir": { 1880 | "version": "4.2.0", 1881 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1882 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1883 | "dev": true, 1884 | "requires": { 1885 | "find-up": "^4.0.0" 1886 | }, 1887 | "dependencies": { 1888 | "find-up": { 1889 | "version": "4.1.0", 1890 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1891 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1892 | "dev": true, 1893 | "requires": { 1894 | "locate-path": "^5.0.0", 1895 | "path-exists": "^4.0.0" 1896 | } 1897 | }, 1898 | "locate-path": { 1899 | "version": "5.0.0", 1900 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1901 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1902 | "dev": true, 1903 | "requires": { 1904 | "p-locate": "^4.1.0" 1905 | } 1906 | }, 1907 | "p-limit": { 1908 | "version": "2.3.0", 1909 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1910 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1911 | "dev": true, 1912 | "requires": { 1913 | "p-try": "^2.0.0" 1914 | } 1915 | }, 1916 | "p-locate": { 1917 | "version": "4.1.0", 1918 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1919 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1920 | "dev": true, 1921 | "requires": { 1922 | "p-limit": "^2.2.0" 1923 | } 1924 | } 1925 | } 1926 | }, 1927 | "prelude-ls": { 1928 | "version": "1.2.1", 1929 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1930 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1931 | "dev": true 1932 | }, 1933 | "process-on-spawn": { 1934 | "version": "1.0.0", 1935 | "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", 1936 | "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", 1937 | "dev": true, 1938 | "requires": { 1939 | "fromentries": "^1.2.0" 1940 | } 1941 | }, 1942 | "punycode": { 1943 | "version": "2.1.1", 1944 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1945 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1946 | "dev": true 1947 | }, 1948 | "queue-microtask": { 1949 | "version": "1.2.3", 1950 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1951 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1952 | "dev": true 1953 | }, 1954 | "rambda": { 1955 | "version": "7.4.0", 1956 | "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz", 1957 | "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==", 1958 | "dev": true 1959 | }, 1960 | "randombytes": { 1961 | "version": "2.1.0", 1962 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1963 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1964 | "dev": true, 1965 | "requires": { 1966 | "safe-buffer": "^5.1.0" 1967 | } 1968 | }, 1969 | "readdirp": { 1970 | "version": "3.6.0", 1971 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1972 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1973 | "dev": true, 1974 | "requires": { 1975 | "picomatch": "^2.2.1" 1976 | } 1977 | }, 1978 | "regexpp": { 1979 | "version": "3.2.0", 1980 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1981 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1982 | "dev": true 1983 | }, 1984 | "release-zalgo": { 1985 | "version": "1.0.0", 1986 | "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", 1987 | "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", 1988 | "dev": true, 1989 | "requires": { 1990 | "es6-error": "^4.0.1" 1991 | } 1992 | }, 1993 | "require-directory": { 1994 | "version": "2.1.1", 1995 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1996 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1997 | "dev": true 1998 | }, 1999 | "require-main-filename": { 2000 | "version": "2.0.0", 2001 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2002 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2003 | "dev": true 2004 | }, 2005 | "resolve-from": { 2006 | "version": "4.0.0", 2007 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2008 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2009 | "dev": true 2010 | }, 2011 | "reusify": { 2012 | "version": "1.0.4", 2013 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2014 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2015 | "dev": true 2016 | }, 2017 | "rimraf": { 2018 | "version": "3.0.2", 2019 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2020 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2021 | "dev": true, 2022 | "requires": { 2023 | "glob": "^7.1.3" 2024 | } 2025 | }, 2026 | "run-parallel": { 2027 | "version": "1.2.0", 2028 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2029 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2030 | "dev": true, 2031 | "requires": { 2032 | "queue-microtask": "^1.2.2" 2033 | } 2034 | }, 2035 | "safe-buffer": { 2036 | "version": "5.2.1", 2037 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2038 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2039 | "dev": true 2040 | }, 2041 | "semver": { 2042 | "version": "6.3.0", 2043 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2044 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2045 | "dev": true 2046 | }, 2047 | "serialize-javascript": { 2048 | "version": "6.0.0", 2049 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 2050 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 2051 | "dev": true, 2052 | "requires": { 2053 | "randombytes": "^2.1.0" 2054 | } 2055 | }, 2056 | "set-blocking": { 2057 | "version": "2.0.0", 2058 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2059 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 2060 | "dev": true 2061 | }, 2062 | "shebang-command": { 2063 | "version": "2.0.0", 2064 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2065 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2066 | "dev": true, 2067 | "requires": { 2068 | "shebang-regex": "^3.0.0" 2069 | } 2070 | }, 2071 | "shebang-regex": { 2072 | "version": "3.0.0", 2073 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2074 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2075 | "dev": true 2076 | }, 2077 | "should": { 2078 | "version": "13.2.3", 2079 | "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", 2080 | "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", 2081 | "dev": true, 2082 | "requires": { 2083 | "should-equal": "^2.0.0", 2084 | "should-format": "^3.0.3", 2085 | "should-type": "^1.4.0", 2086 | "should-type-adaptors": "^1.0.1", 2087 | "should-util": "^1.0.0" 2088 | } 2089 | }, 2090 | "should-equal": { 2091 | "version": "2.0.0", 2092 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", 2093 | "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", 2094 | "dev": true, 2095 | "requires": { 2096 | "should-type": "^1.4.0" 2097 | } 2098 | }, 2099 | "should-format": { 2100 | "version": "3.0.3", 2101 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 2102 | "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", 2103 | "dev": true, 2104 | "requires": { 2105 | "should-type": "^1.3.0", 2106 | "should-type-adaptors": "^1.0.1" 2107 | } 2108 | }, 2109 | "should-type": { 2110 | "version": "1.4.0", 2111 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 2112 | "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", 2113 | "dev": true 2114 | }, 2115 | "should-type-adaptors": { 2116 | "version": "1.1.0", 2117 | "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", 2118 | "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", 2119 | "dev": true, 2120 | "requires": { 2121 | "should-type": "^1.3.0", 2122 | "should-util": "^1.0.0" 2123 | } 2124 | }, 2125 | "should-util": { 2126 | "version": "1.0.1", 2127 | "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", 2128 | "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", 2129 | "dev": true 2130 | }, 2131 | "signal-exit": { 2132 | "version": "3.0.7", 2133 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2134 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2135 | "dev": true 2136 | }, 2137 | "source-map": { 2138 | "version": "0.6.1", 2139 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2140 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2141 | "dev": true 2142 | }, 2143 | "spawn-wrap": { 2144 | "version": "2.0.0", 2145 | "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", 2146 | "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", 2147 | "dev": true, 2148 | "requires": { 2149 | "foreground-child": "^2.0.0", 2150 | "is-windows": "^1.0.2", 2151 | "make-dir": "^3.0.0", 2152 | "rimraf": "^3.0.0", 2153 | "signal-exit": "^3.0.2", 2154 | "which": "^2.0.1" 2155 | } 2156 | }, 2157 | "sprintf-js": { 2158 | "version": "1.0.3", 2159 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2160 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 2161 | "dev": true 2162 | }, 2163 | "string-width": { 2164 | "version": "4.2.3", 2165 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2166 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2167 | "dev": true, 2168 | "requires": { 2169 | "emoji-regex": "^8.0.0", 2170 | "is-fullwidth-code-point": "^3.0.0", 2171 | "strip-ansi": "^6.0.1" 2172 | } 2173 | }, 2174 | "strip-ansi": { 2175 | "version": "6.0.1", 2176 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2177 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2178 | "dev": true, 2179 | "requires": { 2180 | "ansi-regex": "^5.0.1" 2181 | } 2182 | }, 2183 | "strip-bom": { 2184 | "version": "4.0.0", 2185 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 2186 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 2187 | "dev": true 2188 | }, 2189 | "strip-json-comments": { 2190 | "version": "3.1.1", 2191 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2192 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2193 | "dev": true 2194 | }, 2195 | "supports-color": { 2196 | "version": "7.2.0", 2197 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2198 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2199 | "dev": true, 2200 | "requires": { 2201 | "has-flag": "^4.0.0" 2202 | } 2203 | }, 2204 | "test-exclude": { 2205 | "version": "6.0.0", 2206 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 2207 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 2208 | "dev": true, 2209 | "requires": { 2210 | "@istanbuljs/schema": "^0.1.2", 2211 | "glob": "^7.1.4", 2212 | "minimatch": "^3.0.4" 2213 | } 2214 | }, 2215 | "text-table": { 2216 | "version": "0.2.0", 2217 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2218 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2219 | "dev": true 2220 | }, 2221 | "to-fast-properties": { 2222 | "version": "2.0.0", 2223 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2224 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 2225 | "dev": true 2226 | }, 2227 | "to-regex-range": { 2228 | "version": "5.0.1", 2229 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2230 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2231 | "dev": true, 2232 | "requires": { 2233 | "is-number": "^7.0.0" 2234 | } 2235 | }, 2236 | "type-check": { 2237 | "version": "0.4.0", 2238 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2239 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2240 | "dev": true, 2241 | "requires": { 2242 | "prelude-ls": "^1.2.1" 2243 | } 2244 | }, 2245 | "type-fest": { 2246 | "version": "0.20.2", 2247 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2248 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2249 | "dev": true 2250 | }, 2251 | "typedarray-to-buffer": { 2252 | "version": "3.1.5", 2253 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 2254 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2255 | "dev": true, 2256 | "requires": { 2257 | "is-typedarray": "^1.0.0" 2258 | } 2259 | }, 2260 | "update-browserslist-db": { 2261 | "version": "1.0.10", 2262 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", 2263 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", 2264 | "dev": true, 2265 | "requires": { 2266 | "escalade": "^3.1.1", 2267 | "picocolors": "^1.0.0" 2268 | } 2269 | }, 2270 | "uri-js": { 2271 | "version": "4.4.1", 2272 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2273 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2274 | "dev": true, 2275 | "requires": { 2276 | "punycode": "^2.1.0" 2277 | } 2278 | }, 2279 | "uuid": { 2280 | "version": "8.3.2", 2281 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2282 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 2283 | "dev": true 2284 | }, 2285 | "which": { 2286 | "version": "2.0.2", 2287 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2288 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2289 | "dev": true, 2290 | "requires": { 2291 | "isexe": "^2.0.0" 2292 | } 2293 | }, 2294 | "which-module": { 2295 | "version": "2.0.0", 2296 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2297 | "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", 2298 | "dev": true 2299 | }, 2300 | "word-wrap": { 2301 | "version": "1.2.3", 2302 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2303 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2304 | "dev": true 2305 | }, 2306 | "workerpool": { 2307 | "version": "6.2.1", 2308 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 2309 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 2310 | "dev": true 2311 | }, 2312 | "wrap-ansi": { 2313 | "version": "7.0.0", 2314 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2315 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2316 | "dev": true, 2317 | "requires": { 2318 | "ansi-styles": "^4.0.0", 2319 | "string-width": "^4.1.0", 2320 | "strip-ansi": "^6.0.0" 2321 | } 2322 | }, 2323 | "wrappy": { 2324 | "version": "1.0.2", 2325 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2326 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2327 | "dev": true 2328 | }, 2329 | "write-file-atomic": { 2330 | "version": "3.0.3", 2331 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 2332 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2333 | "dev": true, 2334 | "requires": { 2335 | "imurmurhash": "^0.1.4", 2336 | "is-typedarray": "^1.0.0", 2337 | "signal-exit": "^3.0.2", 2338 | "typedarray-to-buffer": "^3.1.5" 2339 | } 2340 | }, 2341 | "y18n": { 2342 | "version": "5.0.8", 2343 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2344 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2345 | "dev": true 2346 | }, 2347 | "yargs": { 2348 | "version": "16.2.0", 2349 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2350 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2351 | "dev": true, 2352 | "requires": { 2353 | "cliui": "^7.0.2", 2354 | "escalade": "^3.1.1", 2355 | "get-caller-file": "^2.0.5", 2356 | "require-directory": "^2.1.1", 2357 | "string-width": "^4.2.0", 2358 | "y18n": "^5.0.5", 2359 | "yargs-parser": "^20.2.2" 2360 | } 2361 | }, 2362 | "yargs-parser": { 2363 | "version": "20.2.4", 2364 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2365 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2366 | "dev": true 2367 | }, 2368 | "yargs-unparser": { 2369 | "version": "2.0.0", 2370 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2371 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2372 | "dev": true, 2373 | "requires": { 2374 | "camelcase": "^6.0.0", 2375 | "decamelize": "^4.0.0", 2376 | "flat": "^5.0.2", 2377 | "is-plain-obj": "^2.1.0" 2378 | } 2379 | }, 2380 | "yocto-queue": { 2381 | "version": "0.1.0", 2382 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2383 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2384 | "dev": true 2385 | } 2386 | } 2387 | } 2388 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "date-format", 3 | "version": "4.0.14", 4 | "description": "Formatting Date objects as strings since 2013", 5 | "main": "lib/index.js", 6 | "files": [ 7 | "lib", 8 | "CHANGELOG.md" 9 | ], 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/nomiddlename/date-format.git" 13 | }, 14 | "engines": { 15 | "node": ">=4.0" 16 | }, 17 | "scripts": { 18 | "lint": "eslint lib/* test/*", 19 | "pretest": "eslint lib/* test/*", 20 | "test": "nyc --check-coverage mocha" 21 | }, 22 | "keywords": [ 23 | "date", 24 | "format", 25 | "string" 26 | ], 27 | "author": "Gareth Jones ", 28 | "license": "MIT", 29 | "readmeFilename": "README.md", 30 | "gitHead": "bf59015ab6c9e86454b179374f29debbdb403522", 31 | "devDependencies": { 32 | "eslint": "^8.28.0", 33 | "eslint-plugin-mocha": "^10.1.0", 34 | "mocha": "^10.1.0", 35 | "nyc": "^15.1.0", 36 | "should": "^13.2.3" 37 | }, 38 | "nyc": { 39 | "include": [ 40 | "lib/**" 41 | ], 42 | "branches": 100, 43 | "lines": 100, 44 | "functions": 100 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /test/date_format-test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('should'); 4 | 5 | var dateFormat = require('../lib'); 6 | 7 | function createFixedDate() { 8 | return new Date(2010, 0, 11, 14, 31, 30, 5); 9 | } 10 | 11 | describe('date_format', function() { 12 | var date = createFixedDate(); 13 | 14 | it('should default to now when a date is not provided', function() { 15 | dateFormat.asString(dateFormat.DATETIME_FORMAT).should.not.be.empty(); 16 | }); 17 | 18 | it('should be usable directly without calling asString', function() { 19 | dateFormat(dateFormat.DATETIME_FORMAT, date).should.eql('11 01 2010 14:31:30.005'); 20 | }); 21 | 22 | it('should format a date as string using a pattern', function() { 23 | dateFormat.asString(dateFormat.DATETIME_FORMAT, date).should.eql('11 01 2010 14:31:30.005'); 24 | }); 25 | 26 | it('should default to the ISO8601 format', function() { 27 | dateFormat.asString(date).should.eql('2010-01-11T14:31:30.005'); 28 | }); 29 | 30 | it('should provide a ISO8601 with timezone offset format', function() { 31 | var tzDate = createFixedDate(); 32 | tzDate.getTimezoneOffset = function () { 33 | return -660; 34 | }; 35 | 36 | // when tz offset is in the pattern, the date should be in local time 37 | dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, tzDate) 38 | .should.eql('2010-01-11T14:31:30.005+11:00'); 39 | 40 | tzDate = createFixedDate(); 41 | tzDate.getTimezoneOffset = function () { 42 | return 120; 43 | }; 44 | 45 | dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, tzDate) 46 | .should.eql('2010-01-11T14:31:30.005-02:00'); 47 | 48 | tzDate = createFixedDate(); 49 | tzDate.getTimezoneOffset = function () { 50 | return 0; 51 | }; 52 | 53 | dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, tzDate) 54 | .should.eql('2010-01-11T14:31:30.005Z'); 55 | }); 56 | 57 | it('should provide a just-the-time format', function() { 58 | dateFormat.asString(dateFormat.ABSOLUTETIME_FORMAT, date).should.eql('14:31:30.005'); 59 | }); 60 | 61 | it('should provide a custom format', function() { 62 | var customDate = createFixedDate(); 63 | customDate.getTimezoneOffset = function () { 64 | return 120; 65 | }; 66 | 67 | dateFormat.asString('O.SSS.ss.mm.hh.dd.MM.yy', customDate).should.eql('-02:00.005.30.31.14.11.01.10'); 68 | }); 69 | }); 70 | -------------------------------------------------------------------------------- /test/parse-test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | require("should"); 4 | var dateFormat = require("../lib"); 5 | 6 | describe("dateFormat.parse", function() { 7 | it("should require a pattern", function() { 8 | (function() { 9 | dateFormat.parse(); 10 | }.should.throw(/pattern must be supplied/)); 11 | (function() { 12 | dateFormat.parse(null); 13 | }.should.throw(/pattern must be supplied/)); 14 | (function() { 15 | dateFormat.parse(""); 16 | }.should.throw(/pattern must be supplied/)); 17 | }); 18 | 19 | describe("with a pattern that has no replacements", function() { 20 | it("should return a new date when the string matches", function() { 21 | dateFormat.parse("cheese", "cheese").should.be.a.Date(); 22 | }); 23 | 24 | it("should throw if the string does not match", function() { 25 | (function() { 26 | dateFormat.parse("cheese", "biscuits"); 27 | }.should.throw(/String 'biscuits' could not be parsed as 'cheese'/)); 28 | }); 29 | }); 30 | 31 | describe("with a full pattern", function() { 32 | var pattern = "yyyy-MM-dd hh:mm:ss.SSSO"; 33 | 34 | it("should return the correct date if the string matches", function() { 35 | var testDate = new Date(0); 36 | testDate.setUTCFullYear(2018); 37 | testDate.setUTCMonth(8); 38 | testDate.setUTCDate(13); 39 | testDate.setUTCHours(18); 40 | testDate.setUTCMinutes(10); 41 | testDate.setUTCSeconds(12); 42 | testDate.setUTCMilliseconds(392); 43 | 44 | dateFormat 45 | .parse(pattern, "2018-09-14 04:10:12.392+1000") 46 | .getTime() 47 | .should.eql(testDate.getTime()) 48 | ; 49 | }); 50 | 51 | it("should throw if the string does not match", function() { 52 | (function() { 53 | dateFormat.parse(pattern, "biscuits"); 54 | }.should.throw( 55 | /String 'biscuits' could not be parsed as 'yyyy-MM-dd hh:mm:ss.SSSO'/ 56 | )); 57 | }); 58 | }); 59 | 60 | describe("with a partial pattern", function() { 61 | var testDate = dateFormat.now() || new Date(); 62 | dateFormat.now = function() { 63 | return testDate; 64 | }; 65 | 66 | /** 67 | * If there's no timezone in the format, then we verify against the local date 68 | */ 69 | function verifyLocalDate(actual, expected) { 70 | function hasValue(obj) { 71 | return (obj !== null && obj !== undefined); 72 | } 73 | actual.getFullYear().should.eql(hasValue(expected.year) ? expected.year : testDate.getFullYear()); 74 | actual.getMonth().should.eql(hasValue(expected.month) ? expected.month : testDate.getMonth()); 75 | actual.getDate().should.eql(hasValue(expected.day) ? expected.day : testDate.getDate()); 76 | actual.getHours().should.eql(hasValue(expected.hours) ? expected.hours : testDate.getHours()); 77 | actual.getMinutes().should.eql(hasValue(expected.minutes) ? expected.minutes : testDate.getMinutes()); 78 | actual.getSeconds().should.eql(hasValue(expected.seconds) ? expected.seconds : testDate.getSeconds()); 79 | actual 80 | .getMilliseconds() 81 | .should.eql(hasValue(expected.milliseconds) ? expected.milliseconds : testDate.getMilliseconds()); 82 | } 83 | 84 | /** 85 | * If a timezone is specified, let's verify against the UTC time it is supposed to be 86 | */ 87 | function verifyDate(actual, expected) { 88 | function hasValue(obj) { 89 | return (obj !== null && obj !== undefined); 90 | } 91 | actual.getUTCFullYear().should.eql(hasValue(expected.year) ? expected.year : testDate.getUTCFullYear()); 92 | actual.getUTCMonth().should.eql(hasValue(expected.month) ? expected.month : testDate.getUTCMonth()); 93 | actual.getUTCDate().should.eql(hasValue(expected.day) ? expected.day : testDate.getUTCDate()); 94 | actual.getUTCHours().should.eql(hasValue(expected.hours) ? expected.hours : testDate.getUTCHours()); 95 | actual.getUTCMinutes().should.eql(hasValue(expected.minutes) ? expected.minutes : testDate.getUTCMinutes()); 96 | actual.getUTCSeconds().should.eql(hasValue(expected.seconds) ? expected.seconds : testDate.getUTCSeconds()); 97 | actual 98 | .getMilliseconds() 99 | .should.eql(hasValue(expected.milliseconds) ? expected.milliseconds : testDate.getMilliseconds()); 100 | } 101 | 102 | it("should return a date with missing values defaulting to current time", function() { 103 | var date = dateFormat.parse("yyyy-MM", "2015-09"); 104 | verifyLocalDate(date, { year: 2015, month: 8 }); 105 | }); 106 | 107 | it("should use a passed in date for missing values", function() { 108 | var missingValueDate = new Date(2010, 1, 8, 22, 30, 12, 100); 109 | var date = dateFormat.parse("yyyy-MM", "2015-09", missingValueDate); 110 | verifyLocalDate(date, { 111 | year: 2015, 112 | month: 8, 113 | day: 8, 114 | hours: 22, 115 | minutes: 30, 116 | seconds: 12, 117 | milliseconds: 100 118 | }); 119 | }); 120 | 121 | it("should handle variations on the same pattern", function() { 122 | var date = dateFormat.parse("MM-yyyy", "09-2015"); 123 | verifyLocalDate(date, { year: 2015, month: 8 }); 124 | 125 | date = dateFormat.parse("yyyy MM", "2015 09"); 126 | verifyLocalDate(date, { year: 2015, month: 8 }); 127 | 128 | date = dateFormat.parse("MM, yyyy.", "09, 2015."); 129 | verifyLocalDate(date, { year: 2015, month: 8 }); 130 | }); 131 | 132 | describe("should match all the date parts", function() { 133 | it("works with dd", function() { 134 | var date = dateFormat.parse("dd", "21"); 135 | verifyLocalDate(date, { day: 21 }); 136 | }); 137 | 138 | it("works with hh", function() { 139 | var date = dateFormat.parse("hh", "12"); 140 | verifyLocalDate(date, { hours: 12 }); 141 | }); 142 | 143 | it("works with mm", function() { 144 | var date = dateFormat.parse("mm", "34"); 145 | verifyLocalDate(date, { minutes: 34 }); 146 | }); 147 | 148 | it("works with ss", function() { 149 | var date = dateFormat.parse("ss", "59"); 150 | verifyLocalDate(date, { seconds: 59 }); 151 | }); 152 | 153 | it("works with ss.SSS", function() { 154 | var date = dateFormat.parse("ss.SSS", "23.452"); 155 | verifyLocalDate(date, { seconds: 23, milliseconds: 452 }); 156 | }); 157 | 158 | it("works with hh:mm O (+1000)", function() { 159 | var date = dateFormat.parse("hh:mm O", "05:23 +1000"); 160 | verifyDate(date, { hours: 19, minutes: 23 }); 161 | }); 162 | 163 | it("works with hh:mm O (-200)", function() { 164 | var date = dateFormat.parse("hh:mm O", "05:23 -200"); 165 | verifyDate(date, { hours: 7, minutes: 23 }); 166 | }); 167 | 168 | it("works with hh:mm O (+09:30)", function() { 169 | var date = dateFormat.parse("hh:mm O", "05:23 +09:30"); 170 | verifyDate(date, { hours: 19, minutes: 53 }); 171 | }); 172 | 173 | it("works with hh:mm O (Z)", function() { 174 | var date = dateFormat.parse("hh:mm O", "05:23 Z"); 175 | verifyDate(date, { hours: 5, minutes: 23 }); 176 | }); 177 | }); 178 | }); 179 | 180 | describe("with a partial pattern and last day of month", function() { 181 | var testDate = new Date("2022-05-31T00:00:00.000Z"); 182 | 183 | /** 184 | * If there's no timezone in the format, then we verify against the local date 185 | */ 186 | function verifyLocalDate(actual, expected) { 187 | function hasValue(obj) { 188 | return (obj !== null && obj !== undefined); 189 | } 190 | actual.getFullYear().should.eql(hasValue(expected.year) ? expected.year : testDate.getFullYear()); 191 | actual.getMonth().should.eql(hasValue(expected.month) ? expected.month : testDate.getMonth()); 192 | actual.getDate().should.eql(hasValue(expected.day) ? expected.day : testDate.getDate()); 193 | actual.getHours().should.eql(hasValue(expected.hours) ? expected.hours : testDate.getHours()); 194 | actual.getMinutes().should.eql(hasValue(expected.minutes) ? expected.minutes : testDate.getMinutes()); 195 | actual.getSeconds().should.eql(hasValue(expected.seconds) ? expected.seconds : testDate.getSeconds()); 196 | actual 197 | .getMilliseconds() 198 | .should.eql(hasValue(expected.milliseconds) ? expected.milliseconds : testDate.getMilliseconds()); 199 | } 200 | 201 | it("should return a date with missing values defaulting to current time", function() { 202 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-01-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 0, day: 1}); 203 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-02-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 1, day: 1}); 204 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-03-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 2, day: 1}); 205 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-04-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 3, day: 1}); 206 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-05-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 4, day: 1}); 207 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-06-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 5, day: 1}); 208 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-07-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 6, day: 1}); 209 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-08-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 7, day: 1}); 210 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-09-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 8, day: 1}); 211 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-10-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 9, day: 1}); 212 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-11-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 10, day: 1}); 213 | verifyLocalDate(dateFormat.parse('yyyy-MM-dd', '2022-12-01', new Date("2022-05-31T00:00:00.000Z")), { year: 2022, month: 11, day: 1}); 214 | }); 215 | }); 216 | 217 | describe("with a date formatted by this library", function() { 218 | describe("should format and then parse back to the same date", function() { 219 | function testDateInitWithUTC() { 220 | var td = new Date(0); 221 | td.setUTCFullYear(2018); 222 | td.setUTCMonth(8); 223 | td.setUTCDate(13); 224 | td.setUTCHours(18); 225 | td.setUTCMinutes(10); 226 | td.setUTCSeconds(12); 227 | td.setUTCMilliseconds(392); 228 | return td; 229 | } 230 | 231 | it("works with ISO8601_WITH_TZ_OFFSET_FORMAT", function() { 232 | // For this test case to work, the date object must be initialized with 233 | // UTC timezone 234 | var td = testDateInitWithUTC(); 235 | var d = dateFormat(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, td); 236 | dateFormat.parse(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, d) 237 | .should.eql(td); 238 | }); 239 | 240 | it("works with ISO8601_FORMAT", function() { 241 | var td = new Date(); 242 | var d = dateFormat(dateFormat.ISO8601_FORMAT, td); 243 | var actual = dateFormat.parse(dateFormat.ISO8601_FORMAT, d); 244 | actual.should.eql(td); 245 | }); 246 | 247 | it("works with DATETIME_FORMAT", function() { 248 | var testDate = new Date(); 249 | dateFormat 250 | .parse( 251 | dateFormat.DATETIME_FORMAT, 252 | dateFormat(dateFormat.DATETIME_FORMAT, testDate) 253 | ) 254 | .should.eql(testDate); 255 | }); 256 | 257 | it("works with ABSOLUTETIME_FORMAT", function() { 258 | var testDate = new Date(); 259 | dateFormat 260 | .parse( 261 | dateFormat.ABSOLUTETIME_FORMAT, 262 | dateFormat(dateFormat.ABSOLUTETIME_FORMAT, testDate) 263 | ) 264 | .should.eql(testDate); 265 | }); 266 | }); 267 | }); 268 | }); 269 | --------------------------------------------------------------------------------