From 47e56f962ac4727bd37a0f261508b1c28f47a804 Mon Sep 17 00:00:00 2001 From: josc146 Date: Mon, 20 Mar 2023 00:10:40 +0800 Subject: [PATCH] chore: reduce bundle size --- .github/workflows/tagged-release.yml | 2 + build.mjs | 33 +++++++++- package-lock.json | 60 +++++++++++++++++++ package.json | 1 + src/background/apis/chatgpt-web.mjs | 2 +- src/background/apis/openai-api.mjs | 2 +- src/background/index.mjs | 11 ++-- src/components/ConversationCard/index.jsx | 2 +- src/components/DecisionCard/index.jsx | 2 +- src/components/FloatingToolbar/index.jsx | 2 +- src/{config.mjs => config/index.mjs} | 49 +++++++-------- src/config/language.mjs | 24 ++++++++ src/content-script/index.jsx | 3 +- src/content-script/selection-tools/index.mjs | 2 +- src/popup/Popup.jsx | 6 +- src/popup/donation/bugmeacoffee.png | Bin 0 -> 5696 bytes src/popup/donation/bugmeacoffee.svg | 22 ------- src/utils/crop-text.mjs | 2 +- 18 files changed, 157 insertions(+), 68 deletions(-) rename src/{config.mjs => config/index.mjs} (77%) create mode 100644 src/config/language.mjs create mode 100644 src/popup/donation/bugmeacoffee.png delete mode 100644 src/popup/donation/bugmeacoffee.svg diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml index b8c7eb4..04308f0 100644 --- a/.github/workflows/tagged-release.yml +++ b/.github/workflows/tagged-release.yml @@ -62,3 +62,5 @@ jobs: build/safari.dmg build/chromium-without-katex.zip build/firefox-without-katex.zip + build/chromium-without-katex-and-tiktoken.zip + build/firefox-without-katex-and-tiktoken.zip diff --git a/build.mjs b/build.mjs index c379790..ca2667c 100644 --- a/build.mjs +++ b/build.mjs @@ -18,7 +18,7 @@ async function deleteOldDir() { await fs.rm(outdir, { recursive: true, force: true }) } -async function runWebpack(isWithoutKatex, callback) { +async function runWebpack(isWithoutKatex, isWithoutTiktoken, callback) { const compiler = webpack({ entry: { 'content-script': { @@ -37,6 +37,7 @@ async function runWebpack(isWithoutKatex, callback) { 'webextension-polyfill', '@primer/octicons-react', 'react-bootstrap-icons', + 'countries-list', './src/utils', ], }, @@ -169,9 +170,27 @@ async function runWebpack(isWithoutKatex, callback) { type: 'asset/inline', }, { - test: /\.(jpg|svg)$/, + test: /\.(jpg|png|svg)$/, type: 'asset/inline', }, + isWithoutTiktoken + ? { + test: /crop-text\.mjs$/, + loader: 'string-replace-loader', + options: { + multiple: [ + { + search: "import { encode } from '@nem035/gpt-3-encoder'", + replace: '', + }, + { + search: 'encode(', + replace: 'String(', + }, + ], + }, + } + : {}, ], }, }) @@ -244,11 +263,19 @@ async function build() { if (isProduction && !isAnalyzing) { await runWebpack( true, + false, generateWebpackCallback(() => finishOutput('-without-katex')), ) - await new Promise((r) => setTimeout(r, 2000)) + await new Promise((r) => setTimeout(r, 5000)) + await runWebpack( + true, + true, + generateWebpackCallback(() => finishOutput('-without-katex-and-tiktoken')), + ) + await new Promise((r) => setTimeout(r, 5000)) } await runWebpack( + false, false, generateWebpackCallback(() => finishOutput('')), ) diff --git a/package-lock.json b/package-lock.json index 0409fa0..6cb6ec7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,7 @@ "run-script-os": "^1.1.6", "sass": "^1.59.3", "sass-loader": "^13.2.1", + "string-replace-loader": "^3.1.0", "terser-webpack-plugin": "^5.3.7", "webpack": "^5.76.2", "webpack-bundle-analyzer": "^4.8.0" @@ -2834,6 +2835,15 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3667,6 +3677,15 @@ "integrity": "sha512-YyE8+GKyGtPEP1/kpvqsdhD6rA/TP1DUFDN4uiU/YI52NzDxmwHkEb3qjId8hLBa5siJvG0sfC3O66501jMruQ==", "dev": true }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5582,6 +5601,20 @@ "node": ">=6.11.5" } }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", @@ -8193,6 +8226,33 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-replace-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-replace-loader/-/string-replace-loader-3.1.0.tgz", + "integrity": "sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "peerDependencies": { + "webpack": "^5" + } + }, + "node_modules/string-replace-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", diff --git a/package.json b/package.json index 14b49b1..fddfb44 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "run-script-os": "^1.1.6", "sass": "^1.59.3", "sass-loader": "^13.2.1", + "string-replace-loader": "^3.1.0", "terser-webpack-plugin": "^5.3.7", "webpack": "^5.76.2", "webpack-bundle-analyzer": "^4.8.0" diff --git a/src/background/apis/chatgpt-web.mjs b/src/background/apis/chatgpt-web.mjs index 178cf01..7f47e23 100644 --- a/src/background/apis/chatgpt-web.mjs +++ b/src/background/apis/chatgpt-web.mjs @@ -2,7 +2,7 @@ import { fetchSSE } from '../../utils/fetch-sse' import { isEmpty } from 'lodash-es' -import { chatgptWebModelKeys, getUserConfig, Models } from '../../config' +import { chatgptWebModelKeys, getUserConfig, Models } from '../../config/index.mjs' async function request(token, method, path, data) { const apiUrl = (await getUserConfig()).customChatGptWebApiUrl diff --git a/src/background/apis/openai-api.mjs b/src/background/apis/openai-api.mjs index 409cb52..b459a55 100644 --- a/src/background/apis/openai-api.mjs +++ b/src/background/apis/openai-api.mjs @@ -1,6 +1,6 @@ // api version -import { maxResponseTokenLength, Models, getUserConfig } from '../../config' +import { maxResponseTokenLength, Models, getUserConfig } from '../../config/index.mjs' import { fetchSSE } from '../../utils/fetch-sse' import { getConversationPairs } from '../../utils/get-conversation-pairs' import { isEmpty } from 'lodash-es' diff --git a/src/background/index.mjs b/src/background/index.mjs index bcc8c9d..d887be2 100644 --- a/src/background/index.mjs +++ b/src/background/index.mjs @@ -9,12 +9,12 @@ import { import { chatgptApiModelKeys, chatgptWebModelKeys, + defaultConfig, getUserConfig, gptApiModelKeys, isUsingApiKey, -} from '../config' +} from '../config/index.mjs' import { isSafari } from '../utils/is-safari' -import { config as toolsConfig } from '../content-script/selection-tools' const KEY_ACCESS_TOKEN = 'accessToken' const cache = new ExpiryMap(10 * 1000) @@ -114,12 +114,13 @@ Browser.contextMenus.removeAll().then(() => { title: 'New Chat', contexts: ['selection'], }) - for (const key in toolsConfig) { - const toolConfig = toolsConfig[key] + for (const index in defaultConfig.selectionTools) { + const key = defaultConfig.selectionTools[index] + const desc = defaultConfig.selectionToolsDesc[index] Browser.contextMenus.create({ id: menuId + key, parentId: menuId, - title: toolConfig.label, + title: desc, contexts: ['selection'], }) } diff --git a/src/components/ConversationCard/index.jsx b/src/components/ConversationCard/index.jsx index 3007886..577fabd 100644 --- a/src/components/ConversationCard/index.jsx +++ b/src/components/ConversationCard/index.jsx @@ -10,7 +10,7 @@ import FileSaver from 'file-saver' import { render } from 'preact' import FloatingToolbar from '../FloatingToolbar' import { useClampWindowSize } from '../../hooks/use-clamp-window-size' -import { defaultConfig, getUserConfig } from '../../config' +import { defaultConfig, getUserConfig } from '../../config/index.mjs' const logo = Browser.runtime.getURL('logo.png') diff --git a/src/components/DecisionCard/index.jsx b/src/components/DecisionCard/index.jsx index 665d650..cd2dd46 100644 --- a/src/components/DecisionCard/index.jsx +++ b/src/components/DecisionCard/index.jsx @@ -2,7 +2,7 @@ import { LightBulbIcon, SearchIcon } from '@primer/octicons-react' import { useState, useEffect } from 'react' import PropTypes from 'prop-types' import ConversationCard from '../ConversationCard' -import { defaultConfig, getUserConfig } from '../../config' +import { defaultConfig, getUserConfig } from '../../config/index.mjs' import Browser from 'webextension-polyfill' import { getPossibleElementByQuerySelector, endsWithQuestionMark } from '../../utils' diff --git a/src/components/FloatingToolbar/index.jsx b/src/components/FloatingToolbar/index.jsx index 43a817c..897ed2d 100644 --- a/src/components/FloatingToolbar/index.jsx +++ b/src/components/FloatingToolbar/index.jsx @@ -2,7 +2,7 @@ import Browser from 'webextension-polyfill' import { cloneElement, useEffect, useState } from 'react' import ConversationCard from '../ConversationCard' import PropTypes from 'prop-types' -import { defaultConfig, getUserConfig } from '../../config.mjs' +import { defaultConfig, getUserConfig } from '../../config/index.mjs' import { config as toolsConfig } from '../../content-script/selection-tools' import { isMobile, setElementPositionInViewport } from '../../utils' import Draggable from 'react-draggable' diff --git a/src/config.mjs b/src/config/index.mjs similarity index 77% rename from src/config.mjs rename to src/config/index.mjs index f3a3b67..0c53bb0 100644 --- a/src/config.mjs +++ b/src/config/index.mjs @@ -1,8 +1,6 @@ import { defaults } from 'lodash-es' import Browser from 'webextension-polyfill' -import { isMobile } from './utils/is-mobile' -import { config as toolsConfig } from './content-script/selection-tools' -import { languages } from 'countries-list' +import { isMobile } from '../utils/is-mobile.mjs' /** * @typedef {object} Model @@ -37,8 +35,6 @@ export const ThemeMode = { auto: 'Auto', } -export const languageList = { auto: { name: 'Auto', native: 'Auto' }, ...languages } - export const maxResponseTokenLength = 1000 /** @@ -71,7 +67,7 @@ export const defaultConfig = { // others - activeSelectionTools: Object.keys(toolsConfig).filter((i) => i !== 'translateBidi'), + activeSelectionTools: ['translate', 'summary', 'polish', 'sentiment', 'divide', 'code', 'ask'], activeSiteAdapters: [ 'bilibili', 'github', @@ -88,7 +84,26 @@ export const defaultConfig = { // unchangeable userLanguage: navigator.language.substring(0, 2), - selectionTools: Object.keys(toolsConfig), + selectionTools: [ + 'translate', + 'translateBidi', + 'summary', + 'polish', + 'sentiment', + 'divide', + 'code', + 'ask', + ], + selectionToolsDesc: [ + 'Translate', + 'Translate (Bidirectional)', + 'Summary', + 'Polish', + 'Sentiment Analysis', + 'Divide Paragraphs', + 'Code Explain', + 'Ask', + ], // importing configuration will result in gpt-3-encoder being packaged into the output file siteAdapters: [ 'bilibili', @@ -102,26 +117,6 @@ export const defaultConfig = { ], } -export async function getUserLanguage() { - return languageList[defaultConfig.userLanguage].name -} - -export async function getUserLanguageNative() { - return languageList[defaultConfig.userLanguage].native -} - -export async function getPreferredLanguage() { - const config = await getUserConfig() - if (config.preferredLanguage === 'auto') return await getUserLanguage() - return languageList[config.preferredLanguage].name -} - -export async function getPreferredLanguageNative() { - const config = await getUserConfig() - if (config.preferredLanguage === 'auto') return await getUserLanguageNative() - return languageList[config.preferredLanguage].native -} - export function isUsingApiKey(config) { return ( gptApiModelKeys.includes(config.modelName) || chatgptApiModelKeys.includes(config.modelName) diff --git a/src/config/language.mjs b/src/config/language.mjs new file mode 100644 index 0000000..8e9d03c --- /dev/null +++ b/src/config/language.mjs @@ -0,0 +1,24 @@ +import { languages } from 'countries-list' +import { defaultConfig, getUserConfig } from './index.mjs' + +export const languageList = { auto: { name: 'Auto', native: 'Auto' }, ...languages } + +export async function getUserLanguage() { + return languageList[defaultConfig.userLanguage].name +} + +export async function getUserLanguageNative() { + return languageList[defaultConfig.userLanguage].native +} + +export async function getPreferredLanguage() { + const config = await getUserConfig() + if (config.preferredLanguage === 'auto') return await getUserLanguage() + return languageList[config.preferredLanguage].name +} + +export async function getPreferredLanguageNative() { + const config = await getUserConfig() + if (config.preferredLanguage === 'auto') return await getUserLanguageNative() + return languageList[config.preferredLanguage].native +} diff --git a/src/content-script/index.jsx b/src/content-script/index.jsx index 0dd8ba0..cd985e3 100644 --- a/src/content-script/index.jsx +++ b/src/content-script/index.jsx @@ -4,7 +4,7 @@ import { render } from 'preact' import DecisionCard from '../components/DecisionCard' import { config as siteConfig } from './site-adapters' import { config as toolsConfig } from './selection-tools' -import { clearOldAccessToken, getUserConfig, setAccessToken, getPreferredLanguage } from '../config' +import { clearOldAccessToken, getUserConfig, setAccessToken } from '../config/index.mjs' import { createElementAtPosition, getPossibleElementByQuerySelector, @@ -13,6 +13,7 @@ import { } from '../utils' import FloatingToolbar from '../components/FloatingToolbar' import Browser from 'webextension-polyfill' +import { getPreferredLanguage } from '../config/language.mjs' /** * @param {SiteConfig} siteConfig diff --git a/src/content-script/selection-tools/index.mjs b/src/content-script/selection-tools/index.mjs index 3b7fa07..4e50010 100644 --- a/src/content-script/selection-tools/index.mjs +++ b/src/content-script/selection-tools/index.mjs @@ -8,7 +8,7 @@ import { Braces, Globe, } from 'react-bootstrap-icons' -import { getPreferredLanguage } from '../../config.mjs' +import { getPreferredLanguage } from '../../config/language.mjs' export const config = { translate: { diff --git a/src/popup/Popup.jsx b/src/popup/Popup.jsx index 2b4eced..2f3b995 100644 --- a/src/popup/Popup.jsx +++ b/src/popup/Popup.jsx @@ -8,8 +8,7 @@ import { defaultConfig, Models, isUsingApiKey, - languageList, -} from '../config' +} from '../config/index.mjs' import { Tab, Tabs, TabList, TabPanel } from 'react-tabs' import 'react-tabs/style/react-tabs.css' import './styles.scss' @@ -18,8 +17,9 @@ import Browser from 'webextension-polyfill' import PropTypes from 'prop-types' import { config as toolsConfig } from '../content-script/selection-tools' import wechatpay from './donation/wechatpay.jpg' -import bugmeacoffee from './donation/bugmeacoffee.svg' +import bugmeacoffee from './donation/bugmeacoffee.png' import { useWindowTheme } from '../hooks/use-window-theme.mjs' +import { languageList } from '../config/language.mjs' function GeneralPart({ config, updateConfig }) { const [balance, setBalance] = useState(null) diff --git a/src/popup/donation/bugmeacoffee.png b/src/popup/donation/bugmeacoffee.png new file mode 100644 index 0000000000000000000000000000000000000000..748ed252a7fcd03cebdfb6e656094b9650eece69 GIT binary patch literal 5696 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 muFGXMX^enn}m`sp120000 - - - - - - - - - - - - - - - - - - - - - diff --git a/src/utils/crop-text.mjs b/src/utils/crop-text.mjs index a507d69..cb0ad82 100644 --- a/src/utils/crop-text.mjs +++ b/src/utils/crop-text.mjs @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -import { maxResponseTokenLength } from '../config.mjs' +import { maxResponseTokenLength } from '../config/index.mjs' import { encode } from '@nem035/gpt-3-encoder' // TODO add model support