Adde --watch and --dirty mode to build

This commit is contained in:
squidfunk 2021-02-26 16:14:18 +01:00
parent 500d5e6f74
commit 4b6edc1c49
18 changed files with 401 additions and 423 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -57,5 +57,5 @@
* Copyright (C) 2020 Oliver Nightingale
* @license MIT
*/
//# sourceMappingURL=search.31ff4e5f.min.js.map
//# sourceMappingURL=search.fb4a9340.min.js.map

View File

@ -191,7 +191,7 @@
"base": base_url,
"features": features,
"translations": {},
"search": "assets/javascripts/workers/search.31ff4e5f.min.js" | url,
"search": "assets/javascripts/workers/search.fb4a9340.min.js" | url,
"version": config.extra.version or None
} -%}
{%- set translations = app.translations -%}
@ -217,7 +217,7 @@
</script>
{% endblock %}
{% block scripts %}
<script src="{{ 'assets/javascripts/bundle.216d634c.min.js' | url }}"></script>
<script src="{{ 'assets/javascripts/bundle.ca5457b8.min.js' | url }}"></script>
{% for path in config["extra_javascript"] %}
<script src="{{ path | url }}"></script>
{% endfor %}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -53,5 +53,5 @@
{% endblock %}
{% block scripts %}
{{ super() }}
<script src="{{ 'overrides/assets/javascripts/bundle.c978d37b.min.js' | url }}"></script>
<script src="{{ 'overrides/assets/javascripts/bundle.32b3ebe8.min.js' | url }}"></script>
{% endblock %}

472
package-lock.json generated
View File

