From 66fd70c01af07a0f9749a90b067f6ee17a238008 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 26 Feb 2024 23:13:29 +0900 Subject: [PATCH] Add postfile function --- package.json | 1 + pnpm-lock.yaml | 217 +++++++++++++++--- src/lang/en.ts | 2 +- src/lib/ChatScreens/DefaultChatScreen.svelte | 11 +- src/lib/Setting/Pages/AdvancedSettings.svelte | 2 +- src/ts/characterCards.ts | 2 +- src/ts/characters.ts | 2 +- src/ts/parser.ts | 2 +- src/ts/persona.ts | 2 +- src/ts/{ => process/files}/image.ts | 23 +- src/ts/process/files/multisend.ts | 192 ++++++++++++++++ src/ts/process/index.ts | 2 +- src/ts/process/inlayScreen.ts | 2 +- src/ts/process/request.ts | 2 +- src/ts/tokenizer.ts | 2 +- src/ts/util.ts | 10 +- 16 files changed, 412 insertions(+), 62 deletions(-) rename src/ts/{ => process/files}/image.ts (89%) create mode 100644 src/ts/process/files/multisend.ts diff --git a/package.json b/package.json index 7b30e697..3acae88a 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "mobile-drag-drop": "3.0.0-rc.0", "msgpackr": "^1.10.1", "node-html-parser": "^6.1.12", + "pdfjs-dist": "^4.0.379", "peerjs": "^1.5.2", "png-chunk-text": "^1.0.0", "png-chunks-encode": "^1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1d9f5d9..b1cec9bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,6 +116,9 @@ dependencies: node-html-parser: specifier: ^6.1.12 version: 6.1.12 + pdfjs-dist: + specifier: ^4.0.379 + version: 4.0.379 peerjs: specifier: ^1.5.2 version: 1.5.2 @@ -863,6 +866,25 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + dependencies: + detect-libc: 2.0.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /@mlc-ai/web-tokenizers@0.1.2: resolution: {integrity: sha512-zpeZjiw8vTuaSjIeoEDYJL1nOrhSL/7eAW7hhqd3CzIodLpuArfyiTZxKwIlew8kkqb0RIxooqeAqtlngh1p8g==} dev: false @@ -1712,7 +1734,6 @@ packages: /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -1736,6 +1757,16 @@ packages: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} dev: true + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -1756,7 +1787,6 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -1794,6 +1824,20 @@ packages: picomatch: 2.3.1 dev: true + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: false + optional: true + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: false + optional: true + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -1869,7 +1913,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1973,7 +2016,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -2057,6 +2099,20 @@ packages: resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true + /canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + nan: 2.18.0 + simple-get: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /cbor-extract@2.2.0: resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} hasBin: true @@ -2115,7 +2171,6 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - dev: true /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -2181,6 +2236,12 @@ packages: color-name: 1.1.4 simple-swizzle: 0.2.2 + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: false + optional: true + /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -2218,7 +2279,11 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: false + optional: true /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} @@ -2558,6 +2623,14 @@ packages: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: false + /decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + dependencies: + mimic-response: 2.1.0 + dev: false + optional: true + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -2613,6 +2686,11 @@ packages: engines: {node: '>=0.4.0'} dev: false + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: false + optional: true + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -2742,7 +2820,6 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -3046,11 +3123,9 @@ packages: engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -3062,6 +3137,22 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: false + optional: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3165,7 +3256,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} @@ -3260,6 +3350,11 @@ packages: engines: {node: '>= 0.4'} dev: false + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: false + optional: true + /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} @@ -3313,6 +3408,17 @@ packages: - supports-color dev: false + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} @@ -3376,7 +3482,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3457,7 +3562,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -3772,6 +3876,14 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + optional: true + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -3878,6 +3990,12 @@ packages: engines: {node: '>=6'} dev: true + /mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + dev: false + optional: true + /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -3897,7 +4015,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} @@ -3930,7 +4047,6 @@ packages: engines: {node: '>=8'} dependencies: yallist: 4.0.0 - dev: true /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} @@ -3940,7 +4056,6 @@ packages: /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - dev: true /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -3953,7 +4068,6 @@ packages: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -3969,7 +4083,6 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true - dev: true /ml-array-mean@1.1.6: resolution: {integrity: sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==} @@ -4056,6 +4169,11 @@ packages: thenify-all: 1.6.0 dev: true + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + dev: false + optional: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4113,7 +4231,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-gyp-build-optional-packages@5.0.7: resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} @@ -4172,6 +4289,15 @@ packages: abbrev: 1.1.1 dev: true + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + optional: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -4216,6 +4342,16 @@ packages: through2: 4.0.2 dev: true + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: false + optional: true + /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -4414,7 +4550,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -4449,6 +4584,24 @@ packages: engines: {node: '>=8'} dev: true + /path2d-polyfill@2.0.1: + resolution: {integrity: sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true + + /pdfjs-dist@4.0.379: + resolution: {integrity: sha512-6H0Gv1nna+wmrr3CakaKlZ4rbrL8hvGIFAgg4YcoFuGC0HC4B2DVjXEGTFjJEjLlf8nYi3C3/MYRcM5bNx0elA==} + engines: {node: '>=18'} + optionalDependencies: + canvas: 2.11.2 + path2d-polyfill: 2.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /peerjs-js-binarypack@2.1.0: resolution: {integrity: sha512-YIwCC+pTzp3Bi8jPI9UFKO0t0SLo6xALnHkiNt/iUFmUUZG0fEEmEyFKvjsDKweiFitzHRyhuh6NvyJZ4nNxMg==} engines: {node: '>= 14.0.0'} @@ -4896,7 +5049,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true /rimraf@4.4.1: resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} @@ -4999,7 +5151,6 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true /semver@7.0.0: resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} @@ -5048,7 +5199,6 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true /set-function-length@1.2.0: resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} @@ -5112,7 +5262,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -5122,6 +5271,15 @@ packages: /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + /simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + optional: true + /simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} dependencies: @@ -5260,7 +5418,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -5286,7 +5443,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} @@ -5521,7 +5677,6 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true /temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} @@ -5622,7 +5777,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} @@ -5911,7 +6065,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -5950,7 +6103,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -5964,6 +6116,13 @@ packages: isexe: 2.0.0 dev: true + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: false + optional: true + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true diff --git a/src/lang/en.ts b/src/lang/en.ts index fd683c40..17a47901 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -466,7 +466,6 @@ export const languageEnglish = { charjs: "CharacterJS", depthPrompt: "Depth Prompt", largePortrait: "Portrait", - postImage: "Post Image", lorePlus: "LoreBook+", reverseProxyOobaMode: "Reverse Proxy Ooba Mode", joinMultiUserRoom: "Join MultiUser Room", @@ -536,4 +535,5 @@ export const languageEnglish = { persistentStorageRecommended: "Persistent Storage Recommended", persistentStorageDesc: "Your browser supports persistent storage. this is recommended for better performance and user experience.", enable: "Enable", + postFile: "Post File", } \ No newline at end of file diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte index 33b1b8b9..48100f05 100644 --- a/src/lib/ChatScreens/DefaultChatScreen.svelte +++ b/src/lib/ChatScreens/DefaultChatScreen.svelte @@ -16,14 +16,13 @@ import CreatorQuote from "./CreatorQuote.svelte"; import { stopTTS } from "src/ts/process/tts"; import MainMenu from '../UI/MainMenu.svelte'; - import Help from '../Others/Help.svelte'; import AssetInput from './AssetInput.svelte'; import { downloadFile } from 'src/ts/storage/globalApi'; import { runTrigger } from 'src/ts/process/triggers'; import { v4 } from 'uuid'; - import { postInlayImage } from 'src/ts/image'; import { PreUnreroll, Prereroll } from 'src/ts/process/prereroll'; import { processMultiCommand } from 'src/ts/process/command'; + import { postChatFile } from 'src/ts/process/files/multisend'; let messageInput:string = '' let messageInputTranslate:string = '' @@ -647,14 +646,14 @@ {#if $DataBase.inlayImage}
{ - const imgid = await postInlayImage() - if(imgid){ - messageInput += imgid + const res = await postChatFile(messageInput) + if(res?.type === 'image'){ + messageInput += res.data updateInputSizeAll() } }}> - {language.postImage} + {language.postFile}
{/if} diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte index 914116de..c348a713 100644 --- a/src/lib/Setting/Pages/AdvancedSettings.svelte +++ b/src/lib/Setting/Pages/AdvancedSettings.svelte @@ -78,7 +78,7 @@
- +
diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index fb8e85d4..39c09fda 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -10,7 +10,7 @@ import { cloneDeep } from "lodash" import { selectedCharID } from "./stores" import { convertImage, hasher } from "./parser" -import { reencodeImage } from "./image" +import { reencodeImage } from "./process/files/image" import { PngChunk } from "./pngChunk" import type { OnnxModelFiles } from "./process/embedding/transformers" diff --git a/src/ts/characters.ts b/src/ts/characters.ts index 0c1c9059..eac7fbcd 100644 --- a/src/ts/characters.ts +++ b/src/ts/characters.ts @@ -7,7 +7,7 @@ import { checkNullish, findCharacterbyId, selectMultipleFile, selectSingleFile, import { v4 as uuidv4 } from 'uuid'; import { selectedCharID } from "./stores"; import { checkCharOrder, downloadFile, getFileSrc } from "./storage/globalApi"; -import { reencodeImage } from "./image"; +import { reencodeImage } from "./process/files/image"; import { updateInlayScreen } from "./process/inlayScreen"; import { PngChunk } from "./pngChunk"; diff --git a/src/ts/parser.ts b/src/ts/parser.ts index 4dcdf418..a3ae4d3f 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -10,7 +10,7 @@ import css from '@adobe/css-tools' import { selectedCharID } from './stores'; import { calcString } from './process/infunctions'; import { findCharacterbyId } from './util'; -import { getInlayImage } from './image'; +import { getInlayImage } from './process/files/image'; import { autoMarkNew } from './plugins/automark'; import { getModuleLorebooks } from './process/modules'; diff --git a/src/ts/persona.ts b/src/ts/persona.ts index c414d394..9d4ed1c0 100644 --- a/src/ts/persona.ts +++ b/src/ts/persona.ts @@ -5,7 +5,7 @@ import { alertError, alertNormal, alertStore } from "./alert" import { downloadFile, readImage } from "./storage/globalApi" import { language } from "src/lang" import { cloneDeep } from "lodash" -import { reencodeImage } from "./image" +import { reencodeImage } from "./process/files/image" import { PngChunk } from "./pngChunk" export async function selectUserImg() { diff --git a/src/ts/image.ts b/src/ts/process/files/image.ts similarity index 89% rename from src/ts/image.ts rename to src/ts/process/files/image.ts index 20eb3b47..8cbdbc80 100644 --- a/src/ts/image.ts +++ b/src/ts/process/files/image.ts @@ -1,30 +1,21 @@ import localforage from "localforage"; -import { selectSingleFile } from "./util"; +import { selectSingleFile } from "../../util"; import { v4 } from "uuid"; -import { DataBase } from "./storage/database"; +import { DataBase } from "../../storage/database"; import { get } from "svelte/store"; -import { checkImageType } from "./parser"; +import { checkImageType } from "../../parser"; const inlayStorage = localforage.createInstance({ name: 'inlay', storeName: 'inlay' }) -export async function postInlayImage(){ - const img = await selectSingleFile([ - //image format - 'jpg', - 'jpeg', - 'png', - 'webp' - ]) - - if(!img){ - return null - } +export async function postInlayImage(img:{ + name:string, + data:Uint8Array +}){ const extention = img.name.split('.').at(-1) - const imgObj = new Image() imgObj.src = URL.createObjectURL(new Blob([img.data], {type: `image/${extention}`})) diff --git a/src/ts/process/files/multisend.ts b/src/ts/process/files/multisend.ts new file mode 100644 index 00000000..e2d4669d --- /dev/null +++ b/src/ts/process/files/multisend.ts @@ -0,0 +1,192 @@ +import { DataBase, setDatabase } from 'src/ts/storage/database'; +import { selectedCharID } from 'src/ts/stores'; +import { get } from 'svelte/store'; +import { doingChat, sendChat } from '..'; +import { downloadFile, isTauri } from 'src/ts/storage/globalApi'; +import { HypaProcesser } from '../memory/hypamemory'; +import { BufferToText as BufferToText, selectSingleFile, sleep } from 'src/ts/util'; +import { postInlayImage } from './image'; + +type sendFileArg = { + file:string + query:string +} + +async function sendPofile(arg:sendFileArg){ + + let result = '' + let msgId = '' + let parseMode = 0 + const db = get(DataBase) + let currentChar = db.characters[get(selectedCharID)] + let currentChat = currentChar.chats[currentChar.chatPage] + const lines = arg.file.split('\n') + for(let i=0;i { + return a !== '' + }).map((str) => { + return `"${str.replaceAll('"', '\\"')}"` + }).join('\n') + result += `msgstr ""\n${msgStr}\n\n` + + msgId = '' + if(isTauri){ + await downloadFile('translated.po', result) + } + continue + } + if(line.startsWith('msgid')){ + parseMode = 0 + msgId = line.replace('msgid ', '').trim().replaceAll('\\"', '♠#').replaceAll('"', '').replaceAll('♠#', '\\"') + if(msgId === ''){ + parseMode = 1 + } + result += line + '\n' + continue + } + if(parseMode === 1 && line.startsWith('"') && line.endsWith('"')){ + msgId += line.substring(1, line.length-1).replaceAll('\\"', '"') + result += line + '\n' + continue + } + if(line.startsWith('msgstr')){ + if(msgId === ''){ + result += line + '\n' + parseMode = 0 + } + else{ + parseMode = 2 + } + continue + } + if(parseMode === 2 && line.startsWith('"') && line.endsWith('"')){ + continue + } + result += line + '\n' + + if(i > 100){ + break //prevent too long message in testing + } + + } + await downloadFile('translated.po', result) +} + +async function sendPDFFile(arg:sendFileArg) { + const pdfjsLib = (await import('pdfjs-dist')).default; + const pdf = await pdfjsLib.getDocument({data: arg.file}).promise; + const db = get(DataBase) + const texts:string[] = [] + for(let i = 1; i<=pdf.numPages; i++){ + const page = await pdf.getPage(i); + const content = await page.getTextContent(); + const items = content.items as {str:string}[]; + for(const item of items){ + texts.push(item.str) + } + } + const hypa = new HypaProcesser('MiniLM') + hypa.addText(texts) + let currentChar = db.characters[get(selectedCharID)] + let currentChat = currentChar.chats[currentChar.chatPage] + const result = await hypa.similaritySearch(arg.query) + let message = arg.query + for(let i = 0; i5){ + break + } + } + currentChat.message.push({ + role: 'user', + data: message + }) + + currentChar.chats[currentChar.chatPage] = currentChat + db.characters[get(selectedCharID)] = currentChar + setDatabase(db) + await sendChat(-1) +} + +type postFileResult = postFileResultImage | postFileResultVoid + +type postFileResultImage = { + data: string, + type: 'image', +} + +type postFileResultVoid = { + type: 'void', +} + +export async function postChatFile(query:string):Promise{ + const file = await selectSingleFile([ + //image format + 'jpg', + 'jpeg', + 'png', + 'webp', + 'po', + 'pdf' + ]) + + if(!file){ + return null + } + + const extention = file.name.split('.').at(-1) + console.log(extention) + + switch(extention){ + case 'po':{ + await sendPofile({ + file: BufferToText(file.data), + query: query + }) + return { + type: 'void' + } + } + case 'pdf':{ + await sendPDFFile({ + file: BufferToText(file.data), + query: query + }) + return { + type: 'void' + } + } + case 'jpg': + case 'jpeg': + case 'png': + case 'webp':{ + const postData = await postInlayImage(file) + return { + data: postData, + type: 'image' + } + } + } + + return +} \ No newline at end of file diff --git a/src/ts/process/index.ts b/src/ts/process/index.ts index 3bfbac90..70c94cd8 100644 --- a/src/ts/process/index.ts +++ b/src/ts/process/index.ts @@ -19,7 +19,7 @@ import { runTrigger } from "./triggers"; import { HypaProcesser } from "./memory/hypamemory"; import { additionalInformations } from "./embedding/addinfo"; import { cipherChat, decipherChat } from "./cipherChat"; -import { getInlayImage, supportsInlayImage } from "../image"; +import { getInlayImage, supportsInlayImage } from "./files/image"; import { getGenerationModelString } from "./models/modelString"; import { sendPeerChar } from "../sync/multiuser"; import { runInlayScreen } from "./inlayScreen"; diff --git a/src/ts/process/inlayScreen.ts b/src/ts/process/inlayScreen.ts index 87839eb8..dac23def 100644 --- a/src/ts/process/inlayScreen.ts +++ b/src/ts/process/inlayScreen.ts @@ -1,4 +1,4 @@ -import { writeInlayImage } from "../image"; +import { writeInlayImage } from "./files/image"; import type { character } from "../storage/database"; import { generateAIImage } from "./stableDiff"; diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 746128c5..cdd03bfa 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -17,7 +17,7 @@ import { HttpRequest } from "@smithy/protocol-http"; import { Sha256 } from "@aws-crypto/sha256-js"; import { v4 } from "uuid"; import { cloneDeep } from "lodash"; -import { supportsInlayImage } from "../image"; +import { supportsInlayImage } from "./files/image"; import { OaifixBias } from "../plugins/fixer"; import { Capacitor } from "@capacitor/core"; import { getFreeOpenRouterModel } from "../model/openrouter"; diff --git a/src/ts/tokenizer.ts b/src/ts/tokenizer.ts index bc565ccd..bed25788 100644 --- a/src/ts/tokenizer.ts +++ b/src/ts/tokenizer.ts @@ -3,7 +3,7 @@ import type { Tokenizer } from "@mlc-ai/web-tokenizers"; import { DataBase, type character } from "./storage/database"; import { get } from "svelte/store"; import type { OpenAIChat } from "./process"; -import { supportsInlayImage } from "./image"; +import { supportsInlayImage } from "./process/files/image"; import { risuChatParser } from "./parser"; import { tokenizeGGUFModel } from "./process/models/local"; diff --git a/src/ts/util.ts b/src/ts/util.ts index 4b364539..2dc3157b 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -42,8 +42,9 @@ export function checkNullish(data:any){ return data === undefined || data === null } +const domSelect = true export async function selectSingleFile(ext:string[]){ - if(await !isTauri){ + if(domSelect){ const v = await selectFileByDom(ext, 'single') const file = v[0] return {name: file.name,data:await readFileAsUint8Array(file)} @@ -375,4 +376,11 @@ export function getCurrentCharacter(){ export function toState(t:T):Writable{ return writable(t) +} + +export function BufferToText(data:Uint8Array){ + if(!TextDecoder){ + return Buffer.from(data).toString('utf-8') + } + return new TextDecoder().decode(data) } \ No newline at end of file