Add webpack for external frontend libraries.

4725b869ebf064724f7894564d1b1f4497471097

Cohee <18619528+Cohee1207@users.noreply.github.com>

6 files changed, +968 -12Showing whitespace changes
package-lock.json+924 -12
@@ -24,6 +24,7 @@
2424 "csrf-csrf": "^2.2.3",
2525 "express": "^4.21.0",
2626 "form-data": "^4.0.0",
27+ "fuse.js": "^7.0.0",
2728 "google-translate-api-x": "^10.7.1",
2829 "helmet": "^7.1.0",
2930 "html-entities": "^2.5.2",
@@ -49,6 +50,8 @@
4950 "tiktoken": "^1.0.16",
5051 "vectra": "^0.2.2",
5152 "wavefile": "^11.0.0",
53+ "webpack": "^5.95.0",
54+ "webpack-dev-middleware": "^7.4.2",
5255 "write-file-atomic": "^5.0.1",
5356 "ws": "^8.17.1",
5457 "yaml": "^2.3.4",
@@ -777,6 +780,118 @@
777780 "regenerator-runtime": "^0.13.3"
778781 }
779782 },
783+ "node_modules/@jridgewell/gen-mapping": {
784+ "version": "0.3.5",
785+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
786+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
787+ "license": "MIT",
788+ "dependencies": {
789+ "@jridgewell/set-array": "^1.2.1",
790+ "@jridgewell/sourcemap-codec": "^1.4.10",
791+ "@jridgewell/trace-mapping": "^0.3.24"
792+ },
793+ "engines": {
794+ "node": ">=6.0.0"
795+ }
796+ },
797+ "node_modules/@jridgewell/resolve-uri": {
798+ "version": "3.1.2",
799+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
800+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
801+ "license": "MIT",
802+ "engines": {
803+ "node": ">=6.0.0"
804+ }
805+ },
806+ "node_modules/@jridgewell/set-array": {
807+ "version": "1.2.1",
808+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
809+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
810+ "license": "MIT",
811+ "engines": {
812+ "node": ">=6.0.0"
813+ }
814+ },
815+ "node_modules/@jridgewell/source-map": {
816+ "version": "0.3.6",
817+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
818+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
819+ "license": "MIT",
820+ "dependencies": {
821+ "@jridgewell/gen-mapping": "^0.3.5",
822+ "@jridgewell/trace-mapping": "^0.3.25"
823+ }
824+ },
825+ "node_modules/@jridgewell/sourcemap-codec": {
826+ "version": "1.5.0",
827+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
828+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
829+ "license": "MIT"
830+ },
831+ "node_modules/@jridgewell/trace-mapping": {
832+ "version": "0.3.25",
833+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
834+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
835+ "license": "MIT",
836+ "dependencies": {
837+ "@jridgewell/resolve-uri": "^3.1.0",
838+ "@jridgewell/sourcemap-codec": "^1.4.14"
839+ }
840+ },
841+ "node_modules/@jsonjoy.com/base64": {
842+ "version": "1.1.2",
843+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
844+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
845+ "license": "Apache-2.0",
846+ "engines": {
847+ "node": ">=10.0"
848+ },
849+ "funding": {
850+ "type": "github",
851+ "url": "https://github.com/sponsors/streamich"
852+ },
853+ "peerDependencies": {
854+ "tslib": "2"
855+ }
856+ },
857+ "node_modules/@jsonjoy.com/json-pack": {
858+ "version": "1.1.0",
859+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
860+ "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
861+ "license": "Apache-2.0",
862+ "dependencies": {
863+ "@jsonjoy.com/base64": "^1.1.1",
864+ "@jsonjoy.com/util": "^1.1.2",
865+ "hyperdyperid": "^1.2.0",
866+ "thingies": "^1.20.0"
867+ },
868+ "engines": {
869+ "node": ">=10.0"
870+ },
871+ "funding": {
872+ "type": "github",
873+ "url": "https://github.com/sponsors/streamich"
874+ },
875+ "peerDependencies": {
876+ "tslib": "2"
877+ }
878+ },
879+ "node_modules/@jsonjoy.com/util": {
880+ "version": "1.5.0",
881+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz",
882+ "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==",
883+ "license": "Apache-2.0",
884+ "engines": {
885+ "node": ">=10.0"
886+ },
887+ "funding": {
888+ "type": "github",
889+ "url": "https://github.com/sponsors/streamich"
890+ },
891+ "peerDependencies": {
892+ "tslib": "2"
893+ }
894+ },
780895 "node_modules/@kwsites/file-exists": {
781896 "version": "1.1.1",
782897 "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
@@ -1069,6 +1184,12 @@
10691184 "@types/trusted-types": "*"
10701185 }
10711186 },
1187+ "node_modules/@types/estree": {
1188+ "version": "1.0.6",
1189+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
1190+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
1191+ "license": "MIT"
1192+ },
10721193 "node_modules/@types/express": {
10731194 "version": "4.17.21",
10741195 "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
@@ -1116,6 +1237,12 @@
11161237 "@types/sizzle": "*"
11171238 }
11181239 },
1240+ "node_modules/@types/json-schema": {
1241+ "version": "7.0.15",
1242+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
1243+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
1244+ "license": "MIT"
1245+ },
11191246 "node_modules/@types/keygrip": {
11201247 "version": "1.0.6",
11211248 "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz",
@@ -1351,6 +1478,164 @@
13511478 "dev": true,
13521479 "license": "ISC"
13531480 },
1481+ "node_modules/@webassemblyjs/ast": {
1482+ "version": "1.12.1",
1483+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
1484+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
1485+ "license": "MIT",
1486+ "dependencies": {
1487+ "@webassemblyjs/helper-numbers": "1.11.6",
1488+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
1489+ }
1490+ },
1491+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
1492+ "version": "1.11.6",
1493+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
1494+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
1495+ "license": "MIT"
1496+ },
1497+ "node_modules/@webassemblyjs/helper-api-error": {
1498+ "version": "1.11.6",
1499+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
1500+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
1501+ "license": "MIT"
1502+ },
1503+ "node_modules/@webassemblyjs/helper-buffer": {
1504+ "version": "1.12.1",
1505+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
1506+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
1507+ "license": "MIT"
1508+ },
1509+ "node_modules/@webassemblyjs/helper-numbers": {
1510+ "version": "1.11.6",
1511+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
1512+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
1513+ "license": "MIT",
1514+ "dependencies": {
1515+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
1516+ "@webassemblyjs/helper-api-error": "1.11.6",
1517+ "@xtuc/long": "4.2.2"
1518+ }
1519+ },
1520+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
1521+ "version": "1.11.6",
1522+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
1523+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
1524+ "license": "MIT"
1525+ },
1526+ "node_modules/@webassemblyjs/helper-wasm-section": {
1527+ "version": "1.12.1",
1528+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
1529+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
1530+ "license": "MIT",
1531+ "dependencies": {
1532+ "@webassemblyjs/ast": "1.12.1",
1533+ "@webassemblyjs/helper-buffer": "1.12.1",
1534+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
1535+ "@webassemblyjs/wasm-gen": "1.12.1"
1536+ }
1537+ },
1538+ "node_modules/@webassemblyjs/ieee754": {
1539+ "version": "1.11.6",
1540+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
1541+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
1542+ "license": "MIT",
1543+ "dependencies": {
1544+ "@xtuc/ieee754": "^1.2.0"
1545+ }
1546+ },
1547+ "node_modules/@webassemblyjs/leb128": {
1548+ "version": "1.11.6",
1549+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
1550+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
1551+ "license": "Apache-2.0",
1552+ "dependencies": {
1553+ "@xtuc/long": "4.2.2"
1554+ }
1555+ },
1556+ "node_modules/@webassemblyjs/utf8": {
1557+ "version": "1.11.6",
1558+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
1559+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
1560+ "license": "MIT"
1561+ },
1562+ "node_modules/@webassemblyjs/wasm-edit": {
1563+ "version": "1.12.1",
1564+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
1565+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
1566+ "license": "MIT",
1567+ "dependencies": {
1568+ "@webassemblyjs/ast": "1.12.1",
1569+ "@webassemblyjs/helper-buffer": "1.12.1",
1570+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
1571+ "@webassemblyjs/helper-wasm-section": "1.12.1",
1572+ "@webassemblyjs/wasm-gen": "1.12.1",
1573+ "@webassemblyjs/wasm-opt": "1.12.1",
1574+ "@webassemblyjs/wasm-parser": "1.12.1",
1575+ "@webassemblyjs/wast-printer": "1.12.1"
1576+ }
1577+ },
1578+ "node_modules/@webassemblyjs/wasm-gen": {
1579+ "version": "1.12.1",
1580+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
1581+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
1582+ "license": "MIT",
1583+ "dependencies": {
1584+ "@webassemblyjs/ast": "1.12.1",
1585+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
1586+ "@webassemblyjs/ieee754": "1.11.6",
1587+ "@webassemblyjs/leb128": "1.11.6",
1588+ "@webassemblyjs/utf8": "1.11.6"
1589+ }
1590+ },
1591+ "node_modules/@webassemblyjs/wasm-opt": {
1592+ "version": "1.12.1",
1593+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
1594+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
1595+ "license": "MIT",
1596+ "dependencies": {
1597+ "@webassemblyjs/ast": "1.12.1",
1598+ "@webassemblyjs/helper-buffer": "1.12.1",
1599+ "@webassemblyjs/wasm-gen": "1.12.1",
1600+ "@webassemblyjs/wasm-parser": "1.12.1"
1601+ }
1602+ },
1603+ "node_modules/@webassemblyjs/wasm-parser": {
1604+ "version": "1.12.1",
1605+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
1606+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
1607+ "license": "MIT",
1608+ "dependencies": {
1609+ "@webassemblyjs/ast": "1.12.1",
1610+ "@webassemblyjs/helper-api-error": "1.11.6",
1611+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
1612+ "@webassemblyjs/ieee754": "1.11.6",
1613+ "@webassemblyjs/leb128": "1.11.6",
1614+ "@webassemblyjs/utf8": "1.11.6"
1615+ }
1616+ },
1617+ "node_modules/@webassemblyjs/wast-printer": {
1618+ "version": "1.12.1",
1619+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
1620+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
1621+ "license": "MIT",
1622+ "dependencies": {
1623+ "@webassemblyjs/ast": "1.12.1",
1624+ "@xtuc/long": "4.2.2"
1625+ }
1626+ },
1627+ "node_modules/@xtuc/ieee754": {
1628+ "version": "1.2.0",
1629+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
1630+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
1631+ "license": "BSD-3-Clause"
1632+ },
1633+ "node_modules/@xtuc/long": {
1634+ "version": "4.2.2",
1635+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
1636+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
1637+ "license": "Apache-2.0"
1638+ },
13541639 "node_modules/@zeldafan0225/ai_horde": {
13551640 "version": "5.1.0",
13561641 "resolved": "https://registry.npmjs.org/@zeldafan0225/ai_horde/-/ai_horde-5.1.0.tgz",
@@ -1391,7 +1676,6 @@
13911676 "version": "8.11.2",
13921677 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
13931678 "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
1394- "dev": true,
13951679 "license": "MIT",
13961680 "bin": {
13971681 "acorn": "bin/acorn"
@@ -1400,6 +1684,15 @@
14001684 "node": ">=0.4.0"
14011685 }
14021686 },
1687+ "node_modules/acorn-import-attributes": {
1688+ "version": "1.9.5",
1689+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
1690+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
1691+ "license": "MIT",
1692+ "peerDependencies": {
1693+ "acorn": "^8"
1694+ }
1695+ },
14031696 "node_modules/acorn-jsx": {
14041697 "version": "5.3.2",
14051698 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -1461,7 +1754,6 @@
14611754 "version": "6.12.6",
14621755 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
14631756 "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1464- "dev": true,
14651757 "license": "MIT",
14661758 "dependencies": {
14671759 "fast-deep-equal": "^3.1.1",
@@ -1474,6 +1766,54 @@
14741766 "url": "https://github.com/sponsors/epoberezkin"
14751767 }
14761768 },
1769+ "node_modules/ajv-formats": {
1770+ "version": "2.1.1",
1771+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
1772+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
1773+ "license": "MIT",
1774+ "dependencies": {
1775+ "ajv": "^8.0.0"
1776+ },
1777+ "peerDependencies": {
1778+ "ajv": "^8.0.0"
1779+ },
1780+ "peerDependenciesMeta": {
1781+ "ajv": {
1782+ "optional": true
1783+ }
1784+ }
1785+ },
1786+ "node_modules/ajv-formats/node_modules/ajv": {
1787+ "version": "8.17.1",
1788+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
1789+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
1790+ "license": "MIT",
1791+ "dependencies": {
1792+ "fast-deep-equal": "^3.1.3",
1793+ "fast-uri": "^3.0.1",
1794+ "json-schema-traverse": "^1.0.0",
1795+ "require-from-string": "^2.0.2"
1796+ },
1797+ "funding": {
1798+ "type": "github",
1799+ "url": "https://github.com/sponsors/epoberezkin"
1800+ }
1801+ },
1802+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
1803+ "version": "1.0.0",
1804+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
1805+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
1806+ "license": "MIT"
1807+ },
1808+ "node_modules/ajv-keywords": {
1809+ "version": "3.5.2",
1810+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
1811+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
1812+ "license": "MIT",
1813+ "peerDependencies": {
1814+ "ajv": "^6.9.1"
1815+ }
1816+ },
14771817 "node_modules/ansi-regex": {
14781818 "version": "5.0.1",
14791819 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -1908,6 +2248,38 @@
19082248 "concat-map": "0.0.1"
19092249 }
19102250 },
2251+ "node_modules/browserslist": {
2252+ "version": "4.24.0",
2253+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
2254+ "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
2255+ "funding": [
2256+ {
2257+ "type": "opencollective",
2258+ "url": "https://opencollective.com/browserslist"
2259+ },
2260+ {
2261+ "type": "tidelift",
2262+ "url": "https://tidelift.com/funding/github/npm/browserslist"
2263+ },
2264+ {
2265+ "type": "github",
2266+ "url": "https://github.com/sponsors/ai"
2267+ }
2268+ ],
2269+ "license": "MIT",
2270+ "dependencies": {
2271+ "caniuse-lite": "^1.0.30001663",
2272+ "electron-to-chromium": "^1.5.28",
2273+ "node-releases": "^2.0.18",
2274+ "update-browserslist-db": "^1.1.0"
2275+ },
2276+ "bin": {
2277+ "browserslist": "cli.js"
2278+ },
2279+ "engines": {
2280+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
2281+ }
2282+ },
19112283 "node_modules/buffer": {
19122284 "version": "5.7.1",
19132285 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -2032,6 +2404,26 @@
20322404 "node": ">=6"
20332405 }
20342406 },
2407+ "node_modules/caniuse-lite": {
2408+ "version": "1.0.30001669",
2409+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz",
2410+ "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==",
2411+ "funding": [
2412+ {
2413+ "type": "opencollective",
2414+ "url": "https://opencollective.com/browserslist"
2415+ },
2416+ {
2417+ "type": "tidelift",
2418+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
2419+ },
2420+ {
2421+ "type": "github",
2422+ "url": "https://github.com/sponsors/ai"
2423+ }
2424+ ],
2425+ "license": "CC-BY-4.0"
2426+ },
20352427 "node_modules/centra": {
20362428 "version": "2.7.0",
20372429 "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz",
@@ -2105,6 +2497,15 @@
21052497 "url": "https://github.com/sponsors/fb55"
21062498 }
21072499 },
2500+ "node_modules/chrome-trace-event": {
2501+ "version": "1.0.4",
2502+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
2503+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
2504+ "license": "MIT",
2505+ "engines": {
2506+ "node": ">=6.0"
2507+ }
2508+ },
21082509 "node_modules/cliui": {
21092510 "version": "8.0.1",
21102511 "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -2158,6 +2559,12 @@
21582559 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
21592560 "license": "MIT"
21602561 },
2562+ "node_modules/colorette": {
2563+ "version": "2.0.20",
2564+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
2565+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
2566+ "license": "MIT"
2567+ },
21612568 "node_modules/combined-stream": {
21622569 "version": "1.0.8",
21632570 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2176,6 +2583,12 @@
21762583 "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
21772584 "license": "MIT"
21782585 },
2586+ "node_modules/commander": {
2587+ "version": "2.20.3",
2588+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
2589+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
2590+ "license": "MIT"
2591+ },
21792592 "node_modules/compress-commons": {
21802593 "version": "6.0.2",
21812594 "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
@@ -2842,6 +3255,12 @@
28423255 "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
28433256 "license": "MIT"
28443257 },
3258+ "node_modules/electron-to-chromium": {
3259+ "version": "1.5.39",
3260+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.39.tgz",
3261+ "integrity": "sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==",
3262+ "license": "ISC"
3263+ },
28453264 "node_modules/emoji-regex": {
28463265 "version": "8.0.0",
28473266 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -2866,6 +3285,19 @@
28663285 "once": "^1.4.0"
28673286 }
28683287 },
3288+ "node_modules/enhanced-resolve": {
3289+ "version": "5.17.1",
3290+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
3291+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
3292+ "license": "MIT",
3293+ "dependencies": {
3294+ "graceful-fs": "^4.2.4",
3295+ "tapable": "^2.2.0"
3296+ },
3297+ "engines": {
3298+ "node": ">=10.13.0"
3299+ }
3300+ },
28693301 "node_modules/entities": {
28703302 "version": "4.5.0",
28713303 "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -2899,10 +3331,16 @@
28993331 "node": ">= 0.4"
29003332 }
29013333 },
3334+ "node_modules/es-module-lexer": {
3335+ "version": "1.5.4",
3336+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
3337+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
3338+ "license": "MIT"
3339+ },
29023340 "node_modules/escalade": {
29033341 "version": "3.1.2.0",
29043342 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.0.tgz",
29053343 "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQVWUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+jOfl84ZSOSlmv6Gxa89PmTGmAbje/jA==",
29063344 "license": "MIT",
29073345 "engines": {
29083346 "node": ">=6"
@@ -3129,7 +3567,6 @@
31293567 "version": "4.3.0",
31303568 "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
31313569 "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
3132- "dev": true,
31333570 "license": "BSD-2-Clause",
31343571 "dependencies": {
31353572 "estraverse": "^5.2.0"
@@ -3262,7 +3699,6 @@
32623699 "version": "3.1.3",
32633700 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
32643701 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
3265- "dev": true,
32663702 "license": "MIT"
32673703 },
32683704 "node_modules/fast-fifo": {
@@ -3274,7 +3710,6 @@
32743710 "version": "2.1.0",
32753711 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
32763712 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
3277- "dev": true,
32783713 "license": "MIT"
32793714 },
32803715 "node_modules/fast-levenshtein": {
@@ -3284,6 +3719,12 @@
32843719 "dev": true,
32853720 "license": "MIT"
32863721 },
3722+ "node_modules/fast-uri": {
3723+ "version": "3.0.3",
3724+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
3725+ "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
3726+ "license": "BSD-3-Clause"
3727+ },
32873728 "node_modules/fastq": {
32883729 "version": "1.15.0",
32893730 "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -3555,6 +3996,15 @@
35553996 "url": "https://github.com/sponsors/ljharb"
35563997 }
35573998 },
3999+ "node_modules/fuse.js": {
4000+ "version": "7.0.0",
4001+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz",
4002+ "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==",
4003+ "license": "Apache-2.0",
4004+ "engines": {
4005+ "node": ">=10"
4006+ }
4007+ },
35584008 "node_modules/get-caller-file": {
35594009 "version": "2.0.5",
35604010 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -3667,6 +4117,12 @@
36674117 "url": "https://github.com/sponsors/isaacs"
36684118 }
36694119 },
4120+ "node_modules/glob-to-regexp": {
4121+ "version": "0.4.1",
4122+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
4123+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
4124+ "license": "BSD-2-Clause"
4125+ },
36704126 "node_modules/global": {
36714127 "version": "4.4.0",
36724128 "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
@@ -3771,7 +4227,6 @@
37714227 "version": "4.0.0",
37724228 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
37734229 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
3774- "dev": true,
37754230 "license": "MIT",
37764231 "engines": {
37774232 "node": ">=8"
@@ -3984,6 +4439,15 @@
39844439 "ms": "^2.0.0"
39854440 }
39864441 },
4442+ "node_modules/hyperdyperid": {
4443+ "version": "1.2.0",
4444+ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
4445+ "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
4446+ "license": "MIT",
4447+ "engines": {
4448+ "node": ">=10.18"
4449+ }
4450+ },
39874451 "node_modules/iconv-lite": {
39884452 "version": "0.6.3",
39894453 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -4263,6 +4727,35 @@
42634727 "@pkgjs/parseargs": "^0.11.0"
42644728 }
42654729 },
4730+ "node_modules/jest-worker": {
4731+ "version": "27.5.1",
4732+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
4733+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
4734+ "license": "MIT",
4735+ "dependencies": {
4736+ "@types/node": "*",
4737+ "merge-stream": "^2.0.0",
4738+ "supports-color": "^8.0.0"
4739+ },
4740+ "engines": {
4741+ "node": ">= 10.13.0"
4742+ }
4743+ },
4744+ "node_modules/jest-worker/node_modules/supports-color": {
4745+ "version": "8.1.1",
4746+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
4747+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
4748+ "license": "MIT",
4749+ "dependencies": {
4750+ "has-flag": "^4.0.0"
4751+ },
4752+ "engines": {
4753+ "node": ">=10"
4754+ },
4755+ "funding": {
4756+ "url": "https://github.com/chalk/supports-color?sponsor=1"
4757+ }
4758+ },
42664759 "node_modules/jimp": {
42674760 "version": "0.22.12",
42684761 "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz",
@@ -4378,11 +4871,16 @@
43784871 "node": ">=4"
43794872 }
43804873 },
4874+ "node_modules/json-parse-even-better-errors": {
4875+ "version": "2.3.1",
4876+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
4877+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
4878+ "license": "MIT"
4879+ },
43814880 "node_modules/json-schema-traverse": {
43824881 "version": "0.4.1",
43834882 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
43844883 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
4385- "dev": true,
43864884 "license": "MIT"
43874885 },
43884886 "node_modules/json-stable-stringify-without-jsonify": {
@@ -4465,6 +4963,15 @@
44654963 "xtend": "^4.0.0"
44664964 }
44674965 },
4966+ "node_modules/loader-runner": {
4967+ "version": "4.3.0",
4968+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
4969+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
4970+ "license": "MIT",
4971+ "engines": {
4972+ "node": ">=6.11.5"
4973+ }
4974+ },
44684975 "node_modules/locate-path": {
44694976 "version": "6.0.0",
44704977 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -4543,6 +5050,25 @@
45435050 "node": ">= 0.6"
45445051 }
45455052 },
5053+ "node_modules/memfs": {
5054+ "version": "4.14.0",
5055+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz",
5056+ "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==",
5057+ "license": "Apache-2.0",
5058+ "dependencies": {
5059+ "@jsonjoy.com/json-pack": "^1.0.3",
5060+ "@jsonjoy.com/util": "^1.3.0",
5061+ "tree-dump": "^1.0.1",
5062+ "tslib": "^2.0.0"
5063+ },
5064+ "engines": {
5065+ "node": ">= 4.0.0"
5066+ },
5067+ "funding": {
5068+ "type": "github",
5069+ "url": "https://github.com/sponsors/streamich"
5070+ }
5071+ },
45465072 "node_modules/merge-descriptors": {
45475073 "version": "1.0.3",
45485074 "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
@@ -4552,6 +5078,12 @@
45525078 "url": "https://github.com/sponsors/sindresorhus"
45535079 }
45545080 },
5081+ "node_modules/merge-stream": {
5082+ "version": "2.0.0",
5083+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
5084+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
5085+ "license": "MIT"
5086+ },
45555087 "node_modules/methods": {
45565088 "version": "1.1.2",
45575089 "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -4696,6 +5228,12 @@
46965228 "node": ">= 0.6"
46975229 }
46985230 },
5231+ "node_modules/neo-async": {
5232+ "version": "2.6.2",
5233+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
5234+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
5235+ "license": "MIT"
5236+ },
46995237 "node_modules/netmask": {
47005238 "version": "2.0.2",
47015239 "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
@@ -4759,6 +5297,12 @@
47595297 "node": ">=10.12.0"
47605298 }
47615299 },
5300+ "node_modules/node-releases": {
5301+ "version": "2.0.18",
5302+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
5303+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
5304+ "license": "MIT"
5305+ },
47625306 "node_modules/normalize-path": {
47635307 "version": "3.0.0",
47645308 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -5210,6 +5754,12 @@
52105754 "node": ">= 8"
52115755 }
52125756 },
5757+ "node_modules/picocolors": {
5758+ "version": "1.1.0",
5759+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
5760+ "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
5761+ "license": "ISC"
5762+ },
52135763 "node_modules/pixelmatch": {
52145764 "version": "4.0.2",
52155765 "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
@@ -5473,6 +6023,15 @@
54736023 "url": "https://github.com/sponsors/sindresorhus"
54746024 }
54756025 },
6026+ "node_modules/randombytes": {
6027+ "version": "2.1.0",
6028+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
6029+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
6030+ "license": "MIT",
6031+ "dependencies": {
6032+ "safe-buffer": "^5.1.0"
6033+ }
6034+ },
54766035 "node_modules/range-parser": {
54776036 "version": "1.2.1",
54786037 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -5610,6 +6169,15 @@
56106169 "node": ">=0.10.0"
56116170 }
56126171 },
6172+ "node_modules/require-from-string": {
6173+ "version": "2.0.2",
6174+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
6175+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
6176+ "license": "MIT",
6177+ "engines": {
6178+ "node": ">=0.10.0"
6179+ }
6180+ },
56136181 "node_modules/resolve-alpn": {
56146182 "version": "1.2.1",
56156183 "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
@@ -5738,6 +6306,59 @@
57386306 "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
57396307 "license": "ISC"
57406308 },
6309+ "node_modules/schema-utils": {
6310+ "version": "4.2.0",
6311+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
6312+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
6313+ "license": "MIT",
6314+ "dependencies": {
6315+ "@types/json-schema": "^7.0.9",
6316+ "ajv": "^8.9.0",
6317+ "ajv-formats": "^2.1.1",
6318+ "ajv-keywords": "^5.1.0"
6319+ },
6320+ "engines": {
6321+ "node": ">= 12.13.0"
6322+ },
6323+ "funding": {
6324+ "type": "opencollective",
6325+ "url": "https://opencollective.com/webpack"
6326+ }
6327+ },
6328+ "node_modules/schema-utils/node_modules/ajv": {
6329+ "version": "8.17.1",
6330+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
6331+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
6332+ "license": "MIT",
6333+ "dependencies": {
6334+ "fast-deep-equal": "^3.1.3",
6335+ "fast-uri": "^3.0.1",
6336+ "json-schema-traverse": "^1.0.0",
6337+ "require-from-string": "^2.0.2"
6338+ },
6339+ "funding": {
6340+ "type": "github",
6341+ "url": "https://github.com/sponsors/epoberezkin"
6342+ }
6343+ },
6344+ "node_modules/schema-utils/node_modules/ajv-keywords": {
6345+ "version": "5.1.0",
6346+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
6347+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
6348+ "license": "MIT",
6349+ "dependencies": {
6350+ "fast-deep-equal": "^3.1.3"
6351+ },
6352+ "peerDependencies": {
6353+ "ajv": "^8.8.2"
6354+ }
6355+ },
6356+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
6357+ "version": "1.0.0",
6358+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
6359+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
6360+ "license": "MIT"
6361+ },
57416362 "node_modules/send": {
57426363 "version": "0.19.0",
57436364 "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
@@ -5777,6 +6398,15 @@
57776398 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
57786399 "license": "MIT"
57796400 },
6401+ "node_modules/serialize-javascript": {
6402+ "version": "6.0.2",
6403+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
6404+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
6405+ "license": "BSD-3-Clause",
6406+ "dependencies": {
6407+ "randombytes": "^2.1.0"
6408+ }
6409+ },
57806410 "node_modules/serve-static": {
57816411 "version": "1.16.2",
57826412 "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
@@ -5987,11 +6617,20 @@
59876617 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
59886618 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
59896619 "license": "BSD-3-Clause",
5990- "optional": true,
59916620 "engines": {
59926621 "node": ">=0.10.0"
59936622 }
59946623 },
6624+ "node_modules/source-map-support": {
6625+ "version": "0.5.21",
6626+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
6627+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
6628+ "license": "MIT",
6629+ "dependencies": {
6630+ "buffer-from": "^1.0.0",
6631+ "source-map": "^0.6.0"
6632+ }
6633+ },
59956634 "node_modules/sprintf-js": {
59966635 "version": "1.1.3",
59976636 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
@@ -6131,6 +6770,15 @@
61316770 "node": ">=8"
61326771 }
61336772 },
6773+ "node_modules/tapable": {
6774+ "version": "2.2.1",
6775+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
6776+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
6777+ "license": "MIT",
6778+ "engines": {
6779+ "node": ">=6"
6780+ }
6781+ },
61346782 "node_modules/tar-stream": {
61356783 "version": "3.1.7",
61366784 "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
@@ -6141,6 +6789,76 @@
61416789 "streamx": "^2.15.0"
61426790 }
61436791 },
6792+ "node_modules/terser": {
6793+ "version": "5.36.0",
6794+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz",
6795+ "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==",
6796+ "license": "BSD-2-Clause",
6797+ "dependencies": {
6798+ "@jridgewell/source-map": "^0.3.3",
6799+ "acorn": "^8.8.2",
6800+ "commander": "^2.20.0",
6801+ "source-map-support": "~0.5.20"
6802+ },
6803+ "bin": {
6804+ "terser": "bin/terser"
6805+ },
6806+ "engines": {
6807+ "node": ">=10"
6808+ }
6809+ },
6810+ "node_modules/terser-webpack-plugin": {
6811+ "version": "5.3.10",
6812+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
6813+ "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
6814+ "license": "MIT",
6815+ "dependencies": {
6816+ "@jridgewell/trace-mapping": "^0.3.20",
6817+ "jest-worker": "^27.4.5",
6818+ "schema-utils": "^3.1.1",
6819+ "serialize-javascript": "^6.0.1",
6820+ "terser": "^5.26.0"
6821+ },
6822+ "engines": {
6823+ "node": ">= 10.13.0"
6824+ },
6825+ "funding": {
6826+ "type": "opencollective",
6827+ "url": "https://opencollective.com/webpack"
6828+ },
6829+ "peerDependencies": {
6830+ "webpack": "^5.1.0"
6831+ },
6832+ "peerDependenciesMeta": {
6833+ "@swc/core": {
6834+ "optional": true
6835+ },
6836+ "esbuild": {
6837+ "optional": true
6838+ },
6839+ "uglify-js": {
6840+ "optional": true
6841+ }
6842+ }
6843+ },
6844+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
6845+ "version": "3.3.0",
6846+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
6847+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
6848+ "license": "MIT",
6849+ "dependencies": {
6850+ "@types/json-schema": "^7.0.8",
6851+ "ajv": "^6.12.5",
6852+ "ajv-keywords": "^3.5.2"
6853+ },
6854+ "engines": {
6855+ "node": ">= 10.13.0"
6856+ },
6857+ "funding": {
6858+ "type": "opencollective",
6859+ "url": "https://opencollective.com/webpack"
6860+ }
6861+ },
61446862 "node_modules/text-table": {
61456863 "version": "0.2.0",
61466864 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6148,6 +6866,18 @@
61486866 "dev": true,
61496867 "license": "MIT"
61506868 },
6869+ "node_modules/thingies": {
6870+ "version": "1.21.0",
6871+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
6872+ "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
6873+ "license": "Unlicense",
6874+ "engines": {
6875+ "node": ">=10.18"
6876+ },
6877+ "peerDependencies": {
6878+ "tslib": "^2"
6879+ }
6880+ },
61516881 "node_modules/tiktoken": {
61526882 "version": "1.0.16",
61536883 "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.16.tgz",
@@ -6204,6 +6934,22 @@
62046934 "node": ">=18"
62056935 }
62066936 },
6937+ "node_modules/tree-dump": {
6938+ "version": "1.0.2",
6939+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
6940+ "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
6941+ "license": "Apache-2.0",
6942+ "engines": {
6943+ "node": ">=10.0"
6944+ },
6945+ "funding": {
6946+ "type": "github",
6947+ "url": "https://github.com/sponsors/streamich"
6948+ },
6949+ "peerDependencies": {
6950+ "tslib": "2"
6951+ }
6952+ },
62076953 "node_modules/truncate-utf8-bytes": {
62086954 "version": "1.0.2",
62096955 "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
@@ -6296,11 +7042,40 @@
62967042 "node": ">= 0.8"
62977043 }
62987044 },
7045+ "node_modules/update-browserslist-db": {
7046+ "version": "1.1.1",
7047+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
7048+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
7049+ "funding": [
7050+ {
7051+ "type": "opencollective",
7052+ "url": "https://opencollective.com/browserslist"
7053+ },
7054+ {
7055+ "type": "tidelift",
7056+ "url": "https://tidelift.com/funding/github/npm/browserslist"
7057+ },
7058+ {
7059+ "type": "github",
7060+ "url": "https://github.com/sponsors/ai"
7061+ }
7062+ ],
7063+ "license": "MIT",
7064+ "dependencies": {
7065+ "escalade": "^3.2.0",
7066+ "picocolors": "^1.1.0"
7067+ },
7068+ "bin": {
7069+ "update-browserslist-db": "cli.js"
7070+ },
7071+ "peerDependencies": {
7072+ "browserslist": ">= 4.21.0"
7073+ }
7074+ },
62997075 "node_modules/uri-js": {
63007076 "version": "4.4.1",
63017077 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
63027078 "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
6303- "dev": true,
63047079 "license": "BSD-2-Clause",
63057080 "dependencies": {
63067081 "punycode": "^2.1.0"
@@ -6376,6 +7151,19 @@
63767151 "vectra": "bin/vectra.js"
63777152 }
63787153 },
7154+ "node_modules/watchpack": {
7155+ "version": "2.4.2",
7156+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
7157+ "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
7158+ "license": "MIT",
7159+ "dependencies": {
7160+ "glob-to-regexp": "^0.4.1",
7161+ "graceful-fs": "^4.1.2"
7162+ },
7163+ "engines": {
7164+ "node": ">=10.13.0"
7165+ }
7166+ },
63797167 "node_modules/wavefile": {
63807168 "version": "11.0.0",
63817169 "resolved": "https://registry.npmjs.org/wavefile/-/wavefile-11.0.0.tgz",
@@ -6406,6 +7194,130 @@
64067194 "node": ">=12"
64077195 }
64087196 },
7197+ "node_modules/webpack": {
7198+ "version": "5.95.0",
7199+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
7200+ "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
7201+ "license": "MIT",
7202+ "dependencies": {
7203+ "@types/estree": "^1.0.5",
7204+ "@webassemblyjs/ast": "^1.12.1",
7205+ "@webassemblyjs/wasm-edit": "^1.12.1",
7206+ "@webassemblyjs/wasm-parser": "^1.12.1",
7207+ "acorn": "^8.7.1",
7208+ "acorn-import-attributes": "^1.9.5",
7209+ "browserslist": "^4.21.10",
7210+ "chrome-trace-event": "^1.0.2",
7211+ "enhanced-resolve": "^5.17.1",
7212+ "es-module-lexer": "^1.2.1",
7213+ "eslint-scope": "5.1.1",
7214+ "events": "^3.2.0",
7215+ "glob-to-regexp": "^0.4.1",
7216+ "graceful-fs": "^4.2.11",
7217+ "json-parse-even-better-errors": "^2.3.1",
7218+ "loader-runner": "^4.2.0",
7219+ "mime-types": "^2.1.27",
7220+ "neo-async": "^2.6.2",
7221+ "schema-utils": "^3.2.0",
7222+ "tapable": "^2.1.1",
7223+ "terser-webpack-plugin": "^5.3.10",
7224+ "watchpack": "^2.4.1",
7225+ "webpack-sources": "^3.2.3"
7226+ },
7227+ "bin": {
7228+ "webpack": "bin/webpack.js"
7229+ },
7230+ "engines": {
7231+ "node": ">=10.13.0"
7232+ },
7233+ "funding": {
7234+ "type": "opencollective",
7235+ "url": "https://opencollective.com/webpack"
7236+ },
7237+ "peerDependenciesMeta": {
7238+ "webpack-cli": {
7239+ "optional": true
7240+ }
7241+ }
7242+ },
7243+ "node_modules/webpack-dev-middleware": {
7244+ "version": "7.4.2",
7245+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
7246+ "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==",
7247+ "license": "MIT",
7248+ "dependencies": {
7249+ "colorette": "^2.0.10",
7250+ "memfs": "^4.6.0",
7251+ "mime-types": "^2.1.31",
7252+ "on-finished": "^2.4.1",
7253+ "range-parser": "^1.2.1",
7254+ "schema-utils": "^4.0.0"
7255+ },
7256+ "engines": {
7257+ "node": ">= 18.12.0"
7258+ },
7259+ "funding": {
7260+ "type": "opencollective",
7261+ "url": "https://opencollective.com/webpack"
7262+ },
7263+ "peerDependencies": {
7264+ "webpack": "^5.0.0"
7265+ },
7266+ "peerDependenciesMeta": {
7267+ "webpack": {
7268+ "optional": true
7269+ }
7270+ }
7271+ },
7272+ "node_modules/webpack-sources": {
7273+ "version": "3.2.3",
7274+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
7275+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
7276+ "license": "MIT",
7277+ "engines": {
7278+ "node": ">=10.13.0"
7279+ }
7280+ },
7281+ "node_modules/webpack/node_modules/eslint-scope": {
7282+ "version": "5.1.1",
7283+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
7284+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
7285+ "license": "BSD-2-Clause",
7286+ "dependencies": {
7287+ "esrecurse": "^4.3.0",
7288+ "estraverse": "^4.1.1"
7289+ },
7290+ "engines": {
7291+ "node": ">=8.0.0"
7292+ }
7293+ },
7294+ "node_modules/webpack/node_modules/estraverse": {
7295+ "version": "4.3.0",
7296+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
7297+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
7298+ "license": "BSD-2-Clause",
7299+ "engines": {
7300+ "node": ">=4.0"
7301+ }
7302+ },
7303+ "node_modules/webpack/node_modules/schema-utils": {
7304+ "version": "3.3.0",
7305+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
7306+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
7307+ "license": "MIT",
7308+ "dependencies": {
7309+ "@types/json-schema": "^7.0.8",
7310+ "ajv": "^6.12.5",
7311+ "ajv-keywords": "^3.5.2"
7312+ },
7313+ "engines": {
7314+ "node": ">= 10.13.0"
7315+ },
7316+ "funding": {
7317+ "type": "opencollective",
7318+ "url": "https://opencollective.com/webpack"
7319+ }
7320+ },
64097321 "node_modules/whatwg-fetch": {
64107322 "version": "3.6.20",
64117323 "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
package.json+3 -0
@@ -14,6 +14,7 @@
1414 "csrf-csrf": "^2.2.3",
1515 "express": "^4.21.0",
1616 "form-data": "^4.0.0",
17+ "fuse.js": "^7.0.0",
1718 "google-translate-api-x": "^10.7.1",
1819 "helmet": "^7.1.0",
1920 "html-entities": "^2.5.2",
@@ -39,6 +40,8 @@
3940 "tiktoken": "^1.0.16",
4041 "vectra": "^0.2.2",
4142 "wavefile": "^11.0.0",
43+ "webpack": "^5.95.0",
44+ "webpack-dev-middleware": "^7.4.2",
4245 "write-file-atomic": "^5.0.1",
4346 "ws": "^8.17.1",
4447 "yaml": "^2.3.4",
public/lib.js+9 -0
@@ -0,0 +1,9 @@
1+/**
2+ * Add all the libraries that you want to expose to the client here.
3+ * They are bundled and exposed by Webpack in the /lib.js file.
4+ */
5+import Fuse from 'fuse.js';
6+
7+export {
8+ Fuse,
9+};
server.js+3 -0
@@ -54,6 +54,8 @@ import {
5454 tryAutoLogin,
5555 router as userDataRouter,
5656} from './src/users.js';
57+
58+import getWebpackServeMiddleware from './src/middleware/webpack-serve.js';
5759import basicAuthMiddleware from './src/middleware/basicAuth.js';
5860import whitelistMiddleware from './src/middleware/whitelist.js';
5961import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js';
@@ -438,6 +440,7 @@ app.get('/login', async (request, response) => {
438440});
439441
440442// Host frontend assets
443+app.use(getWebpackServeMiddleware());
441444app.use(express.static(process.cwd() + '/public', {}));
442445
443446// Public API
src/middleware/webpack-serve.js+9 -0
@@ -0,0 +1,9 @@
1+import webpack from 'webpack';
2+import middleware from 'webpack-dev-middleware';
3+import { publicLibConfig } from '../../webpack.config.js';
4+
5+export default function getWebpackServeMiddleware() {
6+ const compiler = webpack(publicLibConfig);
7+
8+ return middleware(compiler, {});
9+}
webpack.config.js+20 -0
@@ -0,0 +1,20 @@
1+/** @type {import('webpack').Configuration} */
2+export const publicLibConfig = {
3+ mode: 'production',
4+ entry: './public/lib.js',
5+ cache: true,
6+ devtool: 'source-map',
7+ module: {
8+ rules: [{
9+ test: /\.js$/,
10+ exclude: /node_modules/,
11+ }],
12+ },
13+ experiments: {
14+ outputModule: true,
15+ },
16+ output: {
17+ filename: 'lib.js',
18+ libraryTarget: 'module',
19+ },
20+};