unvendor: Replace epubjs

553920ee8e0fde77e5bf3cea67619141a49f7013

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

6 files changed, +191 -29Ignore whitespace
.eslintrc.cjs+0 -1
@@ -60,7 +60,6 @@ module.exports = {
6060 toastr: 'readonly',
6161 Readability: 'readonly',
6262 isProbablyReaderable: 'readonly',
63- ePub: 'readonly',
6463 diff_match_patch: 'readonly',
6564 SillyTavern: 'readonly',
6665 },
package-lock.json+186 -0
@@ -25,6 +25,7 @@
2525 "cors": "^2.8.5",
2626 "csrf-csrf": "^2.2.3",
2727 "dompurify": "^3.1.7",
28+ "epubjs": "^0.3.93",
2829 "express": "^4.21.0",
2930 "form-data": "^4.0.0",
3031 "fuse.js": "^7.0.0",
@@ -1260,6 +1261,16 @@
12601261 "@types/node": "*"
12611262 }
12621263 },
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+ },
12631274 "node_modules/@types/lodash": {
12641275 "version": "4.17.10",
12651276 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz",
@@ -1618,6 +1629,15 @@
16181629 "@xtuc/long": "4.2.2"
16191630 }
16201631 },
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+ },
16211641 "node_modules/@xtuc/ieee754": {
16221642 "version": "1.2.0",
16231643 "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -2859,6 +2879,17 @@
28592879 "node": ">= 0.8"
28602880 }
28612881 },
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+ },
28622893 "node_modules/core-util-is": {
28632894 "version": "1.0.3",
28642895 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -3035,6 +3066,19 @@
30353066 "url": "https://github.com/sponsors/fb55"
30363067 }
30373068 },
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+ },
30383082 "node_modules/data-uri-to-buffer": {
30393083 "version": "6.0.2",
30403084 "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
@@ -3316,6 +3360,23 @@
33163360 "url": "https://github.com/fb55/entities?sponsor=1"
33173361 }
33183362 },
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+ },
33193380 "node_modules/es-define-property": {
33203381 "version": "1.0.0",
33213382 "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -3343,6 +3404,46 @@
33433404 "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
33443405 "license": "MIT"
33453406 },
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+ },
33463447 "node_modules/escalade": {
33473448 "version": "3.2.0",
33483449 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -3525,6 +3626,21 @@
35253626 "dev": true,
35263627 "license": "MIT"
35273628 },
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+ },
35283644 "node_modules/espree": {
35293645 "version": "9.6.1",
35303646 "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -3608,6 +3724,16 @@
36083724 "node": ">= 0.6"
36093725 }
36103726 },
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+ },
36113737 "node_modules/event-target-shim": {
36123738 "version": "5.0.1",
36133739 "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
@@ -3701,6 +3827,15 @@
37013827 ],
37023828 "license": "MIT"
37033829 },
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+ },
37043839 "node_modules/fast-deep-equal": {
37053840 "version": "3.1.3",
37063841 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4944,6 +5079,27 @@
49445079 "graceful-fs": "^4.1.6"
49455080 }
49465081 },
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+ },
49475103 "node_modules/keygrip": {
49485104 "version": "1.1.0",
49495105 "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
@@ -5090,6 +5246,12 @@
50905246 "node": "14 || >=16.14"
50915247 }
50925248 },
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+ },
50935255 "node_modules/md5": {
50945256 "version": "2.3.0",
50955257 "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -5303,6 +5465,12 @@
53035465 "node": ">= 0.4.0"
53045466 }
53055467 },
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+ },
53065474 "node_modules/node-domexception": {
53075475 "version": "1.0.0",
53085476 "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -5783,6 +5951,12 @@
57835951 "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
57845952 "license": "MIT"
57855953 },
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+ },
57865960 "node_modules/peek-readable": {
57875961 "version": "4.1.0",
57885962 "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
@@ -6499,6 +6673,12 @@
64996673 "node": ">= 0.4"
65006674 }
65016675 },
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+ },
65026682 "node_modules/setprototypeof": {
65036683 "version": "1.2.0",
65046684 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -7033,6 +7213,12 @@
70337213 "node": ">=0.6.x"
70347214 }
70357215 },
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+ },
70367222 "node_modules/type-check": {
70377223 "version": "0.4.0",
70387224 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
package.json+1 -0
@@ -15,6 +15,7 @@
1515 "cors": "^2.8.5",
1616 "csrf-csrf": "^2.2.3",
1717 "dompurify": "^3.1.7",
18+ "epubjs": "^0.3.93",
1819 "express": "^4.21.0",
1920 "form-data": "^4.0.0",
2021 "fuse.js": "^7.0.0",
public/global.d.ts+0 -1
@@ -7,7 +7,6 @@ declare var showdownKatex;
77declare var SVGInject;
88declare var Readability;
99declare var isProbablyReaderable;
10-declare var ePub;
1110declare var ai;
1211
1312declare var SillyTavern: {
public/lib.js+3 -0
@@ -9,6 +9,7 @@ import localforage from 'localforage';
99import Handlebars from 'handlebars';
1010import css from '@adobe/css-tools';
1111import Bowser from 'bowser';
12+import ePub from 'epubjs';
1213
1314/**
1415 * Expose the libraries to the 'window' object.
@@ -49,6 +50,7 @@ export default {
4950 Handlebars,
5051 css,
5152 Bowser,
53+ ePub,
5254};
5355
5456export {
@@ -59,4 +61,5 @@ export {
5961 Handlebars,
6062 css,
6163 Bowser,
64+ ePub,
6265};
public/scripts/utils.js+1 -27
@@ -1,4 +1,4 @@
11import { DOMPurify, ePub } from '../lib.js';
22
33import { getContext } from './extensions.js';
44import { characters, getRequestHeaders, this_chid } from '../script.js';
@@ -1563,32 +1563,6 @@ export async function extractTextFromMarkdown(blob) {
15631563}
15641564
15651565export 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-
15921566 const book = ePub(blob);
15931567 await book.ready;
15941568 const sectionPromises = [];