unvendor: Replace epubjs

553920ee8e0fde77e5bf3cea67619141a49f7013

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

6 files changed, +191 -29Showing whitespace changes
.eslintrc.cjs+0 -1
@@ -60,7 +60,6 @@ module.exports = {
60 toastr: 'readonly',60 toastr: 'readonly',
61 Readability: 'readonly',61 Readability: 'readonly',
62 isProbablyReaderable: 'readonly',62 isProbablyReaderable: 'readonly',
63 ePub: 'readonly',
64 diff_match_patch: 'readonly',63 diff_match_patch: 'readonly',
65 SillyTavern: 'readonly',64 SillyTavern: 'readonly',
66 },65 },
package-lock.json+186 -0
@@ -25,6 +25,7 @@
25 "cors": "^2.8.5",25 "cors": "^2.8.5",
26 "csrf-csrf": "^2.2.3",26 "csrf-csrf": "^2.2.3",
27 "dompurify": "^3.1.7",27 "dompurify": "^3.1.7",
28 "epubjs": "^0.3.93",
28 "express": "^4.21.0",29 "express": "^4.21.0",
29 "form-data": "^4.0.0",30 "form-data": "^4.0.0",
30 "fuse.js": "^7.0.0",31 "fuse.js": "^7.0.0",
@@ -1260,6 +1261,16 @@
1260 "@types/node": "*"1261 "@types/node": "*"
1261 }1262 }
1262 },1263 },
1264 "node_modules/@types/localforage": {
1265 "version": "0.0.34",
1266 "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.34.tgz",
1267 "integrity": "sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==",
1268 "deprecated": "This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed!",
1269 "license": "MIT",
1270 "dependencies": {
1271 "localforage": "*"
1272 }
1273 },
1263 "node_modules/@types/lodash": {1274 "node_modules/@types/lodash": {
1264 "version": "4.17.10",1275 "version": "4.17.10",
1265 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz",1276 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz",
@@ -1618,6 +1629,15 @@
1618 "@xtuc/long": "4.2.2"1629 "@xtuc/long": "4.2.2"
1619 }1630 }
1620 },1631 },
1632 "node_modules/@xmldom/xmldom": {
1633 "version": "0.7.13",
1634 "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
1635 "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
1636 "license": "MIT",
1637 "engines": {
1638 "node": ">=10.0.0"
1639 }
1640 },
1621 "node_modules/@xtuc/ieee754": {1641 "node_modules/@xtuc/ieee754": {
1622 "version": "1.2.0",1642 "version": "1.2.0",
1623 "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",1643 "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -2859,6 +2879,17 @@
2859 "node": ">= 0.8"2879 "node": ">= 0.8"
2860 }2880 }
2861 },2881 },
2882 "node_modules/core-js": {
2883 "version": "3.38.1",
2884 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
2885 "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==",
2886 "hasInstallScript": true,
2887 "license": "MIT",
2888 "funding": {
2889 "type": "opencollective",
2890 "url": "https://opencollective.com/core-js"
2891 }
2892 },
2862 "node_modules/core-util-is": {2893 "node_modules/core-util-is": {
2863 "version": "1.0.3",2894 "version": "1.0.3",
2864 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",2895 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -3035,6 +3066,19 @@
3035 "url": "https://github.com/sponsors/fb55"3066 "url": "https://github.com/sponsors/fb55"
3036 }3067 }
3037 },3068 },
3069 "node_modules/d": {
3070 "version": "1.0.2",
3071 "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
3072 "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
3073 "license": "ISC",
3074 "dependencies": {
3075 "es5-ext": "^0.10.64",
3076 "type": "^2.7.2"
3077 },
3078 "engines": {
3079 "node": ">=0.12"
3080 }
3081 },
3038 "node_modules/data-uri-to-buffer": {3082 "node_modules/data-uri-to-buffer": {
3039 "version": "6.0.2",3083 "version": "6.0.2",
3040 "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",3084 "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
@@ -3316,6 +3360,23 @@
3316 "url": "https://github.com/fb55/entities?sponsor=1"3360 "url": "https://github.com/fb55/entities?sponsor=1"
3317 }3361 }
3318 },3362 },
3363 "node_modules/epubjs": {
3364 "version": "0.3.93",
3365 "resolved": "https://registry.npmjs.org/epubjs/-/epubjs-0.3.93.tgz",
3366 "integrity": "sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==",
3367 "license": "BSD-2-Clause",
3368 "dependencies": {
3369 "@types/localforage": "0.0.34",
3370 "@xmldom/xmldom": "^0.7.5",
3371 "core-js": "^3.18.3",
3372 "event-emitter": "^0.3.5",
3373 "jszip": "^3.7.1",
3374 "localforage": "^1.10.0",
3375 "lodash": "^4.17.21",
3376 "marks-pane": "^1.0.9",
3377 "path-webpack": "0.0.3"
3378 }
3379 },
3319 "node_modules/es-define-property": {3380 "node_modules/es-define-property": {
3320 "version": "1.0.0",3381 "version": "1.0.0",
3321 "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",3382 "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -3343,6 +3404,46 @@
3343 "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",3404 "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
3344 "license": "MIT"3405 "license": "MIT"
3345 },3406 },
3407 "node_modules/es5-ext": {
3408 "version": "0.10.64",
3409 "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
3410 "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
3411 "hasInstallScript": true,
3412 "license": "ISC",
3413 "dependencies": {
3414 "es6-iterator": "^2.0.3",
3415 "es6-symbol": "^3.1.3",
3416 "esniff": "^2.0.1",
3417 "next-tick": "^1.1.0"
3418 },
3419 "engines": {
3420 "node": ">=0.10"
3421 }
3422 },
3423 "node_modules/es6-iterator": {
3424 "version": "2.0.3",
3425 "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
3426 "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
3427 "license": "MIT",
3428 "dependencies": {
3429 "d": "1",
3430 "es5-ext": "^0.10.35",
3431 "es6-symbol": "^3.1.1"
3432 }
3433 },
3434 "node_modules/es6-symbol": {
3435 "version": "3.1.4",
3436 "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
3437 "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
3438 "license": "ISC",
3439 "dependencies": {
3440 "d": "^1.0.2",
3441 "ext": "^1.7.0"
3442 },
3443 "engines": {
3444 "node": ">=0.12"
3445 }
3446 },
3346 "node_modules/escalade": {3447 "node_modules/escalade": {
3347 "version": "3.2.0",3448 "version": "3.2.0",
3348 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",3449 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -3525,6 +3626,21 @@
3525 "dev": true,3626 "dev": true,
3526 "license": "MIT"3627 "license": "MIT"
3527 },3628 },
3629 "node_modules/esniff": {
3630 "version": "2.0.1",
3631 "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
3632 "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
3633 "license": "ISC",
3634 "dependencies": {
3635 "d": "^1.0.1",
3636 "es5-ext": "^0.10.62",
3637 "event-emitter": "^0.3.5",
3638 "type": "^2.7.2"
3639 },
3640 "engines": {
3641 "node": ">=0.10"
3642 }
3643 },
3528 "node_modules/espree": {3644 "node_modules/espree": {
3529 "version": "9.6.1",3645 "version": "9.6.1",
3530 "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",3646 "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -3608,6 +3724,16 @@
3608 "node": ">= 0.6"3724 "node": ">= 0.6"
3609 }3725 }
3610 },3726 },
3727 "node_modules/event-emitter": {
3728 "version": "0.3.5",
3729 "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
3730 "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
3731 "license": "MIT",
3732 "dependencies": {
3733 "d": "1",
3734 "es5-ext": "~0.10.14"
3735 }
3736 },
3611 "node_modules/event-target-shim": {3737 "node_modules/event-target-shim": {
3612 "version": "5.0.1",3738 "version": "5.0.1",
3613 "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",3739 "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
@@ -3701,6 +3827,15 @@
3701 ],3827 ],
3702 "license": "MIT"3828 "license": "MIT"
3703 },3829 },
3830 "node_modules/ext": {
3831 "version": "1.7.0",
3832 "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
3833 "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
3834 "license": "ISC",
3835 "dependencies": {
3836 "type": "^2.7.2"
3837 }
3838 },
3704 "node_modules/fast-deep-equal": {3839 "node_modules/fast-deep-equal": {
3705 "version": "3.1.3",3840 "version": "3.1.3",
3706 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",3841 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4944,6 +5079,27 @@
4944 "graceful-fs": "^4.1.6"5079 "graceful-fs": "^4.1.6"
4945 }5080 }
4946 },5081 },
5082 "node_modules/jszip": {
5083 "version": "3.10.1",
5084 "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
5085 "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
5086 "license": "(MIT OR GPL-3.0-or-later)",
5087 "dependencies": {
5088 "lie": "~3.3.0",
5089 "pako": "~1.0.2",
5090 "readable-stream": "~2.3.6",
5091 "setimmediate": "^1.0.5"
5092 }
5093 },
5094 "node_modules/jszip/node_modules/lie": {
5095 "version": "3.3.0",
5096 "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
5097 "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
5098 "license": "MIT",
5099 "dependencies": {
5100 "immediate": "~3.0.5"
5101 }
5102 },
4947 "node_modules/keygrip": {5103 "node_modules/keygrip": {
4948 "version": "1.1.0",5104 "version": "1.1.0",
4949 "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",5105 "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
@@ -5090,6 +5246,12 @@
5090 "node": "14 || >=16.14"5246 "node": "14 || >=16.14"
5091 }5247 }
5092 },5248 },
5249 "node_modules/marks-pane": {
5250 "version": "1.0.9",
5251 "resolved": "https://registry.npmjs.org/marks-pane/-/marks-pane-1.0.9.tgz",
5252 "integrity": "sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==",
5253 "license": "MIT"
5254 },
5093 "node_modules/md5": {5255 "node_modules/md5": {
5094 "version": "2.3.0",5256 "version": "2.3.0",
5095 "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",5257 "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -5303,6 +5465,12 @@
5303 "node": ">= 0.4.0"5465 "node": ">= 0.4.0"
5304 }5466 }
5305 },5467 },
5468 "node_modules/next-tick": {
5469 "version": "1.1.0",
5470 "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
5471 "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
5472 "license": "ISC"
5473 },
5306 "node_modules/node-domexception": {5474 "node_modules/node-domexception": {
5307 "version": "1.0.0",5475 "version": "1.0.0",
5308 "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",5476 "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -5783,6 +5951,12 @@
5783 "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",5951 "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
5784 "license": "MIT"5952 "license": "MIT"
5785 },5953 },
5954 "node_modules/path-webpack": {
5955 "version": "0.0.3",
5956 "resolved": "https://registry.npmjs.org/path-webpack/-/path-webpack-0.0.3.tgz",
5957 "integrity": "sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==",
5958 "license": "MIT"
5959 },
5786 "node_modules/peek-readable": {5960 "node_modules/peek-readable": {
5787 "version": "4.1.0",5961 "version": "4.1.0",
5788 "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",5962 "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
@@ -6499,6 +6673,12 @@
6499 "node": ">= 0.4"6673 "node": ">= 0.4"
6500 }6674 }
6501 },6675 },
6676 "node_modules/setimmediate": {
6677 "version": "1.0.5",
6678 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
6679 "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
6680 "license": "MIT"
6681 },
6502 "node_modules/setprototypeof": {6682 "node_modules/setprototypeof": {
6503 "version": "1.2.0",6683 "version": "1.2.0",
6504 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",6684 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -7033,6 +7213,12 @@
7033 "node": ">=0.6.x"7213 "node": ">=0.6.x"
7034 }7214 }
7035 },7215 },
7216 "node_modules/type": {
7217 "version": "2.7.3",
7218 "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
7219 "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
7220 "license": "ISC"
7221 },
7036 "node_modules/type-check": {7222 "node_modules/type-check": {
7037 "version": "0.4.0",7223 "version": "0.4.0",
7038 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",7224 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
package.json+1 -0
@@ -15,6 +15,7 @@
15 "cors": "^2.8.5",15 "cors": "^2.8.5",
16 "csrf-csrf": "^2.2.3",16 "csrf-csrf": "^2.2.3",
17 "dompurify": "^3.1.7",17 "dompurify": "^3.1.7",
18 "epubjs": "^0.3.93",
18 "express": "^4.21.0",19 "express": "^4.21.0",
19 "form-data": "^4.0.0",20 "form-data": "^4.0.0",
20 "fuse.js": "^7.0.0",21 "fuse.js": "^7.0.0",
public/global.d.ts+0 -1
@@ -7,7 +7,6 @@ declare var showdownKatex;
7declare var SVGInject;7declare var SVGInject;
8declare var Readability;8declare var Readability;
9declare var isProbablyReaderable;9declare var isProbablyReaderable;
10declare var ePub;
11declare var ai;10declare var ai;
1211
13declare var SillyTavern: {12declare var SillyTavern: {
public/lib.js+3 -0
@@ -9,6 +9,7 @@ import localforage from 'localforage';
9import Handlebars from 'handlebars';9import Handlebars from 'handlebars';
10import css from '@adobe/css-tools';10import css from '@adobe/css-tools';
11import Bowser from 'bowser';11import Bowser from 'bowser';
12import ePub from 'epubjs';
1213
13/**14/**
14 * Expose the libraries to the 'window' object.15 * Expose the libraries to the 'window' object.
@@ -49,6 +50,7 @@ export default {
49 Handlebars,50 Handlebars,
50 css,51 css,
51 Bowser,52 Bowser,
53 ePub,
52};54};
5355
54export {56export {
@@ -59,4 +61,5 @@ export {
59 Handlebars,61 Handlebars,
60 css,62 css,
61 Bowser,63 Bowser,
64 ePub,
62};65};
public/scripts/utils.js+1 -27
@@ -1,4 +1,4 @@
1import { DOMPurify } from '../lib.js';1import { DOMPurify, ePub } from '../lib.js';
22
3import { getContext } from './extensions.js';3import { getContext } from './extensions.js';
4import { characters, getRequestHeaders, this_chid } from '../script.js';4import { characters, getRequestHeaders, this_chid } from '../script.js';
@@ -1563,32 +1563,6 @@ export async function extractTextFromMarkdown(blob) {
1563}1563}
15641564
1565export async function extractTextFromEpub(blob) {1565export async function extractTextFromEpub(blob) {
1566 async function initEpubJs() {
1567 const epubScript = new Promise((resolve, reject) => {
1568 const epubScript = document.createElement('script');
1569 epubScript.async = true;
1570 epubScript.src = 'lib/epub.min.js';
1571 epubScript.onload = resolve;
1572 epubScript.onerror = reject;
1573 document.head.appendChild(epubScript);
1574 });
1575
1576 const jszipScript = new Promise((resolve, reject) => {
1577 const jszipScript = document.createElement('script');
1578 jszipScript.async = true;
1579 jszipScript.src = 'lib/jszip.min.js';
1580 jszipScript.onload = resolve;
1581 jszipScript.onerror = reject;
1582 document.head.appendChild(jszipScript);
1583 });
1584
1585 return Promise.all([epubScript, jszipScript]);
1586 }
1587
1588 if (!('ePub' in window)) {
1589 await initEpubJs();
1590 }
1591
1592 const book = ePub(blob);1566 const book = ePub(blob);
1593 await book.ready;1567 await book.ready;
1594 const sectionPromises = [];1568 const sectionPromises = [];