diff -Nru pybtex-0.22.2/CHANGES pybtex-0.23.0/CHANGES --- pybtex-0.22.2/CHANGES 2019-01-17 15:16:16.000000000 +0000 +++ pybtex-0.23.0/CHANGES 2020-10-12 15:23:33.543192000 +0000 @@ -1,3 +1,43 @@ +Version 0.23.0 +-------------- +(released on October 12, 2020) + +- Reimplemented :py:class:`~pybtex.utils.OrderedCaseInsensitiveDict` using + :py:class:`python:collections.OrderedDict` (so it has a __delitem__). + +- ``unsrt.py`` now supports type when formatting phdthesis. + +- Added :py:meth:`~pybtex.database.BibliographyData.from_string` to + :py:class:`pybtex.database.BibliographyData`. + +- Added :py:meth:`~pybtex.database.Entry.from_string` and + :py:meth:`~pybtex.database.Entry.to_string` to + :py:class:`pybtex.database.Entry`. + +- Added indentation to ``__repr__`` in + :py:class:`pybtex.database.BibliographyData` and + :py:class:`pybtex.database.Entry`. + +- Preserve order in + :py:meth:`pybtex.utils.OrderedCaseInsensitiveDict.__repr__`. + +- Fixed entries with duplicate keys being removed during sorting. + +- Fixed handling of duplicate person fields + +- Use :py:mod:`~xml.etree.ElementTree` instead of the deprecated + ``cElementTree``. + +- Import base classes from :py:mod:`python:collections.abc` instead of + :py:mod:`python:collections`. + +- Use ``__iter__`` instead of deprecated ``Element.getchildren()``. + + +Thanks to David Chiang, Jerry James, Jannik Schürg, Nathaniel Starkman, and +Matthias Troffaes for their fixes and improvements! + + Version 0.22.2 -------------- (released on January 17, 2019) diff -Nru pybtex-0.22.2/debian/changelog pybtex-0.23.0/debian/changelog --- pybtex-0.22.2/debian/changelog 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/changelog 2020-11-03 12:10:16.000000000 +0000 @@ -1,3 +1,16 @@ +pybtex (0.23.0-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + - Compatible with Python 3.9 (closes: #973071). + * Drop Ensure-sort-only-sorts.patch, included in the new release. + * Switch from nose to pytest for testing. + * Add a patch to use packaged intersphinx inventory for Python API. + - Also make python-pybtex-doc recommend python3-doc. + * Update Source field in debian/copyright for the new PyPI domain. + + -- Dmitry Shachnev Tue, 03 Nov 2020 15:10:16 +0300 + pybtex (0.22.2-1) unstable; urgency=medium * Team upload. diff -Nru pybtex-0.22.2/debian/control pybtex-0.23.0/debian/control --- pybtex-0.22.2/debian/control 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/control 2020-11-03 12:10:16.000000000 +0000 @@ -8,8 +8,9 @@ dpkg-dev (>= 1.17.14), python3-sphinx , python3-all, + python3-doc , python3-latexcodec (>= 1.0.4), - python3-nose , + python3-pytest , python3-setuptools, python3-six, python3-yaml, @@ -72,6 +73,7 @@ Section: doc Depends: ${misc:Depends}, ${sphinxdoc:Depends} +Recommends: python3-doc Built-Using: ${sphinxdoc:Built-Using} Description: documentation for pybtex Pybtex reads citation information from a file and produces a formatted diff -Nru pybtex-0.22.2/debian/copyright pybtex-0.23.0/debian/copyright --- pybtex-0.22.2/debian/copyright 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/copyright 2020-11-03 12:10:16.000000000 +0000 @@ -1,7 +1,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: pybtex Upstream-Contact: Andrey Golovizin -Source: https://pypi.python.org/pypi/pybtex +Source: https://pypi.org/project/pybtex/ Files: * Copyright: 2006-2019 Andrey Golovizin diff -Nru pybtex-0.22.2/debian/patches/Ensure-sort-only-sorts.patch pybtex-0.23.0/debian/patches/Ensure-sort-only-sorts.patch --- pybtex-0.22.2/debian/patches/Ensure-sort-only-sorts.patch 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/patches/Ensure-sort-only-sorts.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -From: "Matthias C. M. Troffaes" -Date: Wed, 4 Sep 2019 10:17:37 +0100 -Subject: Ensure sort only sorts, and that it does not remove entries. - -(cherry picked from commit 37b017cc58dad8d104bd8ae1d168c70837d77d8c) ---- - pybtex/style/sorting/__init__.py | 8 +------- - 1 file changed, 1 insertion(+), 7 deletions(-) - -diff --git a/pybtex/style/sorting/__init__.py b/pybtex/style/sorting/__init__.py -index edc66c6..b64d87c 100644 ---- a/pybtex/style/sorting/__init__.py -+++ b/pybtex/style/sorting/__init__.py -@@ -28,10 +28,4 @@ class BaseSortingStyle(Plugin): - raise NotImplementedError - - def sort(self, entries): -- entry_dict = dict( -- (self.sorting_key(entry), entry) -- for entry in entries -- ) -- sorted_keys = sorted(entry_dict) -- sorted_entries = [entry_dict[key] for key in sorted_keys] -- return sorted_entries -+ return sorted(entries, key=self.sorting_key) diff -Nru pybtex-0.22.2/debian/patches/series pybtex-0.23.0/debian/patches/series --- pybtex-0.22.2/debian/patches/series 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/patches/series 2020-11-03 12:10:16.000000000 +0000 @@ -1 +1 @@ -Ensure-sort-only-sorts.patch +Use-local-intersphinx-inventory.patch diff -Nru pybtex-0.22.2/debian/patches/Use-local-intersphinx-inventory.patch pybtex-0.23.0/debian/patches/Use-local-intersphinx-inventory.patch --- pybtex-0.22.2/debian/patches/Use-local-intersphinx-inventory.patch 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/debian/patches/Use-local-intersphinx-inventory.patch 2020-11-03 12:10:16.000000000 +0000 @@ -0,0 +1,23 @@ +From: Dmitry Shachnev +Date: Tue, 3 Nov 2020 14:39:37 +0300 +Subject: Use local intersphinx inventory + +To prevent Sphinx from downloading https://docs.python.org/3/objects.inv +during build. +--- + docs/source/conf.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/docs/source/conf.py b/docs/source/conf.py +index 40b7bfc..3edcb2f 100644 +--- a/docs/source/conf.py ++++ b/docs/source/conf.py +@@ -42,7 +42,7 @@ extensions = [ + ] + + intersphinx_mapping = { +- 'python': ('https://docs.python.org/3/', None), ++ 'python': ('/usr/share/doc/python3-doc/html', None), + } + + extlinks = { diff -Nru pybtex-0.22.2/debian/tests/control pybtex-0.23.0/debian/tests/control --- pybtex-0.22.2/debian/tests/control 2020-04-17 11:34:56.000000000 +0000 +++ pybtex-0.23.0/debian/tests/control 2020-11-03 12:10:16.000000000 +0000 @@ -1,10 +1,11 @@ Test-Command: set -e + ; cp -r tests "$AUTOPKGTEST_TMP" ; for py in $(py3versions -r 2>/dev/null) ; do cd "$AUTOPKGTEST_TMP" ; echo "Testing with $py:" - ; $py -m nose -v pybtex + ; $py -m pytest -v ; done Depends: python3-all, python3-pybtex, - python3-nose + python3-pytest Restrictions: allow-stderr diff -Nru pybtex-0.22.2/docs/man1/pybtex.1 pybtex-0.23.0/docs/man1/pybtex.1 --- pybtex-0.22.2/docs/man1/pybtex.1 2019-01-17 15:21:18.000000000 +0000 +++ pybtex-0.23.0/docs/man1/pybtex.1 2020-10-12 15:36:28.944637000 +0000 @@ -1,10 +1,10 @@ .\"Man page for Pybtex (pybtex) .\" -.\" Generation time: 2019-01-17 15:21:18 +0000 +.\" Generation time: 2020-10-12 15:36:28 +0000 .\" Large parts of this file are autogenerated from the output of .\" "pybtex --help" .\" -.TH pybtex 1 "2019-01-17" "0.22.2" "Pybtex" +.TH pybtex 1 "2020-10-12" "0.23.0" "Pybtex" .SH "NAME" pybtex - BibTeX-compatible bibliography processor in Python diff -Nru pybtex-0.22.2/docs/man1/pybtex-convert.1 pybtex-0.23.0/docs/man1/pybtex-convert.1 --- pybtex-0.22.2/docs/man1/pybtex-convert.1 2019-01-17 15:21:18.000000000 +0000 +++ pybtex-0.23.0/docs/man1/pybtex-convert.1 2020-10-12 15:36:28.945637000 +0000 @@ -1,10 +1,10 @@ .\"Man page for Pybtex (pybtex-convert) .\" -.\" Generation time: 2019-01-17 15:21:18 +0000 +.\" Generation time: 2020-10-12 15:36:28 +0000 .\" Large parts of this file are autogenerated from the output of .\" "pybtex-convert --help" .\" -.TH pybtex-convert 1 "2019-01-17" "0.22.2" "Pybtex" +.TH pybtex-convert 1 "2020-10-12" "0.23.0" "Pybtex" .SH "NAME" pybtex-convert - convert between bibliography database formats diff -Nru pybtex-0.22.2/docs/man1/pybtex-format.1 pybtex-0.23.0/docs/man1/pybtex-format.1 --- pybtex-0.22.2/docs/man1/pybtex-format.1 2019-01-17 15:21:18.000000000 +0000 +++ pybtex-0.23.0/docs/man1/pybtex-format.1 2020-10-12 15:36:28.945637000 +0000 @@ -1,10 +1,10 @@ .\"Man page for Pybtex (pybtex-format) .\" -.\" Generation time: 2019-01-17 15:21:18 +0000 +.\" Generation time: 2020-10-12 15:36:28 +0000 .\" Large parts of this file are autogenerated from the output of .\" "pybtex-format --help" .\" -.TH pybtex-format 1 "2019-01-17" "0.22.2" "Pybtex" +.TH pybtex-format 1 "2020-10-12" "0.23.0" "Pybtex" .SH "NAME" pybtex-format - format bibliography database as human-readable text diff -Nru pybtex-0.22.2/docs/source/api/plugins.rst pybtex-0.23.0/docs/source/api/plugins.rst --- pybtex-0.22.2/docs/source/api/plugins.rst 2018-05-20 14:44:09.000000000 +0000 +++ pybtex-0.23.0/docs/source/api/plugins.rst 2020-10-12 15:33:55.332528000 +0000 @@ -91,7 +91,7 @@ See `Setuptools' documentation`_. -.. _Setuptools' documentation: https://setuptools.readthedocs.io/en/latest/setuptools.html#extensible-applications-and-frameworks +.. _Setuptools' documentation: https://setuptools.readthedocs.io/en/latest/userguide/quickstart.html#entry-points-and-automatic-script-creation Example plugins diff -Nru pybtex-0.22.2/docs/source/conf.py pybtex-0.23.0/docs/source/conf.py --- pybtex-0.22.2/docs/source/conf.py 2019-01-16 16:31:31.000000000 +0000 +++ pybtex-0.23.0/docs/source/conf.py 2020-10-12 15:23:33.544191800 +0000 @@ -36,14 +36,14 @@ 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.ifconfig', - # 'sphinx.ext.intersphinx', + 'sphinx.ext.intersphinx', 'sphinx.ext.extlinks', 'pybtex_doctools.pygments', ] -# intersphinx_mapping = { -# 'python': ('https://docs.python.org/3/', None), -# } +intersphinx_mapping = { + 'python': ('https://docs.python.org/3/', None), +} extlinks = { 'source': ('https://bitbucket.org/pybtex-devs/pybtex/src/HEAD/%s', ''), diff -Nru pybtex-0.22.2/docs/source/formats.rst pybtex-0.23.0/docs/source/formats.rst --- pybtex-0.22.2/docs/source/formats.rst 2019-01-16 16:29:18.000000000 +0000 +++ pybtex-0.23.0/docs/source/formats.rst 2020-10-12 15:35:06.257655000 +0000 @@ -29,7 +29,7 @@ Some links: -- `A basic description of the BibTeX format. `_ +- `A basic description of the BibTeX format. `_ - `An in-depth description of the quirky BibTeX syntax. `_ diff -Nru pybtex-0.22.2/docs/theme/css-src/master.css pybtex-0.23.0/docs/theme/css-src/master.css --- pybtex-0.22.2/docs/theme/css-src/master.css 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/docs/theme/css-src/master.css 2020-10-12 15:23:45.023050500 +0000 @@ -0,0 +1,236 @@ +@tailwind base; + +@tailwind components; + +@tailwind utilities; + + +.light { + color: #B58000; +} + +.dark { + color: #804000; +} + + +.document { + @apply font-serif; +} + +.document, .prev-next { + @apply mx-auto; + width: 100%; +} + +@media (min-width: 576px) { + .document, .prev-next { + max-width: 576px; + } +} + +@media (min-width: 768px) { + .document, .prev-next { + max-width: 768px; + } +} + +@media (max-width: 576px) { + html { + font-size: 12pt; + } +} + +.document { + @apply mt-2; +} + +a { + @apply no-underline light dark; +} + +a:hover { + @apply underline light; +} + +p { + @apply mt-2 mb-2; + hyphens: auto; +} + +blockquote { + @apply mt-4 mb-4 ml-8; +} + +ul { + @apply mt-2 mb-2 ml-8 list-disc; +} + +ol { + @apply mt-2 mb-2 ml-8 list-decimal; +} + +li { + @apply mt-1; +} + +img { + @apply border-none; +} + +h1, h2, h3, h1 a, h2 a, h3 a { + @apply font-sans light; +} + +.search a { + @apply font-sans; +} + +h1 { + @apply mt-16 mb-2 text-4xl; +} + +h2 { + @apply mt-12 mb-2 text-2xl; +} + +h3 { + @apply mt-8 mb-2 text-lg; +} + +a.headerlink { + @apply invisible no-underline; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + @apply visible dark; +} + +.contents, .toctree-wrapper { + @apply mt-8 mb-8 ml-8 font-sans dark; +} + +.contents ul, .toctree-wrapper ul { + @apply light; +} + +.contents .topic-title { + @apply hidden; +} + +dl, dt { + @apply mt-4; +} + +dd { + @apply ml-8; +} + +code, pre, tt { + @apply font-mono text-base; + hyphens: none; +} + +code { + @apply whitespace-pre break-words; +} + +code.descname { + @apply font-bold light; +} + +.function dt, .class dt { + @apply font-mono; +} + +.function dt em, .class dt em { + @apply not-italic; +} + +.versionmodified { + @apply italic; +} + +.sourcecode pre, .highlight pre { + @apply mt-4 mb-4 ml-4 text-sm; +} + +.field-list ul { + margin: m-0; +} + +.field-list li { + @apply m-0; +} + +.field-list th { + @apply font-normal; +} + +.field-list td strong { + @apply font-normal font-mono; +} + +.first { + @apply mt-0 !important; +} + +.left { + @apply float-left; +} + +.right { + @apply float-right; +} + +.middle { + @apply inline-block text-center; +} + +.relbar { + @apply mt-4 ml-4 mr-4 text-sm; +} + +form input { + @apply border border-solid border-gray-500 pl-1 pr-1 text-sm rounded-sm; +} + +.prev-next { + @apply mt-12 text-center; + clear: both; + word-wrap: normal; +} + +.footer { + @apply mt-20 mb-4 text-xs text-center opacity-50; + clear: both; +} + +.admonition { + border: 0.4ex solid; + margin-top: 1ex !important; + margin-bottom: 1ex !important; + background: red; +} + +.admonition p { + margin: 1ex 1em; + padding: 0; +} + +.warning { + border-color: #D04040; +} + +.highlighted { + background-color: #fbe54e; +} diff -Nru pybtex-0.22.2/docs/theme/package.json pybtex-0.23.0/docs/theme/package.json --- pybtex-0.22.2/docs/theme/package.json 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/docs/theme/package.json 2020-10-12 15:23:45.025050400 +0000 @@ -0,0 +1,15 @@ +{ + "name": "pybtex-css", + "version": "1.0.0", + "description": "Pybtex CSS", + "devDependencies": { + "cssnano": "^4.1.10", + "postcss-cli": "^8.1.0", + "tailwindcss": "^1.8.13" + }, + "scripts": { + "build": "env NODE_ENV=production postcss -o static/master.css css-src/master.css" + }, + "author": "Andrey Golovizin", + "license": "MIT" +} diff -Nru pybtex-0.22.2/docs/theme/package-lock.json pybtex-0.23.0/docs/theme/package-lock.json --- pybtex-0.22.2/docs/theme/package-lock.json 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/docs/theme/package-lock.json 2020-10-12 15:23:45.024050500 +0000 @@ -0,0 +1,2714 @@ +{ + "name": "pybtex-css", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" + } + }, + "caniuse-lite": { + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.578", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz", + "integrity": "sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==", + "dev": true + }, + "node-releases": { + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "dependency-graph": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", + "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } + } + }, + "electron-to-chromium": { + "version": "1.3.248", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.248.tgz", + "integrity": "sha512-+hQe6xqpODLw9Nr80KoT0/S+YarjNbI9wgZchkOopJLBLPgAsniK184P0IGVs/0NsoZf4lBnQhOsjen9a47Hrg==", + "dev": true + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", + "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "dependencies": { + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.forown": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", + "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-releases": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", + "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "dev": true + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-hash": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", + "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "dev": true + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "postcss": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-cli": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.1.0.tgz", + "integrity": "sha512-FYuV5zyYX53X5RywInxjWLqHZ4oCBC3nDwrHYU3Z75mFqUo5IHfbeY593heWSagG90nPnXq3tXCck8+2CUl8EA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "chokidar": "^3.3.0", + "dependency-graph": "^0.9.0", + "fs-extra": "^9.0.0", + "get-stdin": "^8.0.0", + "globby": "^11.0.0", + "postcss-load-config": "^3.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", + "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.2.tgz", + "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==", + "dev": true + }, + "yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", + "dev": true, + "requires": { + "cliui": "^7.0.0", + "escalade": "^3.0.2", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.1", + "yargs-parser": "^20.0.0" + } + }, + "yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA==", + "dev": true + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "dev": true, + "requires": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", + "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^7.0.18" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "postcss-load-config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.0.tgz", + "integrity": "sha512-lErrN8imuEF1cSiHBV8MiR7HeuzlDpCGNtaMyYHlOBuJHHOGw6S4xOMZp8BbXPr7AGQp14L6PZDlIOpfFJ6f7w==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-nested": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", + "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", + "dev": true, + "requires": { + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reporter": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.1.tgz", + "integrity": "sha512-R9AK80KIqqMb+lwGRBcRkXS7r96VCTxrZvvrfibyA/dWjqctwx7leHMCC05A9HbW8PnChwOWwrmISwp5HQu5wg==", + "dev": true, + "requires": { + "colorette": "^1.2.1", + "lodash.difference": "^4.5.0", + "lodash.forown": "^4.4.0", + "lodash.get": "^4.4.2", + "lodash.groupby": "^4.6.0", + "lodash.sortby": "^4.7.0", + "log-symbols": "^4.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce-css-calc": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz", + "integrity": "sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "tailwindcss": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-1.8.13.tgz", + "integrity": "sha512-z3R/6qPqfjauSR4qHhlA8I0OnfSyuotvigXISq666k+V52VSs5HV//KZ0Xe3qrZ4h5Um4OG5g+lcgjXSfURjDw==", + "dev": true, + "requires": { + "@fullhuman/postcss-purgecss": "^2.1.2", + "autoprefixer": "^9.4.5", + "browserslist": "^4.12.0", + "bytes": "^3.0.0", + "chalk": "^3.0.0 || ^4.0.0", + "color": "^3.1.2", + "detective": "^5.2.0", + "fs-extra": "^8.0.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.20", + "node-emoji": "^1.8.1", + "normalize.css": "^8.0.1", + "object-hash": "^2.0.3", + "postcss": "^7.0.11", + "postcss-functions": "^3.0.0", + "postcss-js": "^2.0.0", + "postcss-nested": "^4.1.1", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "reduce-css-calc": "^2.1.6", + "resolve": "^1.14.2" + }, + "dependencies": { + "@fullhuman/postcss-purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz", + "integrity": "sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw==", + "dev": true, + "requires": { + "postcss": "7.0.32", + "purgecss": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" + } + }, + "caniuse-lite": { + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.578", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz", + "integrity": "sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node-releases": { + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dev": true, + "requires": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + } + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + } + } +} diff -Nru pybtex-0.22.2/docs/theme/postcss.config.js pybtex-0.23.0/docs/theme/postcss.config.js --- pybtex-0.22.2/docs/theme/postcss.config.js 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/docs/theme/postcss.config.js 2020-10-12 15:23:45.025050400 +0000 @@ -0,0 +1,9 @@ +module.exports = { + plugins: [ + require('tailwindcss'), + require('autoprefixer'), + require('cssnano')({ + preset: 'default', + }), + ] +} diff -Nru pybtex-0.22.2/docs/theme/static/master.css pybtex-0.23.0/docs/theme/static/master.css --- pybtex-0.22.2/docs/theme/static/master.css 2019-01-16 16:29:18.000000000 +0000 +++ pybtex-0.23.0/docs/theme/static/master.css 2020-10-12 15:27:54.835971400 +0000 @@ -1,264 +1 @@ -@media only screen { - .document, .prev-next { - margin-left: auto; - margin-right: auto; - padding: 0px 0px; - width: 100%; - max-width: 45em; - } -} - -@media only screen and (max-width: 400px) { - body { font-size: 0.8em; } -} - -body { - font-family: sans-serif; - background-color: white; -} - -.document { - padding-top: 0.5em; -} - -a { - color: #884400; -} - -a:hover { - color: #BB8811; -} - -p, dd, li { - font-family: serif; - line-height: 140%; -} - -p { - margin-top: 1em; - margin-bottom: 1em; - -webkit-hyphens: auto; - -moz-hyphens: auto; - hyphens: auto; -} - -li { - margin: 0.8ex 0 0.8ex 0; -} - -img { - border: none; -} - -h1, h2, h3, h1 a, h2 a, h3 a { - margin-top: 3ex; - margin-bottom: 1ex; - font-weight: bold; - color: #BB8811; - text-decoration: none; -} - -h1 { - font-size: 2.4em; -} - -h2 { - font-size: 1.6em; -} - -h3 { - font-size: 1em; -} - -a.headerlink { - visibility: hidden; - text-decoration: none; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; - color: #884400; -} - -.contents, .toctree-wrapper { - margin-left: 1em; - margin-bottom: 3ex; -} - -.contents a, .toctree-wrapper a { - font-family: sans-serif; -} - -.contents .topic-title { - display: none; -} - -div.topic { - border: none !important; - padding: 0 !important; -} - - -dl.docutils dt { - margin-bottom: 0.5ex; - font-family: sans-serif; -} - -dl.docutils dd { - margin: 0px 0px 0px 2em; - padding: 0px; -} - -dl, dt { - font-size: 1em; - margin-top: 1em; - margin-bottom: 1em; -} - -code, pre, tt { - font-size: 1em; - line-height: 140%; - font-family: monospace; - -webkit-hyphens: none; - -moz-hyphens: none; - hyphens: none; -} - -code { - white-space: pre-wrap; - white-space: -moz-pre-wrap; - white-space: -pre-wrap; - white-space: -o-pre-wrap; - word-wrap: break-word; -} - -code.descname { - color: #884400; - font-weight: bold; - font-size: 120%; -} - -dl.class > dt > .property { - font-weight: bold; -} - -.literal { - background-color: #F0F0F0; - padding: 0.16em; -} - -a .docutils.literal { - background: none; -} - -.versionmodified { - font-style: italic; -} - -.sourcecode, .highlight { - margin: 1em 0 1em 0; -} - -.sourcecode pre, .highlight pre { - border: 0.08em solid #E0E0E0; - border-radius: 0.15em; - padding: 1em; - margin: 0; - overflow: auto; -} - -th { - text-align: left; -} - -.field-name { - margin: 0px; - padding: 0px 0.3em 0px 0px; -} - -.field-body { - margin: 0px; - padding: 0px; -} - -.field-list ul { - margin: 0px 0px 0px 0.5em; - padding-left: 1em; -} - -.field-list li { - margin: 0; -} - -.first { - margin-top: 0 !important; -} - -.left { - float: left; -} - -.right { - float: right; -} - -.middle { - display: inline-block; - text-align: center; -} - -.relbar { - margin: 1em 1em 3em 1em; - font-size: 0.85em; -} - -.search input { - border: 1pt solid #aaa; - border-radius: 0.15em; - font-size: 0.85em; - padding: 0.62ex; -} - -.prev-next { - margin-top: 3ex; - clear: both; - text-align: center; - word-wrap: normal; -} - -.footer { - margin-top: 7em; - margin-bottom: 1.5em; - font-size: 80%; - opacity: 0.5; - clear: both; - text-align: center; -} - -.admonition { - border: 0.4ex solid; - margin-top: 1ex !important; - margin-bottom: 1ex !important; -} - -.admonition p { - margin: 1ex 1em; - padding: 0; -} - -.warning { - border-color: #D04040; -} - -.highlighted { - background-color: #fbe54e; -} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}details{display:block}summary{display:list-item}template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Noto Sans,Roboto,Verdana,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Noto Sans Mono,Source Code Pro,Consolas,Courier New,Liberation Mono,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.table{display:table}.contents{display:contents}.fixed{position:fixed}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.light{color:#b58000}.dark{color:#804000}.document{font-family:Noto Serif,Georgia,Cambria,Times New Roman,Times,serif}.document,.prev-next{margin-left:auto;margin-right:auto;width:100%}@media (min-width:576px){.document,.prev-next{max-width:576px}}@media (min-width:768px){.document,.prev-next{max-width:768px}}@media (max-width:576px){html{font-size:12pt}}.document{margin-top:.5rem}a{text-decoration:none;color:#b58000;color:#804000}a:hover{text-decoration:underline;color:#b58000}p{margin-top:.5rem;margin-bottom:.5rem;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}blockquote{margin-top:1rem;margin-bottom:1rem;margin-left:2rem}ul{list-style-type:disc}ol,ul{margin-top:.5rem;margin-bottom:.5rem;margin-left:2rem}ol{list-style-type:decimal}li{margin-top:.25rem}img{border-style:none}h1,h1 a,h2,h2 a,h3,h3 a{color:#b58000}.search a,h1,h1 a,h2,h2 a,h3,h3 a{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Noto Sans,Roboto,Verdana,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}h1{margin-top:4rem;font-size:2.25rem}h1,h2{margin-bottom:.5rem}h2{margin-top:3rem;font-size:1.5rem}h3{margin-top:2rem;margin-bottom:.5rem;font-size:1.125rem}a.headerlink{visibility:hidden;text-decoration:none}caption:hover>a.headerlink,div.code-block-caption:hover>a.headerlink,dt:hover>a.headerlink,h1:hover>a.headerlink,h2:hover>a.headerlink,h3:hover>a.headerlink,h4:hover>a.headerlink,h5:hover>a.headerlink,h6:hover>a.headerlink,p.caption:hover>a.headerlink{visibility:visible;color:#804000}.contents,.toctree-wrapper{margin-top:2rem;margin-bottom:2rem;margin-left:2rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Noto Sans,Roboto,Verdana,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;color:#804000}.contents ul,.toctree-wrapper ul{color:#b58000}.contents .topic-title{display:none}dl,dt{margin-top:1rem}dd{margin-left:2rem}code,pre,tt{font-family:Menlo,Monaco,Noto Sans Mono,Source Code Pro,Consolas,Courier New,Liberation Mono,monospace;font-size:1rem;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code{white-space:pre;overflow-wrap:break-word}code.descname{font-weight:700;color:#b58000}.class dt,.function dt{font-family:Menlo,Monaco,Noto Sans Mono,Source Code Pro,Consolas,Courier New,Liberation Mono,monospace}.class dt em,.function dt em{font-style:normal}.versionmodified{font-style:italic}.highlight pre,.sourcecode pre{margin-top:1rem;margin-bottom:1rem;margin-left:1rem;font-size:.875rem}.field-list ul{margin:m-0}.field-list li{margin:0}.field-list th{font-weight:400}.field-list td strong{font-weight:400;font-family:Menlo,Monaco,Noto Sans Mono,Source Code Pro,Consolas,Courier New,Liberation Mono,monospace}.first{margin-top:0!important}.left{float:left}.right{float:right}.middle{display:inline-block;text-align:center}.relbar{margin-top:1rem;margin-left:1rem;margin-right:1rem;font-size:.875rem}form input{--border-opacity:1;border:1px solid #a0aec0;border-color:rgba(160,174,192,var(--border-opacity));padding-left:.25rem;padding-right:.25rem;font-size:.875rem;border-radius:.125rem}.prev-next{margin-top:3rem;word-wrap:normal}.footer,.prev-next{text-align:center;clear:both}.footer{margin-top:5rem;margin-bottom:1rem;font-size:.75rem;opacity:.5}.admonition{border:.4ex solid;margin-top:1ex!important;margin-bottom:1ex!important;background:red}.admonition p{margin:1ex 1em;padding:0}.warning{border-color:#d04040}.highlighted{background-color:#fbe54e} \ No newline at end of file diff -Nru pybtex-0.22.2/docs/theme/static/site.css pybtex-0.23.0/docs/theme/static/site.css --- pybtex-0.22.2/docs/theme/static/site.css 2019-01-16 16:29:18.000000000 +0000 +++ pybtex-0.23.0/docs/theme/static/site.css 2020-10-12 15:23:45.025050400 +0000 @@ -2,12 +2,12 @@ h1 { font-size: 400%; - margin-top: 0.3ex; - margin-bottom: 0.2ex; + font-weight: 700; + margin-top: 0.1em; + margin-bottom: 0.1em; border-bottom-style: solid; - border-bottom-color: #884400; - border-bottom-width: 0.08em; - padding-bottom: 0.2ex; + border-bottom-color: #884000; + border-bottom-width: 0.1em; } p { @@ -40,6 +40,10 @@ display: inline; } + .download-links ul li p { + display: inline; + } + .download-links ul li:not(:last-child) { margin-right: 0.3em; } diff -Nru pybtex-0.22.2/docs/theme/tailwind.config.js pybtex-0.23.0/docs/theme/tailwind.config.js --- pybtex-0.22.2/docs/theme/tailwind.config.js 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/docs/theme/tailwind.config.js 2020-10-12 15:23:45.025050400 +0000 @@ -0,0 +1,20 @@ +module.exports = { + theme: { + fontFamily: { + sans: ['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Noto Sans', 'Roboto', 'Verdana', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'], + serif: ['Noto Serif', 'Georgia', 'Cambria', 'Times New Roman', 'Times', 'serif'], + mono: ['Menlo', 'Monaco', 'Noto Sans Mono', 'Source Code Pro', 'Consolas', 'Courier New', 'Liberation Mono', 'monospace'] + }, + listStyleType: { + none: 'none', + disc: 'disc', + decimal: 'decimal', + circle: 'circle' + }, + }, + purge: ['../build/**/*.html'], + future: { + purgeLayersByDefault: true, + removeDeprecatedGapUtilities: true, + }, +} diff -Nru pybtex-0.22.2/MANIFEST.in pybtex-0.23.0/MANIFEST.in --- pybtex-0.22.2/MANIFEST.in 2018-11-18 13:08:15.000000000 +0000 +++ pybtex-0.23.0/MANIFEST.in 2020-10-12 15:23:45.022050400 +0000 @@ -9,7 +9,9 @@ include docs/source/conf.py docs/site/conf.py recursive-include docs/source *.rst recursive-include docs/site *.rst -recursive-include docs/theme *.html *.css *.conf +include docs/theme/theme.conf docs/theme/layout.html docs/theme/*.json docs/theme/*.js +recursive-include docs/theme/css-src *.css +recursive-include docs/theme/static *.css recursive-include docs/pybtex_doctools *.py recursive-include docs/man1 *.1 recursive-include examples/sample_plugins *.py README diff -Nru pybtex-0.22.2/PKG-INFO pybtex-0.23.0/PKG-INFO --- pybtex-0.22.2/PKG-INFO 2019-01-17 15:21:19.000000000 +0000 +++ pybtex-0.23.0/PKG-INFO 2020-10-12 15:36:32.162597400 +0000 @@ -1,11 +1,14 @@ -Metadata-Version: 1.2 +Metadata-Version: 2.1 Name: pybtex -Version: 0.22.2 +Version: 0.23.0 Summary: A BibTeX-compatible bibliography processor in Python Home-page: https://pybtex.org/ Author: Andrey Golovizin Author-email: ag@sologoc.com License: MIT +Project-URL: Documentation, https://docs.pybtex.org/ +Project-URL: Code, https://bitbucket.org/pybtex-devs/pybtex +Project-URL: Issue tracker, https://bitbucket.org/pybtex-devs/pybtex/issues Description: BibTeX-compatible bibliography processor in Python ================================================== @@ -69,3 +72,4 @@ Classifier: Topic :: Text Processing :: Markup :: XML Classifier: Topic :: Utilities Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.* +Provides-Extra: test diff -Nru pybtex-0.22.2/pybtex/bibtex/runner.py pybtex-0.23.0/pybtex/bibtex/runner.py --- pybtex-0.22.2/pybtex/bibtex/runner.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/bibtex/runner.py 2020-10-12 15:23:33.545192000 +0000 @@ -58,7 +58,7 @@ def run_bibtex(style, database, citations=None): if citations is None: - citations = database.entries.keys() + citations = list(database.entries.keys()) tmpdir = mkdtemp(prefix='pybtex_test_') try: write_bib(path.join(tmpdir, 'test.bib'), database) @@ -97,7 +97,7 @@ def parse_name(name): - space = re.compile('[\s~]+') + space = re.compile(r'[\s~]+') formatted_name = format_name(name, '{ff}|{vv}|{ll}|{jj}') parts = [space.sub(' ', part.strip()) for part in formatted_name.split('|')] first, von, last, junior = parts diff -Nru pybtex-0.22.2/pybtex/bibtex/utils.py pybtex-0.23.0/pybtex/bibtex/utils.py --- pybtex-0.22.2/pybtex/bibtex/utils.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/bibtex/utils.py 2020-10-12 15:18:57.128599000 +0000 @@ -34,7 +34,7 @@ def wrap(string, width=79, subsequent_indent=' '): - """ + r""" Wrap long string into multiple lines by inserting line breaks. The string is broken at whitespace characters so that each line is as long @@ -217,7 +217,7 @@ def bibtex_substring(string, start, length): - """ + r""" Return a substring of the given length, starting from the given position. start and length are 1-based. If start is < 0, it is counted from the end @@ -325,7 +325,7 @@ def bibtex_prefix(string, num_chars): - """Return the firxt num_char characters of the string. + r"""Return the firxt num_char characters of the string. Braces and "special characters" are ignored, as in bibtex_len. If the resulting prefix ends at brace level > 0, missing closing braces are @@ -424,7 +424,7 @@ @fix_unicode_literals_in_doctest def split_name_list(string): - """ + r""" Split a list of names, separated by ' and '. >>> split_name_list('Johnson and Peterson') @@ -449,7 +449,7 @@ @fix_unicode_literals_in_doctest def _find_closing_brace(string): - """ + r""" >>> _find_closing_brace('') (u'', u'') >>> _find_closing_brace('no braces') @@ -513,7 +513,7 @@ [u'{Matsui Fuuka}'] >>> split_tex_string(r'Matsui\ Fuuka') [u'Matsui', u'Fuuka'] - >>> split_tex_string('{Matsui\ Fuuka}') + >>> split_tex_string(r'{Matsui\ Fuuka}') [u'{Matsui\\ Fuuka}'] >>> split_tex_string('a') [u'a'] @@ -560,7 +560,7 @@ def bibtex_first_letter(string): - """ Return the first letter or special character of the string. + r""" Return the first letter or special character of the string. >>> print(bibtex_first_letter('Andrew Blake')) A @@ -568,13 +568,13 @@ A >>> print(bibtex_first_letter('1Andrew')) A - >>> print(bibtex_first_letter('{\TeX} markup')) + >>> print(bibtex_first_letter(r'{\TeX} markup')) {\TeX} >>> print(bibtex_first_letter('')) >>> print(bibtex_first_letter('123 123 123 {}')) - >>> print(bibtex_first_letter('\LaTeX Project Team')) + >>> print(bibtex_first_letter(r'\LaTeX Project Team')) L """ @@ -588,7 +588,7 @@ def bibtex_abbreviate(string, delimiter=None, separator='-'): - """ + r""" Abbreviate string. >>> print(bibtex_abbreviate('Andrew Blake')) diff -Nru pybtex-0.22.2/pybtex/database/__init__.py pybtex-0.23.0/pybtex/database/__init__.py --- pybtex-0.22.2/pybtex/database/__init__.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/database/__init__.py 2020-10-12 15:23:33.545192000 +0000 @@ -24,10 +24,13 @@ from __future__ import print_function import re -from collections import Mapping -from pybtex.plugin import find_plugin +try: + from collections.abc import Mapping +except ImportError: + from collections import Mapping import six +import textwrap from pybtex.exceptions import PybtexError from pybtex.utils import ( @@ -38,6 +41,8 @@ from pybtex.bibtex.utils import split_tex_string, scan_bibtex_string from pybtex.errors import report_error from pybtex.py3compat import fix_unicode_literals_in_doctest, python_2_unicode_compatible +from pybtex.plugin import find_plugin + class BibliographyDataError(PybtexError): @@ -103,9 +108,21 @@ ) def __repr__(self): - return 'BibliographyData(entries={entries}, preamble={preamble})'.format( - entries=repr(self.entries), - preamble=repr(self._preamble), + + repr_entry = repr(self.entries) + keys = self.entries.keys() + + for key in keys: + ind = repr_entry.index(key) - 2 # find first instance + repr_entry = repr_entry[:ind] + "\n" + repr_entry[ind:] + + repr_entry = textwrap.indent(repr_entry, prefix=" ") + repr_entry = repr_entry[4:] # drop 1st indent + + return ( + "BibliographyData(\n" + f" entries={repr_entry},\n\n" + f" preamble={repr(self._preamble)})" ) def add_to_preamble(self, *values): @@ -170,7 +187,7 @@ @fix_unicode_literals_in_doctest def _get_crossreferenced_citations(self, citations, min_crossrefs): - """ + r""" Get cititations not cited explicitly but referenced by other citations. >>> from pybtex.database import Entry @@ -232,7 +249,7 @@ @fix_unicode_literals_in_doctest def _expand_wildcard_citations(self, citations): - """ + r""" Expand wildcard citations (\citation{*} in .aux file). >>> from pybtex.database import Entry @@ -285,6 +302,17 @@ writer = find_plugin('pybtex.database.output', bib_format)(**kwargs) return writer.to_string(self) + @classmethod + def from_string(cls, value, bib_format, **kwargs): + """ + Return the data from a unicode string in the given format. + + :param bib_format: Data format ("bibtex", "yaml", etc.). + + .. versionadded:: 0.22.2 + """ + return parse_string(value, bib_format, **kwargs) + def to_bytes(self, bib_format, **kwargs): """ Return the data as a byte string in the given format. @@ -329,12 +357,12 @@ ... } ... """, 'bibtex') >>> data_lower = data.lower() - >>> data_lower.entries.keys() + >>> list(data_lower.entries.keys()) [u'obrazy', u'elegie'] >>> for entry in data_lower.entries.values(): ... entry.key - ... entry.persons.keys() - ... entry.fields.keys() + ... list(entry.persons.keys()) + ... list(entry.fields.keys()) u'obrazy' [u'author'] [u'title'] @@ -413,12 +441,20 @@ def __repr__(self): # represent the fields as a list of tuples for simplicity - repr_fields = repr(self.fields.items()) + repr_fields = repr(list(self.fields.items())) + keys = self.fields.keys() + + for key in keys: + ind = repr_fields.index(key) - 2 # find first instance + repr_fields = repr_fields[:ind] + "\n" + repr_fields[ind:] - return 'Entry({type_}, fields={fields}, persons={persons})'.format( - type_=repr(self.type), - fields=repr_fields, - persons=repr(self.persons), + repr_fields = textwrap.indent(repr_fields, prefix=" ") + repr_fields = repr_fields[4:] # drop 1st indent + + return ( + f"Entry({repr(self.type)},\n" + f" fields={repr_fields},\n" + f" persons={repr(self.persons)})" ) def add_person(self, person, role): @@ -464,6 +500,32 @@ except KeyError: return self._find_crossref_field(name, bib_data) + def to_string(self, bib_format, **kwargs): + """ + Return the data as a unicode string in the given format. + + :param bib_format: Data format ("bibtex", "yaml", etc.). + + """ + writer = find_plugin('pybtex.database.output', bib_format)(**kwargs) + return writer.to_string(BibliographyData(entries={self.key: self})) + + @classmethod + def from_string(cls, value, bib_format, entry_number=0, **kwargs): + """ + Return the data from a unicode string in the given format. + + :param bib_format: Data format ("bibtex", "yaml", etc.). + :param entry_number: entry number if the string has more than one. + + .. versionadded:: 0.22.2 + """ + # get bibliography + bibdata = BibliographyData.from_string(value, bib_format, **kwargs) + # grab specific instance + key = tuple(bibdata.entries.keys())[entry_number] + return bibdata.entries[key] + @python_2_unicode_compatible @fix_unicode_literals_in_doctest @@ -521,8 +583,8 @@ """ valid_roles = ['author', 'editor'] - style1_re = re.compile('^(.+),\s*(.+)$') - style2_re = re.compile('^(.+),\s*(.+),\s*(.+)$') + style1_re = re.compile(r'^(.+),\s*(.+)$') + style2_re = re.compile(r'^(.+),\s*(.+),\s*(.+)$') def __init__(self, string="", first="", middle="", prelast="", last="", lineage=""): """ diff -Nru pybtex-0.22.2/pybtex/database/input/bibtexml.py pybtex-0.23.0/pybtex/database/input/bibtexml.py --- pybtex-0.22.2/pybtex/database/input/bibtexml.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/database/input/bibtexml.py 2020-10-12 15:23:33.546192000 +0000 @@ -21,7 +21,7 @@ from __future__ import unicode_literals -from xml.etree import cElementTree as ET +from xml.etree import ElementTree as ET from pybtex.database import Entry, Person from pybtex.database.input import BaseParser @@ -65,15 +65,15 @@ e.add_person(Person(text), role) else: names = {} - for name in person_entry.getchildren(): + for name in person_entry: names[remove_ns(name.tag)] = name.text e.add_person(Person(**names), role) id_ = entry.get('id') - item = entry.getchildren()[0] + item = list(entry)[0] type = remove_ns(item.tag) e = Entry(type) - for field in item.getchildren(): + for field in item: field_name = remove_ns(field.tag) if field_name in Person.valid_roles: process_person(field, field_name) diff -Nru pybtex-0.22.2/pybtex/database/input/bibtex.py pybtex-0.23.0/pybtex/database/input/bibtex.py --- pybtex-0.22.2/pybtex/database/input/bibtex.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/database/input/bibtex.py 2020-10-12 15:23:33.546192000 +0000 @@ -111,12 +111,12 @@ error_type = 'undefined string' -class DuplicatePersonField(BibliographyDataError): +class DuplicateField(BibliographyDataError): def __init__(self, entry_key, field_name): message = 'entry with key {} has a duplicate {} field'.format( entry_key, field_name ) - super(DuplicatePersonField, self).__init__(message) + super(DuplicateField, self).__init__(message) class LowLevelParser(Scanner): @@ -358,9 +358,10 @@ key = 'unnamed-%i' % self.unnamed_entry_counter self.unnamed_entry_counter += 1 + seen_fields = set() for field_name, field_value_list in fields: - if field_name in entry.fields: - self.handle_error(DuplicatePersonField(key, field_name)) + if field_name.lower() in seen_fields: + self.handle_error(DuplicateField(key, field_name)) continue field_value = textutils.normalize_whitespace(self.flatten_value_list(field_value_list)) @@ -369,6 +370,7 @@ entry.add_person(Person(name), field_name) else: entry.fields[field_name] = field_value + seen_fields.add(field_name.lower()) self.data.add_entry(key, entry) def process_preamble(self, value_list): diff -Nru pybtex-0.22.2/pybtex/database/output/bibtex.py pybtex-0.23.0/pybtex/database/output/bibtex.py --- pybtex-0.22.2/pybtex/database/output/bibtex.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/database/output/bibtex.py 2020-10-12 15:23:33.546192000 +0000 @@ -36,7 +36,7 @@ unicode_io = True def quote(self, s): - """ + r""" >>> w = Writer() >>> print(w.quote('The World')) "The World" diff -Nru pybtex-0.22.2/pybtex/__init__.py pybtex-0.23.0/pybtex/__init__.py --- pybtex-0.22.2/pybtex/__init__.py 2019-01-17 15:14:25.000000000 +0000 +++ pybtex-0.23.0/pybtex/__init__.py 2020-10-12 15:35:57.011030200 +0000 @@ -27,7 +27,7 @@ from os import path -__version__ = '0.22.2' +__version__ = '0.23.0' class Engine(object): diff -Nru pybtex-0.22.2/pybtex/markup/__init__.py pybtex-0.23.0/pybtex/markup/__init__.py --- pybtex-0.22.2/pybtex/markup/__init__.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/markup/__init__.py 2020-10-12 15:15:57.878807800 +0000 @@ -31,8 +31,6 @@ def parse(self, level=0): """ - >>> from nose.tools import assert_raises - >>> LaTeXParser('abc').parse() Text('abc') @@ -41,9 +39,6 @@ >>> LaTeXParser('abc{def {xyz}} !').parse() Text('abc', Protected('def ', Protected('xyz')), ' !') - - >>> assert_raises(PybtexSyntaxError, LaTeXParser('abc{def}}').parse) - >>> assert_raises(PybtexSyntaxError, LaTeXParser('abc{def}{').parse) """ return Text(*self.iter_string_parts(level=level)) diff -Nru pybtex-0.22.2/pybtex/style/formatting/__init__.py pybtex-0.23.0/pybtex/style/formatting/__init__.py --- pybtex-0.22.2/pybtex/style/formatting/__init__.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/style/formatting/__init__.py 2020-10-12 15:15:57.879807700 +0000 @@ -82,7 +82,7 @@ """ if citations is None: - citations = bib_data.entries.keys() + citations = list(bib_data.entries.keys()) citations = bib_data.add_extra_citations(citations, self.min_crossrefs) entries = [bib_data.entries[key] for key in citations] formatted_entries = self.format_entries(entries) diff -Nru pybtex-0.22.2/pybtex/style/formatting/unsrt.py pybtex-0.23.0/pybtex/style/formatting/unsrt.py --- pybtex-0.22.2/pybtex/style/formatting/unsrt.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/style/formatting/unsrt.py 2020-10-12 15:15:57.880807600 +0000 @@ -333,7 +333,10 @@ sentence [self.format_names('author')], self.format_btitle(e, 'title'), sentence[ - 'PhD thesis', + first_of [ + optional_field('type'), + 'PhD thesis', + ], field('school'), optional_field('address'), date, diff -Nru pybtex-0.22.2/pybtex/style/sorting/__init__.py pybtex-0.23.0/pybtex/style/sorting/__init__.py --- pybtex-0.22.2/pybtex/style/sorting/__init__.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/style/sorting/__init__.py 2020-10-12 15:15:57.880807600 +0000 @@ -28,10 +28,4 @@ raise NotImplementedError def sort(self, entries): - entry_dict = dict( - (self.sorting_key(entry), entry) - for entry in entries - ) - sorted_keys = sorted(entry_dict) - sorted_entries = [entry_dict[key] for key in sorted_keys] - return sorted_entries + return sorted(entries, key=self.sorting_key) diff -Nru pybtex-0.22.2/pybtex/utils.py pybtex-0.23.0/pybtex/utils.py --- pybtex-0.22.2/pybtex/utils.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/pybtex/utils.py 2020-10-12 15:18:57.126598800 +0000 @@ -24,11 +24,13 @@ from __future__ import print_function, unicode_literals import itertools -from collections import ( - MutableMapping, MutableSet, OrderedDict, Sequence, deque -) +from collections import OrderedDict, deque from functools import wraps from types import GeneratorType +try: + from collections.abc import MutableMapping, MutableSet, Sequence +except ImportError: + from collections import MutableMapping, MutableSet, Sequence from six.moves import zip_longest @@ -225,27 +227,21 @@ OrderedCaseInsensitiveDict([(u'Uno', 1), (u'Dos', 2), (u'Tres', 3)]) >>> d.lower() OrderedCaseInsensitiveDict([(u'uno', 1), (u'dos', 2), (u'tres', 3)]) - >>> d.keys() + >>> list(d.keys()) [u'Uno', u'Dos', u'Tres'] - >>> d.items() + >>> list(d.items()) [(u'Uno', 1), (u'Dos', 2), (u'Tres', 3)] - >>> d.values() + >>> list(d.values()) [1, 2, 3] >>> d['Cuatro'] = 4 - >>> d.keys() + >>> list(d.keys()) [u'Uno', u'Dos', u'Tres', u'Cuatro'] - >>> d.items() + >>> list(d.items()) [(u'Uno', 1), (u'Dos', 2), (u'Tres', 3), (u'Cuatro', 4)] - >>> d.values() + >>> list(d.values()) [1, 2, 3, 4] >>> list(d) [u'Uno', u'Dos', u'Tres', u'Cuatro'] - >>> list(d.iterkeys()) == d.keys() - True - >>> list(d.itervalues()) == d.values() - True - >>> list(d.items()) == d.items() - True >>> 'Uno' in d True >>> 'uno' in d @@ -269,77 +265,32 @@ u'one' >>> d['Uno'] u'one' - >>> d.keys() - [u'Uno', u'Dos', u'Tres', u'Cuatro'] + >>> list(d.keys()) + [u'UNO', u'Dos', u'Tres', u'Cuatro'] >>> d['cuatro'] = 'four' >>> d['Cuatro'] u'four' >>> d['cuatro'] u'four' - >>> d.keys() - [u'Uno', u'Dos', u'Tres', u'Cuatro'] - + >>> list(d.keys()) + [u'UNO', u'Dos', u'Tres', u'cuatro'] + >>> list(d.values()) + [u'one', 2, 3, u'four'] + >>> del d['dos'] + >>> list(d.keys()) + [u'UNO', u'Tres', u'cuatro'] + >>> list(d.values()) + [u'one', 3, u'four'] """ - def __init__(self, data=()): - if isinstance(data, GeneratorType): - data = list(data) - if isinstance(data, Sequence): - self.order = [key for key, value in data] - else: - self.order = list(data.keys()) - super(OrderedCaseInsensitiveDict, self).__init__(data) - - def __setitem__(self, key, value): - if key not in self: - self.order.append(key) - super(OrderedCaseInsensitiveDict, self).__setitem__(key, value) - - def __delitem__(self, key): - raise NotImplementedError - - def __iter__(self): - return iter(self.order) - - def __eq__(self, other): - """ - >>> OrderedCaseInsensitiveDict([('a', 1), ('b', 2)]) == OrderedCaseInsensitiveDict([('a', 1), ('b', 2)]) - True - >>> OrderedCaseInsensitiveDict([('a', 1), ('b', 2)]) == OrderedCaseInsensitiveDict([('b', 2), ('a', 1)]) - False - >>> OrderedCaseInsensitiveDict([('a', 1), ('b', 2)]) == dict([('b', 2), ('a', 1)]) - True - >>> OrderedCaseInsensitiveDict([('a', 1), ('B', 2)]) == OrderedCaseInsensitiveDict([('A', 1), ('b', 2)]) - False - """ - if isinstance(other, (OrderedCaseInsensitiveDict, OrderedDict)): - return list(self.items()) == list(other.items()) - else: - return super(OrderedCaseInsensitiveDict, self).__eq__(other) - - def iterkeys(self): - return iter(self.order) - - def keys(self): - return self.order - - def itervalues(self): - for key in self.order: - yield self[key] - - def values(self): - return [self[key] for key in self.order] - - def items(self): - for key in self.order: - yield key, self[key] - - def items(self): - return [(key, self[key]) for key in self.order] + def __init__(self, *args, **kwargs): + initial = OrderedDict(*args, **kwargs) + self._dict = dict((key.lower(), value) for key, value in initial.items()) + self._keys = OrderedDict((key.lower(), key) for key in initial) def __repr__(self): return '{0}({1})'.format( - type(self).__name__, repr(self.items()) + type(self).__name__, list(self.items()), ) diff -Nru pybtex-0.22.2/setup.cfg pybtex-0.23.0/setup.cfg --- pybtex-0.22.2/setup.cfg 2018-11-18 12:58:53.000000000 +0000 +++ pybtex-0.23.0/setup.cfg 2020-10-12 15:15:57.881807800 +0000 @@ -1,9 +1,6 @@ [bdist_wheel] universal = 1 -[nosetests] -with-doctest = True - [tool:pytest] testpaths = pybtex tests addopts = --doctest-modules diff -Nru pybtex-0.22.2/setup.py pybtex-0.23.0/setup.py --- pybtex-0.22.2/setup.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/setup.py 2020-10-12 15:15:57.882807700 +0000 @@ -24,6 +24,7 @@ import os import sys +from collections import OrderedDict from distutils.command.sdist import sdist from distutils.dep_util import newer @@ -56,6 +57,9 @@ README = open(os.path.join(ROOT, 'README')).read() install_requires = ['PyYAML>=3.01', 'latexcodec>=1.0.4', 'six'] +extras_require = { + 'test': ['pytest'], +} setup( name=progname, @@ -65,6 +69,11 @@ author='Andrey Golovizin', author_email='ag@sologoc.com', url='https://pybtex.org/', + project_urls=OrderedDict(( + ('Documentation', 'https://docs.pybtex.org/'), + ('Code', 'https://bitbucket.org/pybtex-devs/pybtex'), + ('Issue tracker', 'https://bitbucket.org/pybtex-devs/pybtex/issues'), + )), license='MIT', platforms=['platform-independent'], classifiers=[ @@ -81,6 +90,7 @@ 'Topic :: Utilities', ], install_requires=install_requires, + extras_require=extras_require, python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*', packages=find_packages(exclude=['docs']), include_package_data=True, diff -Nru pybtex-0.22.2/test_requirements.txt pybtex-0.23.0/test_requirements.txt --- pybtex-0.22.2/test_requirements.txt 2015-10-25 18:03:07.000000000 +0000 +++ pybtex-0.23.0/test_requirements.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -PyYAML>=3.01 -nose diff -Nru pybtex-0.22.2/tests/bibtex_parser_test.py pybtex-0.23.0/tests/bibtex_parser_test.py --- pybtex-0.22.2/tests/bibtex_parser_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/bibtex_parser_test.py 2020-10-12 15:23:33.547191900 +0000 @@ -525,3 +525,20 @@ 'entry with key Mastering has a duplicate TITLE field', 'entry with key Mastering has a duplicate TiTlE field', ] + + +class DuplicatePersonFieldTest(ParserTest, TestCase): + input_string = u""" + @article{Me2009,author={Nom de Plume, My}, title="A short story", AUTHoR = {Foo}} + """ + correct_result = BibliographyData( + entries=[ + (u'Me2009', Entry(u'article', + fields=[(u'title', u'A short story')], + persons={u'author': [Person(u'Nom de Plume, My')]} + )), + ] + ) + errors = [ + 'entry with key Me2009 has a duplicate AUTHoR field', + ] \ No newline at end of file diff -Nru pybtex-0.22.2/tests/bst_parser_test/bst_parser_test.py pybtex-0.23.0/tests/bst_parser_test/bst_parser_test.py --- pybtex-0.22.2/tests/bst_parser_test/bst_parser_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/bst_parser_test/bst_parser_test.py 2020-10-12 15:15:57.883807700 +0000 @@ -22,19 +22,15 @@ from __future__ import unicode_literals +import pytest from six.moves import zip_longest from pybtex.bibtex import bst from ..utils import get_data -test_data = ( - 'plain', - 'apacite', - 'jurabib', -) - -def check_bst_parser(dataset_name): +@pytest.mark.parametrize(["dataset_name"], [("plain",), ("apacite",), ("jurabib",)]) +def test_bst_parser(dataset_name): module = __import__('tests.bst_parser_test.{0}'.format(dataset_name), globals(), locals(), 'bst') correct_result = module.bst bst_data = get_data(dataset_name + '.bst') @@ -42,8 +38,3 @@ for correct_element, actual_element in zip_longest(actual_result, correct_result): assert correct_element == actual_element, '\n{0}\n{1}'.format(correct_element, actual_element) - - -def test_bst_parser(): - for dataset_name in test_data: - yield check_bst_parser, dataset_name diff -Nru pybtex-0.22.2/tests/database_test/database_test.py pybtex-0.23.0/tests/database_test/database_test.py --- pybtex-0.22.2/tests/database_test/database_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/database_test/database_test.py 2020-10-12 15:23:33.547191900 +0000 @@ -1,18 +1,3 @@ -from __future__ import absolute_import, unicode_literals - -import pickle -from abc import ABCMeta, abstractmethod -from copy import deepcopy -from io import BytesIO, TextIOWrapper - -import six -from nose.tools import assert_equal, assert_is_instance, assert_true -from pybtex.database import parse_bytes, parse_string -from pybtex.plugin import find_plugin - -from .data import reference_data - - # Copyright (c) 2006-2019 Andrey Golovigin # # Permission is hereby granted, free of charge, to any person obtaining @@ -35,8 +20,19 @@ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +from __future__ import absolute_import, unicode_literals +import pickle +from abc import ABCMeta, abstractmethod +from copy import deepcopy +from io import BytesIO, TextIOWrapper +import six +import pytest +from pybtex.database import parse_bytes, parse_string, BibliographyData, Entry +from pybtex.plugin import find_plugin + +from .data import reference_data class DatabaseIO(object): @@ -44,8 +40,8 @@ def __init__(self): self.reference_data = deepcopy(reference_data) - assert_true(reference_data.entries) - assert_true(reference_data.preamble) + assert reference_data.entries + assert reference_data.preamble @abstractmethod def serialize(self, bib_data): @@ -88,17 +84,38 @@ class PybtexStringIO(PybtexDatabaseIO): def serialize(self, bib_data): result = bib_data.to_string(self.bib_format) - assert_is_instance(result, six.text_type) + assert isinstance(result, six.text_type) return result def deserialize(self, string): - return parse_string(string, self.bib_format) + # wrapper for parse_string + return BibliographyData.from_string(string, self.bib_format) + + +class PybtexEntryStringIO(PybtexDatabaseIO): + # the first entry in reference_data + def __init__(self, bib_format): + super().__init__(bib_format) + # get 1st key + self.key = list(reference_data.entries.keys())[0] + # make Entry as single-item BibliographyData + self.reference_data = reference_data.entries[self.key] + assert reference_data.entries + assert reference_data.preamble + + def serialize(self, bib_data): # Entry.to_string + result = bib_data.to_string(self.bib_format) + assert isinstance(result, six.text_type) + return result + + def deserialize(self, string): # Entry.from_string + return Entry.from_string(string, self.bib_format) class PybtexBytesIO(PybtexDatabaseIO): def serialize(self, bib_data): result = bib_data.to_bytes(self.bib_format) - assert_is_instance(result, bytes) + assert isinstance(result, bytes) return result def deserialize(self, string): @@ -141,19 +158,22 @@ def check_database_io(io_obj): serialized_data = io_obj.serialize(io_obj.reference_data) deserialized_data = io_obj.deserialize(serialized_data) - assert_equal(deserialized_data, io_obj.reference_data) + assert deserialized_data == io_obj.reference_data -def test_database_parsing_and_writing(): - for io_cls in PybtexStreamIO, PybtexStringIO, PybtexBytesIO: - for bib_format in 'bibtex', 'bibtexml', 'yaml': - yield check_database_io, io_cls(bib_format) +@pytest.mark.parametrize(["io_cls"], [(PybtexBytesIO,), (PybtexStringIO,), (PybtexEntryStringIO,),(PybtexBytesIO,)]) +@pytest.mark.parametrize(["bib_format"], [("bibtex",), ("bibtexml",), ("yaml",)]) +def test_database_io(io_cls, bib_format): + check_database_io(io_cls(bib_format)) -def test_database_pickling(): - for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1): - yield check_database_io, PickleIO(protocol) +@pytest.mark.parametrize( + ["protocol"], + [(protocol,) for protocol in range(0, pickle.HIGHEST_PROTOCOL + 1)] +) +def test_database_pickling(protocol): + check_database_io(PickleIO(protocol)) def test_database_repr(): - yield check_database_io, ReprEvalIO() + check_database_io(ReprEvalIO()) diff -Nru pybtex-0.22.2/tests/general_engine_test.py pybtex-0.23.0/tests/general_engine_test.py --- pybtex-0.22.2/tests/general_engine_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/general_engine_test.py 2020-10-12 15:15:57.890807600 +0000 @@ -30,6 +30,8 @@ from shutil import rmtree from tempfile import mkdtemp +import pytest + from pybtex import errors, io from .utils import diff, get_data @@ -125,29 +127,39 @@ assert result == correct_result, diff(correct_result, result) -def test_bibtex_engine(): +@pytest.mark.parametrize( + ["filenames"], + [ + (['xampl.bib', 'unsrt.bst'],), + (['xampl.bib', 'plain.bst'],), + (['xampl.bib', 'alpha.bst'],), + (['xampl.bib', 'jurabib.bst'],), + (['cyrillic.bib', 'unsrt.bst'],), + (['cyrillic.bib', 'alpha.bst'],), + (['xampl_mixed.bib', 'unsrt_mixed.bst', 'xampl_mixed_unsrt_mixed.aux'],), + (['IEEEtran.bib', 'IEEEtran.bst', 'IEEEtran.aux'],), + ] +) +@pytest.mark.parametrize( + ["check"], [(check_make_bibliography,), (check_format_from_string,)] +) +def test_bibtex_engine(check, filenames): from pybtex import bibtex - for filenames in [ - ('xampl.bib', 'unsrt.bst'), - ('xampl.bib', 'plain.bst'), - ('xampl.bib', 'alpha.bst'), - ('xampl.bib', 'jurabib.bst'), - ('cyrillic.bib', 'unsrt.bst'), - ('cyrillic.bib', 'alpha.bst'), - ('xampl_mixed.bib', 'unsrt_mixed.bst', 'xampl_mixed_unsrt_mixed.aux'), - ('IEEEtran.bib', 'IEEEtran.bst', 'IEEEtran.aux'), - ]: - yield check_make_bibliography, bibtex, filenames - yield check_format_from_string, bibtex, filenames + check(bibtex, filenames) -def test_pybtex_engine(): +@pytest.mark.parametrize( + ["filenames"], + [ + (['cyrillic.bib', 'unsrt.bst'],), + (['cyrillic.bib', 'plain.bst'],), + (['cyrillic.bib', 'alpha.bst'],), + (['extrafields.bib', 'unsrt.bst'],), + ] +) +@pytest.mark.parametrize( + ["check"], [(check_make_bibliography,), (check_format_from_string,)] +) +def test_pybtex_engine(check, filenames): import pybtex - for filenames in [ - ('cyrillic.bib', 'unsrt.bst'), - ('cyrillic.bib', 'plain.bst'), - ('cyrillic.bib', 'alpha.bst'), - ('extrafields.bib', 'unsrt.bst'), - ]: - yield check_make_bibliography, pybtex, filenames - yield check_format_from_string, pybtex, filenames + check(pybtex, filenames) diff -Nru pybtex-0.22.2/tests/markup_test.py pybtex-0.23.0/tests/markup_test.py --- pybtex-0.22.2/tests/markup_test.py 1970-01-01 00:00:00.000000000 +0000 +++ pybtex-0.23.0/tests/markup_test.py 2020-10-12 15:15:57.891807600 +0000 @@ -0,0 +1,10 @@ +import pytest + +from pybtex.markup import LaTeXParser +from pybtex.scanner import PybtexSyntaxError + + +@pytest.mark.parametrize(["bad_input"], [("abc{def}}",), ("abc{def}{",)]) +def test_syntax_error(bad_input): + with pytest.raises(PybtexSyntaxError): + LaTeXParser(bad_input).parse() diff -Nru pybtex-0.22.2/tests/parse_name_test.py pybtex-0.23.0/tests/parse_name_test.py --- pybtex-0.22.2/tests/parse_name_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/parse_name_test.py 2020-10-12 15:15:57.891807600 +0000 @@ -24,158 +24,160 @@ from __future__ import unicode_literals +import pytest + from pybtex import errors from pybtex.database import InvalidNameString, Person # name, (bibtex_first, prelast, last, lineage # as parsed by the bibtex program itself sample_names = [ - ('A. E. Siegman', (['A.', 'E.'], [], ['Siegman'], [])), - ('A. G. W. Cameron', (['A.', 'G.', 'W.'], [], ['Cameron'], [])), - ('A. Hoenig', (['A.'], [], ['Hoenig'], [])), - ('A. J. Van Haagen', (['A.', 'J.', 'Van'], [], ['Haagen'], [])), - ('A. S. Berdnikov', (['A.', 'S.'], [], ['Berdnikov'], [])), - ('A. Trevorrow', (['A.'], [], ['Trevorrow'], [])), - ('Adam H. Lewenberg', (['Adam', 'H.'], [], ['Lewenberg'], [])), + ('A. E. Siegman', (['A.', 'E.'], [], ['Siegman'], []), None), + ('A. G. W. Cameron', (['A.', 'G.', 'W.'], [], ['Cameron'], []), None), + ('A. Hoenig', (['A.'], [], ['Hoenig'], []), None), + ('A. J. Van Haagen', (['A.', 'J.', 'Van'], [], ['Haagen'], []), None), + ('A. S. Berdnikov', (['A.', 'S.'], [], ['Berdnikov'], []), None), + ('A. Trevorrow', (['A.'], [], ['Trevorrow'], []), None), + ('Adam H. Lewenberg', (['Adam', 'H.'], [], ['Lewenberg'], []), None), ('Addison-Wesley Publishing Company', - (['Addison-Wesley', 'Publishing'], [], ['Company'], [])), - ('Advogato (Raph Levien)', (['Advogato', '(Raph'], [], ['Levien)'], [])), + (['Addison-Wesley', 'Publishing'], [], ['Company'], []), None), + ('Advogato (Raph Levien)', (['Advogato', '(Raph'], [], ['Levien)'], []), None), ('Andrea de Leeuw van Weenen', - (['Andrea'], ['de', 'Leeuw', 'van'], ['Weenen'], [])), - ('Andreas Geyer-Schulz', (['Andreas'], [], ['Geyer-Schulz'], [])), - ("Andr{\\'e} Heck", (["Andr{\\'e}"], [], ['Heck'], [])), - ('Anne Br{\\"u}ggemann-Klein', (['Anne'], [], ['Br{\\"u}ggemann-Klein'], [])), - ('Anonymous', ([], [], ['Anonymous'], [])), - ('B. Beeton', (['B.'], [], ['Beeton'], [])), - ('B. Hamilton Kelly', (['B.', 'Hamilton'], [], ['Kelly'], [])), + (['Andrea'], ['de', 'Leeuw', 'van'], ['Weenen'], []), None), + ('Andreas Geyer-Schulz', (['Andreas'], [], ['Geyer-Schulz'], []), None), + ("Andr{\\'e} Heck", (["Andr{\\'e}"], [], ['Heck'], []), None), + ('Anne Br{\\"u}ggemann-Klein', (['Anne'], [], ['Br{\\"u}ggemann-Klein'], []), None), + ('Anonymous', ([], [], ['Anonymous'], []), None), + ('B. Beeton', (['B.'], [], ['Beeton'], []), None), + ('B. Hamilton Kelly', (['B.', 'Hamilton'], [], ['Kelly'], []), None), ('B. V. Venkata Krishna Sastry', - (['B.', 'V.', 'Venkata', 'Krishna'], [], ['Sastry'], [])), - ('Benedict L{\\o}fstedt', (['Benedict'], [], ['L{\\o}fstedt'], [])), - ('Bogus{\\l}aw Jackowski', (['Bogus{\\l}aw'], [], ['Jackowski'], [])), + (['B.', 'V.', 'Venkata', 'Krishna'], [], ['Sastry'], []), None), + ('Benedict L{\\o}fstedt', (['Benedict'], [], ['L{\\o}fstedt'], []), None), + ('Bogus{\\l}aw Jackowski', (['Bogus{\\l}aw'], [], ['Jackowski'], []), None), ('Christina A. L.\\ Thiele', - # (['Christina', 'A.', 'L.\\'], [], ['Thiele'], [])), - (['Christina', 'A.', 'L.'], [], ['Thiele'], [])), # BibTeX incompatible: treat "\ " as a space - ("D. Men'shikov", (['D.'], [], ["Men'shikov"], [])), - ("Darko \\v{Z}ubrini{\\'c}", (['Darko'], [], ["\\v{Z}ubrini{\\'c}"], [])), - ("Dunja Mladeni{\\'c}", (['Dunja'], [], ["Mladeni{\\'c}"], [])), - ('Edwin V. {Bell, II}', (['Edwin', 'V.'], [], ['{Bell, II}'], [])), - ('Frank G. {Bennett, Jr.}', (['Frank', 'G.'], [], ['{Bennett, Jr.}'], [])), + # (['Christina', 'A.', 'L.\\'], [], ['Thiele'], []), None), + (['Christina', 'A.', 'L.'], [], ['Thiele'], []), None), # BibTeX incompatible: treat "\ " as a space + ("D. Men'shikov", (['D.'], [], ["Men'shikov"], []), None), + ("Darko \\v{Z}ubrini{\\'c}", (['Darko'], [], ["\\v{Z}ubrini{\\'c}"], []), None), + ("Dunja Mladeni{\\'c}", (['Dunja'], [], ["Mladeni{\\'c}"], []), None), + ('Edwin V. {Bell, II}', (['Edwin', 'V.'], [], ['{Bell, II}'], []), None), + ('Frank G. {Bennett, Jr.}', (['Frank', 'G.'], [], ['{Bennett, Jr.}'], []), None), ("Fr{\\'e}d{\\'e}ric Boulanger", - (["Fr{\\'e}d{\\'e}ric"], [], ['Boulanger'], [])), - ('Ford, Jr., Henry', (['Henry'], [], ['Ford'], ['Jr.'])), - ('mr Ford, Jr., Henry', (['Henry'], ['mr'], ['Ford'], ['Jr.'])), - ('Fukui Rei', (['Fukui'], [], ['Rei'], [])), - ('G. Gr{\\"a}tzer', (['G.'], [], ['Gr{\\"a}tzer'], [])), - ('George Gr{\\"a}tzer', (['George'], [], ['Gr{\\"a}tzer'], [])), - ('Georgia K. M. Tobin', (['Georgia', 'K.', 'M.'], [], ['Tobin'], [])), + (["Fr{\\'e}d{\\'e}ric"], [], ['Boulanger'], []), None), + ('Ford, Jr., Henry', (['Henry'], [], ['Ford'], ['Jr.']), None), + ('mr Ford, Jr., Henry', (['Henry'], ['mr'], ['Ford'], ['Jr.']), None), + ('Fukui Rei', (['Fukui'], [], ['Rei'], []), None), + ('G. Gr{\\"a}tzer', (['G.'], [], ['Gr{\\"a}tzer'], []), None), + ('George Gr{\\"a}tzer', (['George'], [], ['Gr{\\"a}tzer'], []), None), + ('Georgia K. M. Tobin', (['Georgia', 'K.', 'M.'], [], ['Tobin'], []), None), ('Gilbert van den Dobbelsteen', - (['Gilbert'], ['van', 'den'], ['Dobbelsteen'], [])), - ('Gy{\\"o}ngyi Bujdos{\\\'o}', (['Gy{\\"o}ngyi'], [], ["Bujdos{\\'o}"], [])), - ('Helmut J{\\"u}rgensen', (['Helmut'], [], ['J{\\"u}rgensen'], [])), - ('Herbert Vo{\\ss}', (['Herbert'], [], ['Vo{\\ss}'], [])), + (['Gilbert'], ['van', 'den'], ['Dobbelsteen'], []), None), + ('Gy{\\"o}ngyi Bujdos{\\\'o}', (['Gy{\\"o}ngyi'], [], ["Bujdos{\\'o}"], []), None), + ('Helmut J{\\"u}rgensen', (['Helmut'], [], ['J{\\"u}rgensen'], []), None), + ('Herbert Vo{\\ss}', (['Herbert'], [], ['Vo{\\ss}'], []), None), ("H{\\'a}n Th{\\^e}\\llap{\\raise 0.5ex\\hbox{\\'{\\relax}}} Th{\\'a}nh", (["H{\\'a}n", "Th{\\^e}\\llap{\\raise 0.5ex\\hbox{\\'{\\relax}}}"], [], ["Th{\\'a}nh"], - [])), + []), None), ("H{\\`a}n Th\\^e\\llap{\\raise0.5ex\\hbox{\\'{\\relax}}} Th{\\`a}nh", (['H{\\`a}n', "Th\\^e\\llap{\\raise0.5ex\\hbox{\\'{\\relax}}}"], [], ['Th{\\`a}nh'], - [])), - ("J. Vesel{\\'y}", (['J.'], [], ["Vesel{\\'y}"], [])), + []), None), + ("J. Vesel{\\'y}", (['J.'], [], ["Vesel{\\'y}"], []), None), ("Javier Rodr\\'{\\i}guez Laguna", - (['Javier', "Rodr\\'{\\i}guez"], [], ['Laguna'], [])), + (['Javier', "Rodr\\'{\\i}guez"], [], ['Laguna'], []), None), ("Ji\\v{r}\\'{\\i} Vesel{\\'y}", - (["Ji\\v{r}\\'{\\i}"], [], ["Vesel{\\'y}"], [])), + (["Ji\\v{r}\\'{\\i}"], [], ["Vesel{\\'y}"], []), None), ("Ji\\v{r}\\'{\\i} Zlatu{\\v{s}}ka", - (["Ji\\v{r}\\'{\\i}"], [], ['Zlatu{\\v{s}}ka'], [])), + (["Ji\\v{r}\\'{\\i}"], [], ['Zlatu{\\v{s}}ka'], []), None), ("Ji\\v{r}{\\'\\i} Vesel{\\'y}", - (["Ji\\v{r}{\\'\\i}"], [], ["Vesel{\\'y}"], [])), + (["Ji\\v{r}{\\'\\i}"], [], ["Vesel{\\'y}"], []), None), ("Ji\\v{r}{\\'{\\i}}Zlatu{\\v{s}}ka", - ([], [], ["Ji\\v{r}{\\'{\\i}}Zlatu{\\v{s}}ka"], [])), - ('Jim Hef{}feron', (['Jim'], [], ['Hef{}feron'], [])), - ('J{\\"o}rg Knappen', (['J{\\"o}rg'], [], ['Knappen'], [])), - ('J{\\"o}rgen L. Pind', (['J{\\"o}rgen', 'L.'], [], ['Pind'], [])), - ("J{\\'e}r\\^ome Laurens", (["J{\\'e}r\\^ome"], [], ['Laurens'], [])), - ('J{{\\"o}}rg Knappen', (['J{{\\"o}}rg'], [], ['Knappen'], [])), - ('K. Anil Kumar', (['K.', 'Anil'], [], ['Kumar'], [])), - ("Karel Hor{\\'a}k", (['Karel'], [], ["Hor{\\'a}k"], [])), - ("Karel P\\'{\\i}{\\v{s}}ka", (['Karel'], [], ["P\\'{\\i}{\\v{s}}ka"], [])), - ("Karel P{\\'\\i}{\\v{s}}ka", (['Karel'], [], ["P{\\'\\i}{\\v{s}}ka"], [])), - ("Karel Skoup\\'{y}", (['Karel'], [], ["Skoup\\'{y}"], [])), - ("Karel Skoup{\\'y}", (['Karel'], [], ["Skoup{\\'y}"], [])), - ('Kent McPherson', (['Kent'], [], ['McPherson'], [])), - ('Klaus H{\\"o}ppner', (['Klaus'], [], ['H{\\"o}ppner'], [])), - ('Lars Hellstr{\\"o}m', (['Lars'], [], ['Hellstr{\\"o}m'], [])), + ([], [], ["Ji\\v{r}{\\'{\\i}}Zlatu{\\v{s}}ka"], []), None), + ('Jim Hef{}feron', (['Jim'], [], ['Hef{}feron'], []), None), + ('J{\\"o}rg Knappen', (['J{\\"o}rg'], [], ['Knappen'], []), None), + ('J{\\"o}rgen L. Pind', (['J{\\"o}rgen', 'L.'], [], ['Pind'], []), None), + ("J{\\'e}r\\^ome Laurens", (["J{\\'e}r\\^ome"], [], ['Laurens'], []), None), + ('J{{\\"o}}rg Knappen', (['J{{\\"o}}rg'], [], ['Knappen'], []), None), + ('K. Anil Kumar', (['K.', 'Anil'], [], ['Kumar'], []), None), + ("Karel Hor{\\'a}k", (['Karel'], [], ["Hor{\\'a}k"], []), None), + ("Karel P\\'{\\i}{\\v{s}}ka", (['Karel'], [], ["P\\'{\\i}{\\v{s}}ka"], []), None), + ("Karel P{\\'\\i}{\\v{s}}ka", (['Karel'], [], ["P{\\'\\i}{\\v{s}}ka"], []), None), + ("Karel Skoup\\'{y}", (['Karel'], [], ["Skoup\\'{y}"], []), None), + ("Karel Skoup{\\'y}", (['Karel'], [], ["Skoup{\\'y}"], []), None), + ('Kent McPherson', (['Kent'], [], ['McPherson'], []), None), + ('Klaus H{\\"o}ppner', (['Klaus'], [], ['H{\\"o}ppner'], []), None), + ('Lars Hellstr{\\"o}m', (['Lars'], [], ['Hellstr{\\"o}m'], []), None), ('Laura Elizabeth Jackson', - (['Laura', 'Elizabeth'], [], ['Jackson'], [])), - ("M. D{\\'{\\i}}az", (['M.'], [], ["D{\\'{\\i}}az"], [])), - ('M/iche/al /O Searc/oid', (['M/iche/al', '/O'], [], ['Searc/oid'], [])), - ("Marek Ry{\\'c}ko", (['Marek'], [], ["Ry{\\'c}ko"], [])), - ('Marina Yu. Nikulina', (['Marina', 'Yu.'], [], ['Nikulina'], [])), - ("Max D{\\'{\\i}}az", (['Max'], [], ["D{\\'{\\i}}az"], [])), - ('Merry Obrecht Sawdey', (['Merry', 'Obrecht'], [], ['Sawdey'], [])), + (['Laura', 'Elizabeth'], [], ['Jackson'], []), None), + ("M. D{\\'{\\i}}az", (['M.'], [], ["D{\\'{\\i}}az"], []), None), + ('M/iche/al /O Searc/oid', (['M/iche/al', '/O'], [], ['Searc/oid'], []), None), + ("Marek Ry{\\'c}ko", (['Marek'], [], ["Ry{\\'c}ko"], []), None), + ('Marina Yu. Nikulina', (['Marina', 'Yu.'], [], ['Nikulina'], []), None), + ("Max D{\\'{\\i}}az", (['Max'], [], ["D{\\'{\\i}}az"], []), None), + ('Merry Obrecht Sawdey', (['Merry', 'Obrecht'], [], ['Sawdey'], []), None), ("Miroslava Mis{\\'a}kov{\\'a}", - (['Miroslava'], [], ["Mis{\\'a}kov{\\'a}"], [])), - ('N. A. F. M. Poppelier', (['N.', 'A.', 'F.', 'M.'], [], ['Poppelier'], [])), + (['Miroslava'], [], ["Mis{\\'a}kov{\\'a}"], []), None), + ('N. A. F. M. Poppelier', (['N.', 'A.', 'F.', 'M.'], [], ['Poppelier'], []), None), ('Nico A. F. M. Poppelier', - (['Nico', 'A.', 'F.', 'M.'], [], ['Poppelier'], [])), - ('Onofrio de Bari', (['Onofrio'], ['de'], ['Bari'], [])), - ("Pablo Rosell-Gonz{\\'a}lez", (['Pablo'], [], ["Rosell-Gonz{\\'a}lez"], [])), - ('Paco La Bruna', (['Paco', 'La'], [], ['Bruna'], [])), + (['Nico', 'A.', 'F.', 'M.'], [], ['Poppelier'], []), None), + ('Onofrio de Bari', (['Onofrio'], ['de'], ['Bari'], []), None), + ("Pablo Rosell-Gonz{\\'a}lez", (['Pablo'], [], ["Rosell-Gonz{\\'a}lez"], []), None), + ('Paco La Bruna', (['Paco', 'La'], [], ['Bruna'], []), None), ('Paul Franchi-Zannettacci', - (['Paul'], [], ['Franchi-Zannettacci'], [])), - ('Pavel \\v{S}eve\\v{c}ek', (['Pavel'], [], ['\\v{S}eve\\v{c}ek'], [])), - ('Petr Ol{\\v{s}}ak', (['Petr'], [], ['Ol{\\v{s}}ak'], [])), - ("Petr Ol{\\v{s}}{\\'a}k", (['Petr'], [], ["Ol{\\v{s}}{\\'a}k"], [])), - ('Primo\\v{z} Peterlin', (['Primo\\v{z}'], [], ['Peterlin'], [])), - ('Prof. Alban Grimm', (['Prof.', 'Alban'], [], ['Grimm'], [])), - ("P{\\'e}ter Husz{\\'a}r", (["P{\\'e}ter"], [], ["Husz{\\'a}r"], [])), - ("P{\\'e}ter Szab{\\'o}", (["P{\\'e}ter"], [], ["Szab{\\'o}"], [])), - ('Rafa{\\l}\\.Zbikowski', ([], [], ['Rafa{\\l}\\.Zbikowski'], [])), - ('Rainer Sch{\\"o}pf', (['Rainer'], [], ['Sch{\\"o}pf'], [])), - ('T. L. (Frank) Pappas', (['T.', 'L.', '(Frank)'], [], ['Pappas'], [])), - ('TUG 2004 conference', (['TUG', '2004'], [], ['conference'], [])), + (['Paul'], [], ['Franchi-Zannettacci'], []), None), + ('Pavel \\v{S}eve\\v{c}ek', (['Pavel'], [], ['\\v{S}eve\\v{c}ek'], []), None), + ('Petr Ol{\\v{s}}ak', (['Petr'], [], ['Ol{\\v{s}}ak'], []), None), + ("Petr Ol{\\v{s}}{\\'a}k", (['Petr'], [], ["Ol{\\v{s}}{\\'a}k"], []), None), + ('Primo\\v{z} Peterlin', (['Primo\\v{z}'], [], ['Peterlin'], []), None), + ('Prof. Alban Grimm', (['Prof.', 'Alban'], [], ['Grimm'], []), None), + ("P{\\'e}ter Husz{\\'a}r", (["P{\\'e}ter"], [], ["Husz{\\'a}r"], []), None), + ("P{\\'e}ter Szab{\\'o}", (["P{\\'e}ter"], [], ["Szab{\\'o}"], []), None), + ('Rafa{\\l}\\.Zbikowski', ([], [], ['Rafa{\\l}\\.Zbikowski'], []), None), + ('Rainer Sch{\\"o}pf', (['Rainer'], [], ['Sch{\\"o}pf'], []), None), + ('T. L. (Frank) Pappas', (['T.', 'L.', '(Frank)'], [], ['Pappas'], []), None), + ('TUG 2004 conference', (['TUG', '2004'], [], ['conference'], []), None), # von part with BibTeX special characters ('TUG {\\sltt DVI} Driver Standards Committee', - (['TUG', '{\\sltt DVI}', 'Driver', 'Standards'], [], ['Committee'], [])), + (['TUG', '{\\sltt DVI}', 'Driver', 'Standards'], [], ['Committee'], []), None), ('TUG {\\sltt xDVIx} Driver Standards Committee', - (['TUG'], ['{\\sltt xDVIx}'], ['Driver', 'Standards', 'Committee'], [])), + (['TUG'], ['{\\sltt xDVIx}'], ['Driver', 'Standards', 'Committee'], []), None), ('University of M{\\"u}nster', - (['University'], ['of'], ['M{\\"u}nster'], [])), - ('Walter van der Laan', (['Walter'], ['van', 'der'], ['Laan'], [])), - ('Wendy G. McKay', (['Wendy', 'G.'], [], ['McKay'], [])), - ('Wendy McKay', (['Wendy'], [], ['McKay'], [])), - ('W{\\l}odek Bzyl', (['W{\\l}odek'], [], ['Bzyl'], [])), - ('\\LaTeX Project Team', (['\\LaTeX', 'Project'], [], ['Team'], [])), - ('\\rlap{Lutz Birkhahn}', ([], [], ['\\rlap{Lutz Birkhahn}'], [])), - ('{Jim Hef{}feron}', ([], [], ['{Jim Hef{}feron}'], [])), + (['University'], ['of'], ['M{\\"u}nster'], []), None), + ('Walter van der Laan', (['Walter'], ['van', 'der'], ['Laan'], []), None), + ('Wendy G. McKay', (['Wendy', 'G.'], [], ['McKay'], []), None), + ('Wendy McKay', (['Wendy'], [], ['McKay'], []), None), + ('W{\\l}odek Bzyl', (['W{\\l}odek'], [], ['Bzyl'], []), None), + ('\\LaTeX Project Team', (['\\LaTeX', 'Project'], [], ['Team'], []), None), + ('\\rlap{Lutz Birkhahn}', ([], [], ['\\rlap{Lutz Birkhahn}'], []), None), + ('{Jim Hef{}feron}', ([], [], ['{Jim Hef{}feron}'], []), None), ('{Kristoffer H\\o{}gsbro Rose}', - ([], [], ['{Kristoffer H\\o{}gsbro Rose}'], [])), + ([], [], ['{Kristoffer H\\o{}gsbro Rose}'], []), None), ('{TUG} {Working} {Group} on a {\\TeX} {Directory} {Structure}', (['{TUG}', '{Working}', '{Group}'], ['on', 'a'], ['{\\TeX}', '{Directory}', '{Structure}'], - [])), - ('{The \\TUB{} Team}', ([], [], ['{The \\TUB{} Team}'], [])), - ('{\\LaTeX} project team', (['{\\LaTeX}'], ['project'], ['team'], [])), + []), None), + ('{The \\TUB{} Team}', ([], [], ['{The \\TUB{} Team}'], []), None), + ('{\\LaTeX} project team', (['{\\LaTeX}'], ['project'], ['team'], []), None), ('{\\NTG{} \\TeX{} future working group}', - ([], [], ['{\\NTG{} \\TeX{} future working group}'], [])), + ([], [], ['{\\NTG{} \\TeX{} future working group}'], []), None), ('{{\\LaTeX\\,3} Project Team}', - ([], [], ['{{\\LaTeX\\,3} Project Team}'], [])), + ([], [], ['{{\\LaTeX\\,3} Project Team}'], []), None), ('Johansen Kyle, Derik Mamania M.', - (['Derik', 'Mamania', 'M.'], [], ['Johansen', 'Kyle'], [])), + (['Derik', 'Mamania', 'M.'], [], ['Johansen', 'Kyle'], []), None), ("Johannes Adam Ferdinand Alois Josef Maria Marko d'Aviano " 'Pius von und zu Liechtenstein', (['Johannes', 'Adam', 'Ferdinand', 'Alois', 'Josef', 'Maria', 'Marko'], - ["d'Aviano", 'Pius', 'von', 'und', 'zu'], ['Liechtenstein'],[])), + ["d'Aviano", 'Pius', 'von', 'und', 'zu'], ['Liechtenstein'],[]), None), - (r'Brand\~{a}o, F', (['F'], [], [r'Brand\~{a}o'], [])), + (r'Brand\~{a}o, F', (['F'], [], [r'Brand\~{a}o'], []), None), # but BibTeX parses it like this: - # (r'Brand\~{a}o, F', (['F'], [], ['Brand\\', '{a}o'], [])), + # (r'Brand\~{a}o, F', (['F'], [], ['Brand\\', '{a}o'], []), None), # incorrectly formatted name strings below @@ -191,7 +193,11 @@ ] -def parse_name(name, correct_result, expected_errors=None): +@pytest.mark.parametrize( + ["name", "correct_result", "expected_errors"], + sample_names +) +def test_parse_name(name, correct_result, expected_errors): if expected_errors is None: expected_errors = [] @@ -201,8 +207,3 @@ result = (person.bibtex_first_names, person.prelast_names, person.last_names, person.lineage_names) assert result == correct_result assert captured_errors == expected_errors - - -def test_parse_name(): - for test_args in sample_names: - yield (parse_name,) + test_args diff -Nru pybtex-0.22.2/tests/plugin_test.py pybtex-0.23.0/tests/plugin_test.py --- pybtex-0.22.2/tests/plugin_test.py 2019-01-16 16:31:31.000000000 +0000 +++ pybtex-0.23.0/tests/plugin_test.py 2020-10-12 15:15:57.891807600 +0000 @@ -24,18 +24,12 @@ import re -import nose.tools +import pytest import pybtex.database.input.bibtex import pybtex.plugin import pybtex.style.formatting.plain -# unittest.assertRaisesRegexp() is deprecated and renamed to -# unittest.assertRaisesRegex() in Python 3 -if not hasattr(nose.tools, 'assert_raises_regex'): - nose.tools.assert_raises_regex = nose.tools.assert_raises_regexp - - def test_plugin_loader(): """Check that all enumerated plugins can be imported.""" for group in pybtex.plugin._DEFAULT_PLUGINS: @@ -60,94 +54,83 @@ def test_register_plugin_1(): - nose.tools.assert_true( - pybtex.plugin.register_plugin( - 'pybtex.style.formatting', 'yippikayee', TestPlugin1)) - nose.tools.assert_is( - TestPlugin1, pybtex.plugin.find_plugin( - 'pybtex.style.formatting', 'yippikayee')) - nose.tools.assert_false( - pybtex.plugin.register_plugin( - 'pybtex.style.formatting', 'yippikayee', TestPlugin2)) - nose.tools.assert_is( - TestPlugin1, pybtex.plugin.find_plugin( - 'pybtex.style.formatting', 'yippikayee')) - nose.tools.assert_true( - pybtex.plugin.register_plugin( - 'pybtex.style.formatting', 'yippikayee', TestPlugin2, force=True)) - nose.tools.assert_is( - TestPlugin2, pybtex.plugin.find_plugin( - 'pybtex.style.formatting', 'yippikayee')) + assert pybtex.plugin.register_plugin( + 'pybtex.style.formatting', 'yippikayee', TestPlugin1 + ) + assert pybtex.plugin.find_plugin( + 'pybtex.style.formatting', 'yippikayee' + ) is TestPlugin1 + assert not pybtex.plugin.register_plugin( + 'pybtex.style.formatting', 'yippikayee', TestPlugin2 + ) + assert pybtex.plugin.find_plugin( + 'pybtex.style.formatting', 'yippikayee' + ) is TestPlugin1 + assert pybtex.plugin.register_plugin( + 'pybtex.style.formatting', 'yippikayee', TestPlugin2, force=True + ) + assert pybtex.plugin.find_plugin( + 'pybtex.style.formatting', 'yippikayee' + ), TestPlugin2 def test_register_plugin_2(): - nose.tools.assert_false( - pybtex.plugin.register_plugin( - 'pybtex.style.formatting', 'plain', TestPlugin2)) + assert not pybtex.plugin.register_plugin( + 'pybtex.style.formatting', 'plain', TestPlugin2 + ) plugin = pybtex.plugin.find_plugin('pybtex.style.formatting', 'plain') - nose.tools.assert_is_not(plugin, TestPlugin2) - nose.tools.assert_is(plugin, pybtex.style.formatting.plain.Style) + assert plugin is not TestPlugin2 + assert plugin is pybtex.style.formatting.plain.Style def test_register_plugin_3(): - nose.tools.assert_true( - pybtex.plugin.register_plugin( - 'pybtex.style.formatting.suffixes', '.woo', TestPlugin3)) + assert pybtex.plugin.register_plugin( + 'pybtex.style.formatting.suffixes', '.woo', TestPlugin3 + ) plugin = pybtex.plugin.find_plugin( 'pybtex.style.formatting', filename='test.woo') - nose.tools.assert_is(plugin, TestPlugin3) + assert plugin is TestPlugin3 def test_bad_find_plugin(): - nose.tools.assert_raises( - pybtex.plugin.PluginGroupNotFound, - lambda: pybtex.plugin.find_plugin("pybtex.invalid.group", "__oops")) - nose.tools.assert_raises_regex( - pybtex.plugin.PluginNotFound, - re.escape('plugin pybtex.style.formatting.__oops not found'), - lambda: pybtex.plugin.find_plugin("pybtex.style.formatting", "__oops")) - nose.tools.assert_raises( - pybtex.plugin.PluginNotFound, - lambda: pybtex.plugin.find_plugin("pybtex.style.formatting", - filename="oh.__oops")) + with pytest.raises(pybtex.plugin.PluginGroupNotFound): + pybtex.plugin.find_plugin("pybtex.invalid.group", "__oops") + + with pytest.raises(pybtex.plugin.PluginNotFound) as excinfo: + pybtex.plugin.find_plugin("pybtex.style.formatting", "__oops") + assert 'plugin pybtex.style.formatting.__oops not found' in str(excinfo.value) + + with pytest.raises(pybtex.plugin.PluginNotFound): + pybtex.plugin.find_plugin("pybtex.style.formatting", filename="oh.__oops") def test_bad_register_plugin(): - nose.tools.assert_raises( - pybtex.plugin.PluginGroupNotFound, - lambda: pybtex.plugin.register_plugin( - "pybtex.invalid.group", "__oops", TestPlugin1)) - nose.tools.assert_raises( - pybtex.plugin.PluginGroupNotFound, - lambda: pybtex.plugin.register_plugin( - "pybtex.invalid.group.suffixes", ".__oops", TestPlugin1)) + with pytest.raises(pybtex.plugin.PluginGroupNotFound): + pybtex.plugin.register_plugin( "pybtex.invalid.group", "__oops", TestPlugin1) + + with pytest.raises(pybtex.plugin.PluginGroupNotFound): + pybtex.plugin.register_plugin( "pybtex.invalid.group.suffixes", ".__oops", TestPlugin1) + # suffixes must start with a dot - nose.tools.assert_raises( - ValueError, - lambda: pybtex.plugin.register_plugin( - "pybtex.style.formatting.suffixes", "notasuffix", TestPlugin1)) + with pytest.raises(ValueError): + pybtex.plugin.register_plugin( "pybtex.style.formatting.suffixes", "notasuffix", TestPlugin1) def test_plugin_suffix(): plugin = pybtex.plugin.find_plugin( "pybtex.database.input", filename="test.bib") - nose.tools.assert_is(plugin, pybtex.database.input.bibtex.Parser) + assert plugin is pybtex.database.input.bibtex.Parser def test_plugin_alias(): pybtex.plugin._DEFAULT_PLUGINS['pybtex.legacy.input'] = 'punchcard' - nose.tools.assert_true( - pybtex.plugin.register_plugin( - 'pybtex.legacy.input', 'punchcard', TestPlugin4)) - nose.tools.assert_true( - pybtex.plugin.register_plugin( - 'pybtex.legacy.input.aliases', 'punchedcard', TestPlugin4)) - nose.tools.assert_equal( - list(pybtex.plugin.enumerate_plugin_names('pybtex.legacy.input')), - ['punchcard'] + assert pybtex.plugin.register_plugin('pybtex.legacy.input', 'punchcard', TestPlugin4) + assert pybtex.plugin.register_plugin( + 'pybtex.legacy.input.aliases', 'punchedcard', TestPlugin4 ) + assert list(pybtex.plugin.enumerate_plugin_names('pybtex.legacy.input')) == ['punchcard'] plugin = pybtex.plugin.find_plugin("pybtex.legacy.input", 'punchedcard') - nose.tools.assert_equal(plugin, TestPlugin4) + assert plugin is TestPlugin4 del pybtex.plugin._DEFAULT_PLUGINS['pybtex.legacy.input'] @@ -155,4 +138,4 @@ """If a plugin class is passed to find_plugin(), it shoud be returned back.""" plugin = pybtex.plugin.find_plugin("pybtex.database.input", 'bibtex') plugin2 = pybtex.plugin.find_plugin("pybtex.database.input", plugin) - nose.tools.assert_equal(plugin, plugin2) + assert plugin == plugin2 diff -Nru pybtex-0.22.2/tests/richtext_test.py pybtex-0.23.0/tests/richtext_test.py --- pybtex-0.22.2/tests/richtext_test.py 2019-01-16 16:55:06.000000000 +0000 +++ pybtex-0.23.0/tests/richtext_test.py 2020-10-12 15:15:57.892807700 +0000 @@ -28,8 +28,9 @@ from abc import ABCMeta, abstractmethod from unittest import TestCase +import pytest import six -from nose.tools import assert_raises + from pybtex import textutils from pybtex.richtext import HRef, Protected, String, Symbol, Tag, Text, nbsp @@ -125,8 +126,11 @@ text = six.text_type(Text('a', Text('b', 'c'), Tag('em', 'x'), Symbol('nbsp'), 'd')) assert text == 'abcxd' - assert_raises(ValueError, Text, {}) - assert_raises(ValueError, Text, 0, 0) + with pytest.raises(ValueError): + Text({}) + + with pytest.raises(ValueError): + Text(0, 0) def test__eq__(self): assert Text() == Text() @@ -176,7 +180,8 @@ def test__getitem__(self): t = Text('123', Text('456', Text('78'), '9'), '0') - assert_raises(TypeError, lambda: 1 in t) + with pytest.raises(TypeError): + 1 in t assert t == Text('1234567890') assert t[:0] == Text('') @@ -487,7 +492,8 @@ def test__getitem__(self): t = Tag('em', '1234567890') - assert_raises(TypeError, lambda: 1 in t) + with pytest.raises(TypeError): + 1 in t assert t == Tag('em', '1234567890') assert t[:] == t @@ -733,7 +739,8 @@ def test__getitem__(self): t = HRef('/', '1234567890') - assert_raises(TypeError, lambda: 1 in t) + with pytest.raises(TypeError): + 1 in t assert t == HRef('/', '1234567890') assert t[:] == t @@ -989,8 +996,11 @@ text = six.text_type(Protected('a', Protected('b', 'c'), Tag('em', 'x'), Symbol('nbsp'), 'd')) assert text == 'abcxd' - assert_raises(ValueError, Protected, {}) - assert_raises(ValueError, Protected, 0, 0) + with pytest.raises(ValueError): + Protected({}) + + with pytest.raises(ValueError): + Protected(0, 0) def test__eq__(self): assert Protected() == Protected() @@ -1039,7 +1049,8 @@ def test__getitem__(self): t = Protected('1234567890') - assert_raises(TypeError, lambda: 1 in t) + with pytest.raises(TypeError): + 1 in t assert t == Protected('1234567890') assert t[:0] == Protected('') @@ -1203,7 +1214,9 @@ assert symbol[0:5] == Symbol('nbsp') assert symbol[1:] == String() assert symbol[1:5] == String() - assert_raises(IndexError, lambda: symbol[1]) + + with pytest.raises(IndexError): + symbol[1] def test__add__(self): assert (nbsp + '.').render_as('html') == ' .' diff -Nru pybtex-0.22.2/tox.ini pybtex-0.23.0/tox.ini --- pybtex-0.22.2/tox.ini 2018-11-18 12:58:53.000000000 +0000 +++ pybtex-0.23.0/tox.ini 2020-10-12 15:15:57.892807700 +0000 @@ -1,3 +1,3 @@ [testenv] -deps = -rtest_requirements.txt -commands = nosetests -v +extras = test +commands = pytest -v