@ -13,26 +13,33 @@
"@babel/highlight": "^7.10.4"
}
},
"@babel/compat-data": {
"version": "7.13.6",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.6.tgz",
"integrity": "sha512-VhgqKOWYVm7lQXlvbJnWOzwfAQATd2nV52koT0HZ/LdDH0m4DUDwkKYsH+IwpXb+bKPyBJzawA4I6nBKqZcpQw==",
"dev": true
},
"@babel/core": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz",
"integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==",
"version": "7.13.1",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.1.tgz",
"integrity": "sha512-FzeKfFBG2rmFtGiiMdXZPFt/5R5DXubVi82uYhjGX4Msf+pgYQMCFIqFXZWs5vbIYbf14VeBIgdGI03CDOOM1w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.12.17",
"@babel/helper-module-transforms": "^7.12.17",
"@babel/helpers": "^7.12.17",
"@babel/parser": "^7.12.17",
"@babel/generator": "^7.13.0",
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helpers": "^7.13.0",
"@babel/parser": "^7.13.0",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.12.17",
"@babel/types": "^7.12.17",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
"lodash": "^4.17.19",
"semver": "^5.4.1",
"semver": "7.0.0",
"source-map": "^0.5.0"
},
"dependencies": {
@ -55,9 +62,9 @@
}
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true
},
"source-map": {
@ -69,12 +76,12 @@
}
},
"@babel/generator": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.17.tgz",
"integrity": "sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.0.tgz",
"integrity": "sha512-zBZfgvBB/ywjx0Rgc2+BwoH/3H+lDtlgD4hBOpEv5LxRnYsm/753iRuLepqnYlynpjC3AdQxtxsoeHJoEEwOAw==",
"dev": true,
"requires": {
"@babel/types": "^7.12.17",
"@babel/types": "^7.13.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@ -87,6 +94,26 @@
}
}
},
"@babel/helper-compilation-targets": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.0.tgz",
"integrity": "sha512-SOWD0JK9+MMIhTQiUVd4ng8f3NXhPVQvTv7D3UN4wbp/6cAHnB2EmMaU1zZA2Hh1gwme+THBrVSqTFxHczTh0Q==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5",
"semver": "7.0.0"
},
"dependencies": {
"semver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true
}
}
},
"@babel/helper-function-name": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
@ -108,12 +135,12 @@
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz",
"integrity": "sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz",
"integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==",
"dev": true,
"requires": {
"@babel/types": "^7.12.17"
"@babel/types": "^7.13.0"
}
},
"@babel/helper-module-imports": {
@ -126,19 +153,19 @@
}
},
"@babel/helper-module-transforms": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz",
"integrity": "sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz",
"integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-replace-supers": "^7.12.13",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-simple-access": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/helper-validator-identifier": "^7.12.11",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.12.17",
"@babel/types": "^7.12.17",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"lodash": "^4.17.19"
}
},
@ -152,15 +179,15 @@
}
},
"@babel/helper-replace-supers": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz",
"integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz",
"integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.12.13",
"@babel/helper-member-expression-to-functions": "^7.13.0",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/traverse": "^7.12.13",
"@babel/types": "^7.12.13"
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/helper-simple-access": {
@ -187,15 +214,21 @@
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
"dev": true
},
"@babel/helpers": {
"@babel/helper-validator-option": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz",
"integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
"integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
"dev": true
},
"@babel/helpers": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz",
"integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==",
"dev": true,
"requires": {
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.12.17",
"@babel/types": "^7.12.17"
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/highlight": {
@ -210,9 +243,9 @@
}
},
"@babel/parser": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.17.tgz",
"integrity": "sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==",
"version": "7.13.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.4.tgz",
"integrity": "sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA==",
"dev": true
},
"@babel/template": {
@ -238,17 +271,17 @@
}
},
"@babel/traverse": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.17.tgz",
"integrity": "sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
"integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.12.17",
"@babel/generator": "^7.13.0",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.12.17",
"@babel/types": "^7.12.17",
"@babel/parser": "^7.13.0",
"@babel/types": "^7.13.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
@ -272,9 +305,9 @@
}
},
"@babel/types": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.17.tgz",
"integrity": "sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==",
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz",
"integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.12.11",
@ -400,6 +433,12 @@
"unist-util-find-all-after": "^3.0.2"
}
},
"@trysound/sax": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
"integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
"dev": true
},
"@types/clean-css": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.3.tgz",
@ -569,13 +608,13 @@
}
},
"@typescript-eslint/eslint-plugin": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz",
"integrity": "sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz",
"integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==",
"dev": true,
"requires": {
"@typescript-eslint/experimental-utils": "4.15.1",
"@typescript-eslint/scope-manager": "4.15.1",
"@typescript-eslint/experimental-utils": "4.15.2",
"@typescript-eslint/scope-manager": "4.15.2",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1",
"lodash": "^4.17.15",
@ -585,55 +624,55 @@
}
},
"@typescript-eslint/experimental-utils": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.1.tgz",
"integrity": "sha512-9LQRmOzBRI1iOdJorr4jEnQhadxK4c9R2aEAsm7WE/7dq8wkKD1suaV0S/JucTL8QlYUPU1y2yjqg+aGC0IQBQ==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz",
"integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
"@typescript-eslint/scope-manager": "4.15.1",
"@typescript-eslint/types": "4.15.1",
"@typescript-eslint/typescript-estree": "4.15.1",
"@typescript-eslint/scope-manager": "4.15.2",
"@typescript-eslint/types": "4.15.2",
"@typescript-eslint/typescript-estree": "4.15.2",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
}
},
"@typescript-eslint/parser": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.1.tgz",
"integrity": "sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz",
"integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==",
"dev": true,
"requires": {
"@typescript-eslint/scope-manager": "4.15.1",
"@typescript-eslint/types": "4.15.1",
"@typescript-eslint/typescript-estree": "4.15.1",
"@typescript-eslint/scope-manager": "4.15.2",
"@typescript-eslint/types": "4.15.2",
"@typescript-eslint/typescript-estree": "4.15.2",
"debug": "^4.1.1"
}
},
"@typescript-eslint/scope-manager": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.1.tgz",
"integrity": "sha512-ibQrTFcAm7yG4C1iwpIYK7vDnFg+fKaZVfvyOm3sNsGAerKfwPVFtYft5EbjzByDJ4dj1WD8/34REJfw/9wdVA==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz",
"integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.15.1",
"@typescript-eslint/visitor-keys": "4.15.1"
"@typescript-eslint/types": "4.15.2",
"@typescript-eslint/visitor-keys": "4.15.2"
}
},
"@typescript-eslint/types": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.1.tgz",
"integrity": "sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz",
"integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.1.tgz",
"integrity": "sha512-z8MN3CicTEumrWAEB2e2CcoZa3KP9+SMYLIA2aM49XW3cWIaiVSOAGq30ffR5XHxRirqE90fgLw3e6WmNx5uNw==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz",
"integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.15.1",
"@typescript-eslint/visitor-keys": "4.15.1",
"@typescript-eslint/types": "4.15.2",
"@typescript-eslint/visitor-keys": "4.15.2",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
@ -642,12 +681,12 @@
}
},
"@typescript-eslint/visitor-keys": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.1.tgz",
"integrity": "sha512-tYzaTP9plooRJY8eNlpAewTOqtWW/4ff/5wBjNVaJ0S0wC4Gpq/zDVRTJa5bq2v1pCNQ08xxMCndcvR+h7lMww==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz",
"integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==",
"dev": true,
"requires": {
"@typescript-eslint/types": "4.15.1",
"@typescript-eslint/types": "4.15.2",
"eslint-visitor-keys": "^2.0.0"
}
},
@ -1060,9 +1099,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001191",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz",
"integrity": "sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==",
"version": "1.0.30001192",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001192.tgz",
"integrity": "sha512-63OrUnwJj5T1rUmoyqYTdRWBqFFxZFlyZnRRjDR8NSUQFB6A+j/uBORU/SyJ5WzDLg4SPiZH40hQCBNdZ/jmAw==",
"dev": true
},
"ccount": {
@ -1268,9 +1307,9 @@
}
},
"colorette": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
"integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
"dev": true
},
"combined-stream": {
@ -1777,9 +1816,9 @@
}
},
"electron-to-chromium": {
"version": "1.3.671",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.671.tgz",
"integrity": "sha512-RTD97QkdrJKaKwRv9h/wGAaoR2lGxNXEcBXS31vjitgTPwTWAbLdS7cEsBK68eEQy7p6YyT8D5BxBEYHu2SuwQ==",
"version": "1.3.674",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.674.tgz",
"integrity": "sha512-DBmEKRVYLZAoQSW+AmLcTF5Bpwhk4RUkobtzXVDlfPPYIlbsH3Jfg3QbBjAfFcRARzMIo4YiMhp3N+RnMuo1Eg==",
"dev": true
},
"emoji-regex": {
@ -1846,9 +1885,9 @@
}
},
"esbuild": {
"version": "0.8.50",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.50.tgz",
"integrity": "sha512-oidFLXssA7IccYzkqLVZSqNJDwDq8Mh/vqvrW+3fPWM7iUiC5O2bCllhnO8+K9LlyL/2Z6n+WwRJAz9fqSIVRg==",
"version": "0.8.52",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.52.tgz",
"integrity": "sha512-b5KzFweLLXoXQwdC/e2+Z80c8uo2M5MgP7yQEEebkFw6In4T9CvYcNoM2ElvJt8ByO04zAZUV0fZkXmXoi2s9A==",
"dev": true
},
"escalade": {
@ -2099,9 +2138,9 @@
}
},
"eslint-plugin-jsdoc": {
"version": "32.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.1.0.tgz",
"integrity": "sha512-nCdKF8QQvAZ6RsnNoEK4kPF0aD9E6XURdjLx88oIqF+txmPNXAo2rNvu2WwV77R78vnhAGJkeOgmxmYdRRpgaQ==",
"version": "32.2.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.2.0.tgz",
"integrity": "sha512-ikeVeF3JVmzjcmGd04OZK0rXjgiw46TWtNX+OhyF2jQlw3w1CAU1vyAyLv8PZcIjp7WxP4N20Vg1CI9bp/52dw==",
"dev": true,
"requires": {
"comment-parser": "1.1.2",
@ -2419,9 +2458,9 @@
"dev": true
},
"fastq": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz",
"integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==",
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
"integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
"dev": true,
"requires": {
"reusify": "^1.0.4"
@ -3703,12 +3742,6 @@
"integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
"dev": true
},
"memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
"integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
"dev": true
},
"meow": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
@ -4042,12 +4075,6 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"no-case": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
@ -4064,9 +4091,9 @@
"dev": true
},
"node-releases": {
"version": "1.1.70",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
"version": "1.1.71",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
"dev": true
},
"normalize-package-data": {
@ -4113,112 +4140,6 @@
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
"dev": true
},
"npm-run-all": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
"memorystream": "^0.3.1",
"minimatch": "^3.0.4",
"pidtree": "^0.3.0",
"read-pkg": "^3.0.0",
"shell-quote": "^1.6.1",
"string.prototype.padend": "^3.0.0"
},
"dependencies": {
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
}
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
},
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"dev": true,
"requires": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
}
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
}
}
},
"nth-check": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
@ -4331,14 +4252,14 @@
}
},
"object.values": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
"integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz",
"integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"es-abstract": "^1.18.0-next.2",
"has": "^1.0.3"
}
},
@ -4563,12 +4484,6 @@
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
"pidtree": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
"integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
"dev": true
},
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
@ -5876,9 +5791,9 @@
"dev": true
},
"query-string": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz",
"integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"dev": true,
"requires": {
"decode-uri-component": "^0.2.0",
@ -6117,11 +6032,11 @@
}
},
"rxjs": {
"version": "7.0.0-beta.10",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.0.0-beta.10.tgz",
"integrity": "sha512-iK8B6ACjMn00gObHQYoIyXouyD0cPmzuXFxfYi/i9jBVFQHsjjPt5T51sRDsXJ9Utg4Q7R1m7QiLtuQEQ3r73g==",
"version": "7.0.0-beta.11",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.0.0-beta.11.tgz",
"integrity": "sha512-DSeQ+tf3BhKhVqhxy1z+BzlTE1SmqFom8+d9/HZ7A6m1acCNf7CuGgf4xA8ZVQBqfGX8mzxEGmKm4cKlXNXfXg==",
"requires": {
"tslib": "^1.9.0"
"tslib": "~2.1.0"
}
},
"safe-buffer": {
@ -6206,12 +6121,6 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"shell-quote": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
"dev": true
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@ -6546,9 +6455,9 @@
"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==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@ -6556,34 +6465,23 @@
"strip-ansi": "^6.0.0"
}
},
"string.prototype.padend": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz",
"integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==",
"string.prototype.trimend": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
"integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.2"
}
},
"string.prototype.trimend": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
"integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3"
}
},
"string.prototype.trimstart": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
"integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
"integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
}
},
@ -7649,18 +7547,18 @@
"dev": true
},
"svgo": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-2.0.3.tgz",
"integrity": "sha512-q6YtEaLXkPN1ARaifoENYPPweAbBV8YoqWg+8DFQ3xsImfyRIdBbr42Cqz4NZwCftmVJjh+m1rEK7ItRdLTxdg==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-2.1.0.tgz",
"integrity": "sha512-f5iEvWkSesVHPqBBc26s9/9LFKJZ+4aWPpOVX0uxXz/39SlNL4XuwfhOWsqOS5Q1j7Z6WLayCF/s1lISeAHjwA==",
"dev": true,
"requires": {
"@trysound/sax": "0.1.1",
"chalk": "^4.1.0",
"commander": "^7.1.0",
"css-select": "^3.1.2",
"css-select-base-adapter": "^0.1.1",
"css-tree": "^1.1.2",
"csso": "^4.2.0",
"sax": "~1.2.4",
"stable": "^0.1.8"
},
"dependencies": {
@ -7962,9 +7860,9 @@
}
},
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
},
"tsutils": {
"version": "3.20.0",
@ -7973,6 +7871,14 @@
"dev": true,
"requires": {
"tslib": "^1.8.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"type-check": {
@ -8000,9 +7906,9 @@
}
},
"typescript": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
"integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz",
"integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==",
"dev": true
},
"uglify-js": {
@ -8022,9 +7928,9 @@
}
},
"unified": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
"integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz",
"integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==",
"dev": true,
"requires": {
"bail": "^1.0.0",

View File

@ -24,14 +24,13 @@
"url": "https://github.com/squidfunk/mkdocs-material.git"
},
"scripts": {
"build": "run-s build:*",
"build:clean": "rimraf material",
"build:tools": "ts-node -T tools/build --optimize",
"build": "rimraf material && ts-node -T tools/build --optimize",
"build:dirty": "ts-node -T tools/build --dirty",
"clean": "rimraf material",
"lint": "run-p lint:*",
"lint": "npm run lint:scss && npm run lint:scss",
"lint:scss": "stylelint \"src/assets/**/*.scss\"",
"lint:ts": "eslint --cache \"src/**/*.ts\"",
"start": "ts-node -T tools/build --watch"
"start": "ts-node -T tools/build --verbose --dirty --watch"
},
"dependencies": {
"clipboard": "^2.0.6",
@ -70,7 +69,6 @@
"html-minifier": "^4.0.0",
"material-design-color": "^2.3.2",
"material-shadows": "^3.0.1",
"npm-run-all": "^4.1.5",
"postcss": "^8.2.5",
"postcss-inline-svg": "^5.0.0",
"preact": "^10.5.12",

View File

@ -23,17 +23,20 @@
import * as chokidar from "chokidar"
import * as fs from "fs/promises"
import {
EMPTY,
Observable,
from,
fromEvent,
identity,
EMPTY
defer,
of
} from "rxjs"
import {
catchError,
mapTo,
mergeWith,
switchMap
switchMap,
tap
} from "rxjs/operators"
import glob from "tiny-glob"
@ -65,26 +68,34 @@ interface WatchOptions {
*/
export const base = "material"
/**
* Cache to omit redundant writes
*/
export const cache = new Map<string, string>()
/* ----------------------------------------------------------------------------
* Functions
* Helper Ffunctions
* ------------------------------------------------------------------------- */
/**
* Recursively create the given directory
* Return the current time
*
* @param directory - Directory
*
* @returns Directory observable
* @returns Time
*/
export function mkdir(
directory: string
): Observable<string> {
return from(fs.mkdir(directory, { recursive: true }))
.pipe(
mapTo(directory)
)
function now() {
const date = new Date()
return [
`${date.getHours()}`.padStart(2, "0"),
`${date.getMinutes()}`.padStart(2, "0"),
`${date.getSeconds()}`.padStart(2, "0")
]
.join(":")
}
/* ----------------------------------------------------------------------------
* Functions
* ------------------------------------------------------------------------- */
/**
* Resolve a pattern
*
@ -119,3 +130,55 @@ export function watch(
): Observable<string> {
return fromEvent(chokidar.watch(pattern, options), "change")
}
/* ------------------------------------------------------------------------- */
/**
* Recursively create the given directory
*
* @param directory - Directory
*
* @returns Directory observable
*/
export function mkdir(directory: string): Observable<string> {
return defer(() => fs.mkdir(directory, { recursive: true }))
.pipe(
mapTo(directory)
)
}
/**
* Read a file
*
* @param file - File
*
* @returns File data observable
*/
export function read(file: string): Observable<string> {
return defer(() => fs.readFile(file, "utf8"))
}
/**
* Write a file, but only if the contents changed
*
* @param file - File
* @param data - File data
*
* @returns File observable
*/
export function write(file: string, data: string): Observable<string> {
let contents = cache.get(file)
if (contents === data) {
return of(file)
} else {
cache.set(file, data)
return defer(() => fs.writeFile(file, data))
.pipe(
mapTo(file),
process.argv.includes("--verbose")
? tap(file => console.log(`${now()} + ${file}`))
: identity
)
}
}

View File

@ -25,7 +25,7 @@ import * as path from "path"
import { Observable, from } from "rxjs"
import { mapTo, mergeMap, switchMap } from "rxjs/operators"
import { mkdir, resolve } from "../_"
import { mkdir, read, resolve, write } from "../_"
/* ----------------------------------------------------------------------------
* Helper types
@ -71,10 +71,10 @@ export function copy(
.pipe(
switchMap(() => typeof transform === "undefined"
? from(fs.copyFile(options.from, options.to))
: from(fs.readFile(options.from, "utf8"))
: read(options.from)
.pipe(
switchMap(data => transform(data, options.from)),
switchMap(data => fs.writeFile(options.to, data))
switchMap(data => write(options.to, data))
)
),
mapTo(options.to)

View File

@ -20,15 +20,18 @@
* IN THE SOFTWARE.
*/
import * as fs from "fs/promises"
import { minify as minhtml } from "html-minifier"
import * as path from "path"
import { concat, defer, merge, of, zip } from "rxjs"
import { concat, defer, EMPTY, merge, of, zip } from "rxjs"
import {
concatMap,
map,
reduce,
switchMap
scan,
startWith,
switchMap,
switchMapTo,
toArray
} from "rxjs/operators"
import {
extendDefaultPlugins,
@ -37,7 +40,7 @@ import {
import { IconSearchIndex } from "_/components"
import { base, resolve } from "./_"
import { base, read, resolve, watch, write } from "./_"
import { copyAll } from "./copy"
import {
transformScript,
@ -92,7 +95,7 @@ function minsvg(data: string): string {
}
/* ----------------------------------------------------------------------------
* Program
* Tasks
* ------------------------------------------------------------------------- */
/* Copy all assets */
@ -103,9 +106,7 @@ const assets$ = concat(
.map(pattern => copyAll(pattern, {
from: "node_modules/@mdi/svg/svg",
to: `${base}/.icons/material`,
...process.argv.includes("--optimize") && {
transform: async data => minsvg(data)
}
transform: async data => minsvg(data)
})),
/* Copy GitHub octicons */
@ -113,9 +114,7 @@ const assets$ = concat(
.map(pattern => copyAll(pattern, {
from: "node_modules/@primer/octicons/build/svg",
to: `${base}/.icons/octicons`,
...process.argv.includes("--optimize") && {
transform: async data => minsvg(data)
}
transform: async data => minsvg(data)
})),
/* Copy FontAwesome icons */
@ -123,9 +122,7 @@ const assets$ = concat(
.map(pattern => copyAll(pattern, {
from: "node_modules/@fortawesome/fontawesome-free/svgs",
to: `${base}/.icons/fontawesome`,
...process.argv.includes("--optimize") && {
transform: async data => minsvg(data)
}
transform: async data => minsvg(data)
})),
/* Copy Lunr.js search stemmers and segmenter */
@ -171,14 +168,27 @@ const javascripts$ = resolve("**/{bundle,search}.ts", { cwd: "src" })
/* Compute manifest */
const manifest$ = merge(
stylesheets$,
javascripts$
...Object.entries({
"**/*.scss": stylesheets$,
"**/*.ts*": javascripts$
})
.map(([pattern, observable$]) => (
defer(() => process.argv.includes("--watch")
? watch(pattern, { cwd: "src" })
: EMPTY
)
.pipe(
startWith("*"),
switchMapTo(observable$.pipe(toArray()))
)
))
)
.pipe(
reduce((manifest, [key, value]) => manifest.set(
key,
value.replace(`${base}/`, "")
), new Map<string, string>())
scan((prev, mapping) => (
mapping.reduce((next, [key, value]) => (
next.set(key, value.replace(`${base}/`, ""))
), prev)
), new Map<string, string>()),
)
/* Transform templates */
@ -239,7 +249,7 @@ const icons$ = defer(() => resolve("**/*.svg", { cwd: "material/.icons" }))
/* Compute emoji mappings (based on Twemoji) */
const emojis$ = defer(() => resolve("venv/**/twemoji_db.py"))
.pipe(
switchMap(file => fs.readFile(file, "utf8")),
switchMap(file => read(file)),
map(data => {
const [, payload] = data.match(/^emoji = ({.*})$.alias/ms)!
return Object.entries<TwemojiIcon>(JSON.parse(payload))
@ -266,21 +276,21 @@ const index$ = zip(icons$, emojis$)
}
} as IconSearchIndex
}),
switchMap(data => fs.writeFile(
switchMap(data => write(
`${base}/overrides/assets/javascripts/iconsearch_index.json`,
JSON.stringify(data)
))
)
/* ------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------------
* Program
* ------------------------------------------------------------------------- */
/* Put everything together */
concat(
assets$,
merge(
templates$,
index$
)
)
.subscribe()
// .subscribe(console.log)
/* Assemble pipeline */
const build$ =
process.argv.includes("--dirty")
? templates$
: concat(assets$, merge(templates$, index$))
/* Let's get rolling */
build$.subscribe()

View File

@ -22,7 +22,6 @@
import { createHash } from "crypto"
import { build as esbuild } from "esbuild"
import * as fs from "fs/promises"
import * as path from "path"
import postcss from "postcss"
import {
@ -40,7 +39,7 @@ import {
import { render as sass } from "sass"
import { promisify } from "util"
import { base, mkdir } from "../_"
import { base, mkdir, write } from "../_"
/* ----------------------------------------------------------------------------
* Helper types
@ -76,10 +75,12 @@ const root = new RegExp(`file://${path.resolve(".")}/`, "g")
* @returns File with digest
*/
function digest(file: string, data: string): string {
const hash = createHash("sha256").update(data).digest("hex")
return process.argv.includes("--optimize")
? file.replace(/\b(?=\.)/, `.${hash.slice(0, 8)}.min`)
: file
if (process.argv.includes("--optimize")) {
const hash = createHash("sha256").update(data).digest("hex")
return file.replace(/\b(?=\.)/, `.${hash.slice(0, 8)}.min`)
} else {
return file
}
}
/* ----------------------------------------------------------------------------
@ -133,13 +134,13 @@ export function transformStyle(
const file = digest(options.to, css)
return concat(
mkdir(path.dirname(file)),
defer(() => merge(
fs.writeFile(`${file}.map`, `${map}`.replace(root, "")),
fs.writeFile(`${file}`, css.replace(
merge(
write(`${file}.map`, `${map}`.replace(root, "")),
write(`${file}`, css.replace(
options.from,
path.basename(file)
)),
))
)
)
.pipe(
ignoreElements(),
@ -180,13 +181,13 @@ export function transformScript(
const file = digest(options.to, js)
return concat(
mkdir(path.dirname(file)),
defer(() => merge(
fs.writeFile(`${file}.map`, map),
fs.writeFile(`${file}`, js.replace(
merge(
write(`${file}.map`, `${map}`),
write(`${file}`, js.replace(
/(sourceMappingURL=)(.*)/,
`$1${path.basename(file)}.map\n`
)),
))
)
)
.pipe(
ignoreElements(),