aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/extension.yml22
-rw-r--r--apps/browser-extension/manifest.json3
-rw-r--r--apps/browser-extension/package.json2
-rw-r--r--apps/browser-extension/src/background/background.ts4
-rw-r--r--apps/browser-extension/vite.config.ts8
-rw-r--r--pnpm-lock.yaml121
6 files changed, 73 insertions, 87 deletions
diff --git a/.github/workflows/extension.yml b/.github/workflows/extension.yml
index 0fc8d6b7..4a037b12 100644
--- a/.github/workflows/extension.yml
+++ b/.github/workflows/extension.yml
@@ -15,12 +15,24 @@ jobs:
- name: Setup
uses: ./tooling/github/setup
- - name: Build the extension
+ - name: Build the extension (chrome)
working-directory: apps/browser-extension
- run: pnpm run build
+ run: pnpm run build --outDir dist-chrome
- - name: Upload Extension Archive
+ - name: Build the extension (firefox)
+ env:
+ VITE_BUILD_FIREFOX: true
+ working-directory: apps/browser-extension
+ run: pnpm run build --outDir dist-firefox
+
+ - name: Upload Extension Archive (chrome)
+ uses: actions/upload-artifact@v4
+ with:
+ name: hoarder-extension-chrome
+ path: apps/browser-extension/dist-chrome/*
+
+ - name: Upload Extension Archive (firefox)
uses: actions/upload-artifact@v4
with:
- name: hoarder-extension
- path: apps/browser-extension/dist/*
+ name: hoarder-extension-firefox
+ path: apps/browser-extension/dist-firefox/*
diff --git a/apps/browser-extension/manifest.json b/apps/browser-extension/manifest.json
index 4a21c424..fa82f3fa 100644
--- a/apps/browser-extension/manifest.json
+++ b/apps/browser-extension/manifest.json
@@ -12,7 +12,8 @@
"default_popup": "index.html"
},
"background": {
- "service_worker": "src/background/background.ts"
+ "service_worker": "src/background/background.ts",
+ "scripts": ["src/background/background.ts"]
},
"options_ui": {
"page": "index.html#options",
diff --git a/apps/browser-extension/package.json b/apps/browser-extension/package.json
index 7ede2c05..0e5d8166 100644
--- a/apps/browser-extension/package.json
+++ b/apps/browser-extension/package.json
@@ -39,7 +39,7 @@
"zod": "^3.22.4"
},
"devDependencies": {
- "@crxjs/vite-plugin": "^1.0.14",
+ "@crxjs/vite-plugin": "2.0.0-beta.25",
"@hoarder/eslint-config": "workspace:^0.2.0",
"@hoarder/prettier-config": "workspace:^0.1.0",
"@hoarder/tailwind-config": "workspace:^0.1.0",
diff --git a/apps/browser-extension/src/background/background.ts b/apps/browser-extension/src/background/background.ts
index cab58aa9..7622c07e 100644
--- a/apps/browser-extension/src/background/background.ts
+++ b/apps/browser-extension/src/background/background.ts
@@ -69,9 +69,11 @@ async function handleContextMenuClick(info: chrome.contextMenus.OnClickData) {
};
}
if (newBookmark) {
- await chrome.storage.session.set({
+ chrome.storage.session.set({
[NEW_BOOKMARK_REQUEST_KEY_NAME]: newBookmark,
});
+ // NOTE: Firefox only allows opening context menus if it's triggered by a user action.
+ // awaiting on any promise before calling this function will lose the "user action" context.
await chrome.action.openPopup();
}
}
diff --git a/apps/browser-extension/vite.config.ts b/apps/browser-extension/vite.config.ts
index 42ecc28d..37b92349 100644
--- a/apps/browser-extension/vite.config.ts
+++ b/apps/browser-extension/vite.config.ts
@@ -6,5 +6,11 @@ import manifest from "./manifest.json";
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [react(), crx({ manifest })],
+ plugins: [
+ react(),
+ crx({
+ manifest,
+ browser: process.env.VITE_BUILD_FIREFOX ? "firefox" : "chrome",
+ }),
+ ],
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 140ee5e5..f1fcf9a0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -72,7 +72,7 @@ importers:
version: 11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308)
'@trpc/next':
specifier: 11.0.0-next-beta.308
- version: 11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/react-query@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@11.0.0-next-beta.308)(next@14.1.4(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ version: 11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/react-query@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@11.0.0-next-beta.308)(next@14.1.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@trpc/react-query':
specifier: 11.0.0-next-beta.308
version: 11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -120,8 +120,8 @@ importers:
version: 3.22.4
devDependencies:
'@crxjs/vite-plugin':
- specifier: ^1.0.14
- version: 1.0.14(vite@5.1.4(@types/node@20.11.20))
+ specifier: 2.0.0-beta.25
+ version: 2.0.0-beta.25
'@hoarder/eslint-config':
specifier: workspace:^0.2.0
version: link:../../tooling/eslint
@@ -2025,11 +2025,8 @@ packages:
peerDependencies:
commander: ~12.0.0
- '@crxjs/vite-plugin@1.0.14':
- resolution: {integrity: sha512-emOueVCqFRFmpcfT80Xsm4mfuFw9VSp5GY4eh5qeLDeiP81g0hddlobVQCo0pE2ZvNnWbyhLrXEYAaMAXjNL6A==}
- engines: {node: '>=14'}
- peerDependencies:
- vite: ^2.9.0
+ '@crxjs/vite-plugin@2.0.0-beta.25':
+ resolution: {integrity: sha512-g5ytTNiFpFCi+T0trSDJLohVz5PufLBLh6OGljyGTHkQCKiApuEgZ1bAjgPXluMDhMUvbPfZT10LYl5ROefXog==}
'@dabh/diagnostics@2.0.3':
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
@@ -4139,18 +4136,6 @@ packages:
'@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
- '@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
-
- '@types/babel__generator@7.6.8':
- resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
-
- '@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
-
- '@types/babel__traverse@7.20.5':
- resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
-
'@types/bcryptjs@2.4.6':
resolution: {integrity: sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==}
@@ -4550,12 +4535,6 @@ packages:
peerDependencies:
vite: ^4 || ^5
- '@vitejs/plugin-react@4.2.1':
- resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- vite: ^4.2.0 || ^5.0.0
-
'@vitest/expect@1.3.1':
resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==}
@@ -10207,6 +10186,10 @@ packages:
q@1.5.1:
resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ deprecated: |-
+ You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
+ (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
qrcode-terminal@0.11.0:
resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==}
@@ -10747,6 +10730,11 @@ packages:
peerDependencies:
rollup: ^2.0.0
+ rollup@2.78.1:
+ resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
rollup@2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
@@ -10771,6 +10759,9 @@ packages:
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rxjs@7.5.7:
+ resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==}
+
safe-array-concat@1.1.0:
resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==}
engines: {node: '>=0.4'}
@@ -12679,6 +12670,7 @@ snapshots:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
+ dev: false
'@babel/generator@7.23.6':
dependencies:
@@ -12810,13 +12802,15 @@ snapshots:
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
+ dev: false
'@babel/helper-optimise-call-expression@7.22.5':
dependencies:
'@babel/types': 7.24.0
dev: false
- '@babel/helper-plugin-utils@7.24.0': {}
+ '@babel/helper-plugin-utils@7.24.0':
+ dev: false
'@babel/helper-plugin-utils@7.24.8':
dev: false
@@ -12894,6 +12888,7 @@ snapshots:
'@babel/types': 7.24.0
transitivePeerDependencies:
- supports-color
+ dev: false
'@babel/highlight@7.23.4':
dependencies:
@@ -13957,6 +13952,7 @@ snapshots:
dependencies:
'@babel/core': 7.24.0
'@babel/helper-plugin-utils': 7.24.0
+ dev: false
'@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9)':
dependencies:
@@ -13968,6 +13964,7 @@ snapshots:
dependencies:
'@babel/core': 7.24.0
'@babel/helper-plugin-utils': 7.24.0
+ dev: false
'@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9)':
dependencies:
@@ -14546,13 +14543,14 @@ snapshots:
commander: 12.0.0
dev: true
- '@crxjs/vite-plugin@1.0.14(vite@5.1.4(@types/node@20.11.20))':
+ '@crxjs/vite-plugin@2.0.0-beta.25':
dependencies:
'@rollup/pluginutils': 4.2.1
'@webcomponents/custom-elements': 1.6.0
acorn-walk: 8.3.2
cheerio: 1.0.0-rc.12
connect-injector: 0.4.4
+ convert-source-map: 1.9.0
debug: 4.3.4
es-module-lexer: 0.10.5
fast-glob: 3.3.2
@@ -14561,10 +14559,8 @@ snapshots:
magic-string: 0.26.7
picocolors: 1.0.0
react-refresh: 0.13.0
- rollup: 2.79.1
- vite: 5.1.4(@types/node@20.11.20)
- optionalDependencies:
- '@vitejs/plugin-react': 4.2.1(vite@5.1.4(@types/node@20.11.20))
+ rollup: 2.78.1
+ rxjs: 7.5.7
transitivePeerDependencies:
- supports-color
dev: true
@@ -17972,7 +17968,7 @@ snapshots:
dependencies:
'@trpc/server': 11.0.0-next-beta.308
- '@trpc/next@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/react-query@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@11.0.0-next-beta.308)(next@14.1.4(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
+ '@trpc/next@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/react-query@11.0.0-next-beta.308(@tanstack/react-query@5.24.8(react@18.2.0))(@trpc/client@11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308))(@trpc/server@11.0.0-next-beta.308)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@trpc/server@11.0.0-next-beta.308)(next@14.1.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@tanstack/react-query': 5.24.8(react@18.2.0)
'@trpc/client': 11.0.0-next-beta.308(@trpc/server@11.0.0-next-beta.308)
@@ -18003,35 +17999,6 @@ snapshots:
dependencies:
'@types/estree': 1.0.5
- '@types/babel__core@7.20.5':
- dependencies:
- '@babel/parser': 7.24.0
- '@babel/types': 7.24.0
- '@types/babel__generator': 7.6.8
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.20.5
- dev: true
- optional: true
-
- '@types/babel__generator@7.6.8':
- dependencies:
- '@babel/types': 7.24.0
- dev: true
- optional: true
-
- '@types/babel__template@7.4.4':
- dependencies:
- '@babel/parser': 7.24.0
- '@babel/types': 7.24.0
- dev: true
- optional: true
-
- '@types/babel__traverse@7.20.5':
- dependencies:
- '@babel/types': 7.24.0
- dev: true
- optional: true
-
'@types/bcryptjs@2.4.6':
dev: true
@@ -18594,19 +18561,6 @@ snapshots:
- '@swc/helpers'
dev: true
- '@vitejs/plugin-react@4.2.1(vite@5.1.4(@types/node@20.11.20))':
- dependencies:
- '@babel/core': 7.24.0
- '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.24.0)
- '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0)
- '@types/babel__core': 7.20.5
- react-refresh: 0.14.0
- vite: 5.1.4(@types/node@20.11.20)
- transitivePeerDependencies:
- - supports-color
- dev: true
- optional: true
-
'@vitest/expect@1.3.1':
dependencies:
'@vitest/spy': 1.3.1
@@ -20054,8 +20008,7 @@ snapshots:
content-type@1.0.5:
dev: false
- convert-source-map@1.9.0:
- dev: false
+ convert-source-map@1.9.0: {}
convert-source-map@2.0.0: {}
@@ -26799,7 +26752,8 @@ snapshots:
react-refresh@0.13.0:
dev: true
- react-refresh@0.14.0: {}
+ react-refresh@0.14.0:
+ dev: false
react-remove-scroll-bar@2.3.5(@types/react@18.2.58)(react@18.2.0):
dependencies:
@@ -27254,9 +27208,15 @@ snapshots:
terser: 5.28.1
dev: false
+ rollup@2.78.1:
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
rollup@2.79.1:
optionalDependencies:
fsevents: 2.3.3
+ dev: false
rollup@4.12.0:
dependencies:
@@ -27296,6 +27256,11 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
+ rxjs@7.5.7:
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
safe-array-concat@1.1.0:
dependencies:
call-bind: 1.0.7