A fast, local-first "redirection engine" for !bang users with a few extra features ^-^

feat: minify favicon and remove inter dependency

dunkirk.sh ef4081ab 247d99b6

verified
+103 -67
+11 -11
bun.lock
··· 4 "": { 5 "name": "unduck", 6 "dependencies": { 7 - "@fontsource/inter": "^5.2.5", 8 }, 9 "devDependencies": { 10 - "@types/bun": "^1.2.4", 11 - "typescript": "~5.7.2", 12 - "vite": "^6.1.0", 13 - "vite-plugin-pwa": "^0.21.1", 14 }, 15 }, 16 }, ··· 245 246 "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.0", "", { "os": "win32", "cpu": "x64" }, "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ=="], 247 248 - "@fontsource/inter": ["@fontsource/inter@5.2.6", "", {}, "sha512-CZs9S1CrjD0jPwsNy9W6j0BhsmRSQrgwlTNkgQXTsAeDRM42LBRLo3eo9gCzfH4GvV7zpyf78Ozfl773826csw=="], 249 - 250 "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], 251 252 "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], ··· 309 310 "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], 311 312 - "@types/bun": ["@types/bun@1.2.20", "", { "dependencies": { "bun-types": "1.2.20" } }, "sha512-dX3RGzQ8+KgmMw7CsW4xT5ITBSCrSbfHc36SNT31EOUg/LA9JWq0VDdEXDRSe1InVWpd2yLUM1FUF/kEOyTzYA=="], 313 314 "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], 315 ··· 353 354 "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], 355 356 - "bun-types": ["bun-types@1.2.20", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-pxTnQYOrKvdOwyiyd/7sMt9yFOenN004Y6O4lCcCUoKVej48FS5cvTw9geRaEcB9TsDZaJKAxPTVvi8tFsVuXA=="], 357 358 "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], 359 ··· 361 362 "call-bound": ["call-bound@1.0.3", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA=="], 363 364 - "caniuse-lite": ["caniuse-lite@1.0.30001701", "", {}, "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw=="], 365 366 "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 367 ··· 725 726 "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], 727 728 - "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], 729 730 "vite-plugin-pwa": ["vite-plugin-pwa@0.21.2", "", { "dependencies": { "debug": "^4.3.6", "pretty-bytes": "^6.1.1", "tinyglobby": "^0.2.10", "workbox-build": "^7.3.0", "workbox-window": "^7.3.0" }, "peerDependencies": { "@vite-pwa/assets-generator": "^0.2.6", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@vite-pwa/assets-generator"] }, "sha512-vFhH6Waw8itNu37hWUJxL50q+CBbNcMVzsKaYHQVrfxTt3ihk3PeLO22SbiP1UNWzcEPaTQv+YVxe4G0KOjAkg=="], 731 ··· 788 "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 789 790 "@rollup/pluginutils/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], 791 792 "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], 793
··· 4 "": { 5 "name": "unduck", 6 "dependencies": { 7 + "caniuse-lite": "^1.0.30001750", 8 }, 9 "devDependencies": { 10 + "@types/bun": "^1.2.20", 11 + "typescript": "~5.7.3", 12 + "vite": "^6.3.5", 13 + "vite-plugin-pwa": "^0.21.2", 14 }, 15 }, 16 }, ··· 245 246 "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.0", "", { "os": "win32", "cpu": "x64" }, "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ=="], 247 248 "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], 249 250 "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], ··· 307 308 "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], 309 310 + "@types/bun": ["@types/bun@1.3.0", "", { "dependencies": { "bun-types": "1.3.0" } }, "sha512-+lAGCYjXjip2qY375xX/scJeVRmZ5cY0wyHYyCYxNcdEXrQ4AOe3gACgd4iQ8ksOslJtW4VNxBJ8llUwc3a6AA=="], 311 312 "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], 313 ··· 351 352 "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], 353 354 + "bun-types": ["bun-types@1.3.0", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ=="], 355 356 "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], 357 ··· 359 360 "call-bound": ["call-bound@1.0.3", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA=="], 361 362 + "caniuse-lite": ["caniuse-lite@1.0.30001750", "", {}, "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ=="], 363 364 "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 365 ··· 723 724 "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], 725 726 + "vite": ["vite@6.3.6", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA=="], 727 728 "vite-plugin-pwa": ["vite-plugin-pwa@0.21.2", "", { "dependencies": { "debug": "^4.3.6", "pretty-bytes": "^6.1.1", "tinyglobby": "^0.2.10", "workbox-build": "^7.3.0", "workbox-window": "^7.3.0" }, "peerDependencies": { "@vite-pwa/assets-generator": "^0.2.6", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@vite-pwa/assets-generator"] }, "sha512-vFhH6Waw8itNu37hWUJxL50q+CBbNcMVzsKaYHQVrfxTt3ihk3PeLO22SbiP1UNWzcEPaTQv+YVxe4G0KOjAkg=="], 729 ··· 786 "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 787 788 "@rollup/pluginutils/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], 789 + 790 + "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001701", "", {}, "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw=="], 791 792 "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], 793
+47 -1
index.html
··· 10 href="/opensearch.xml" 11 /> 12 <style> 13 :root { 14 /* Light mode colors */ 15 --text-color: #1a1a1a; 16 --text-color-secondary: #666; ··· 19 --bg-color-secondary: #f5f5f5; 20 --bg-color-hover: #f0f0f0; 21 --bg-color-active: #e5e5e5; 22 --border-color: #ddd; 23 } 24 ··· 31 --bg-color-secondary: #1e1e1e; 32 --bg-color-hover: #2a2a2a; 33 --bg-color-active: #333; 34 --border-color: #444; 35 } 36 } ··· 39 margin: 0; 40 padding: 0; 41 box-sizing: border-box; 42 } 43 44 body { 45 - font-family: system-ui, sans-serif; 46 line-height: 1.5; 47 color: var(--text-color); 48 background-color: var(--bg-color); 49 } 50 51 input { 52 padding: 8px 12px; 53 border: 1px solid var(--border-color); 54 border-radius: 4px;
··· 10 href="/opensearch.xml" 11 /> 12 <style> 13 + /* Font fallback that closely matches Inter metrics */ 14 + @font-face { 15 + font-family: "Inter Fallback"; 16 + size-adjust: 107%; 17 + ascent-override: 90%; 18 + src: local("Arial"); 19 + font-display: swap; 20 + } 21 + 22 :root { 23 + font-family: 24 + Inter, 25 + "Inter Fallback", 26 + system-ui, 27 + -apple-system, 28 + BlinkMacSystemFont, 29 + "Segoe UI", 30 + Roboto, 31 + Oxygen, 32 + Ubuntu, 33 + Cantarell, 34 + "Open Sans", 35 + "Helvetica Neue", 36 + sans-serif; 37 + font-synthesis: none; 38 + text-rendering: optimizeLegibility; 39 + -webkit-font-smoothing: antialiased; 40 + -moz-osx-font-smoothing: grayscale; 41 + 42 /* Light mode colors */ 43 --text-color: #1a1a1a; 44 --text-color-secondary: #666; ··· 47 --bg-color-secondary: #f5f5f5; 48 --bg-color-hover: #f0f0f0; 49 --bg-color-active: #e5e5e5; 50 + --bg-color-danger: #e9808a; 51 --border-color: #ddd; 52 } 53 ··· 60 --bg-color-secondary: #1e1e1e; 61 --bg-color-hover: #2a2a2a; 62 --bg-color-active: #333; 63 + --bg-color-danger: #f15f6d; 64 --border-color: #444; 65 } 66 } ··· 69 margin: 0; 70 padding: 0; 71 box-sizing: border-box; 72 + outline: none; 73 + } 74 + *:focus { 75 + outline: 2px solid var(--text-color-secondary); 76 + } 77 + 78 + html, body { 79 + height: 100%; 80 + width: 100%; 81 } 82 83 body { 84 line-height: 1.5; 85 + font-weight: 400; 86 + font-size: 16px; 87 color: var(--text-color); 88 background-color: var(--bg-color); 89 } 90 91 + #app { 92 + min-height: 100vh; 93 + background-color: var(--bg-color); 94 + } 95 + 96 input { 97 + margin: 2px 0px !important; 98 padding: 8px 12px; 99 border: 1px solid var(--border-color); 100 border-radius: 4px;
+20 -20
package.json
··· 1 { 2 - "name": "unduck", 3 - "private": true, 4 - "version": "0.0.0", 5 - "type": "module", 6 - "scripts": { 7 - "dev": "bunx --bun vite", 8 - "build": "bunx --bun vite build", 9 - "preview": "bunx --bun vite preview", 10 - "hash": "bun run src/bangs/hashbanggen.ts", 11 - "check": "bun run src/bangs/test-bangs.ts" 12 - }, 13 - "devDependencies": { 14 - "typescript": "~5.7.3", 15 - "vite": "^6.3.5", 16 - "@types/bun": "^1.2.20", 17 - "vite-plugin-pwa": "^0.21.2" 18 - }, 19 - "dependencies": { 20 - "@fontsource/inter": "^5.2.6" 21 - } 22 }
··· 1 { 2 + "name": "unduckified", 3 + "private": true, 4 + "version": "0.3.0", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "bunx --bun vite", 8 + "build": "bunx --bun vite build", 9 + "preview": "bunx --bun vite preview", 10 + "hash": "bun run src/bangs/hashbanggen.ts", 11 + "check": "bun run src/bangs/test-bangs.ts" 12 + }, 13 + "devDependencies": { 14 + "typescript": "~5.7.3", 15 + "vite": "^6.3.6", 16 + "@types/bun": "^1.3.0", 17 + "vite-plugin-pwa": "^0.21.2" 18 + }, 19 + "dependencies": { 20 + "caniuse-lite": "^1.0.30001750" 21 + } 22 }
public/goose.gif

This is a binary file and will not be displayed.

-11
src/global.css
··· 1 - /* Font fallback that closely matches Inter metrics */ 2 - @font-face { 3 - font-family: "Inter Fallback"; 4 - size-adjust: 107%; 5 - ascent-override: 90%; 6 - src: local("Arial"); 7 - } 8 - 9 :root { 10 font-family: 11 - Inter, 12 - "Inter Fallback", 13 system-ui, 14 -apple-system, 15 BlinkMacSystemFont, ··· 18 Oxygen, 19 Ubuntu, 20 Cantarell, 21 - "Open Sans", 22 "Helvetica Neue", 23 sans-serif; 24 font-synthesis: none;
··· 1 :root { 2 font-family: 3 system-ui, 4 -apple-system, 5 BlinkMacSystemFont, ··· 8 Oxygen, 9 Ubuntu, 10 Cantarell, 11 "Helvetica Neue", 12 sans-serif; 13 font-synthesis: none;
+24 -23
src/main.ts
··· 1 import { bangs } from "./bangs/hashbang.ts"; 2 import { 3 addToSearchHistory, ··· 7 storage, 8 } from "./libs.ts"; 9 10 - import "@fontsource/inter/latin-400.css"; 11 - import "@fontsource/inter/latin-500.css"; 12 - import "@fontsource/inter/latin-600.css"; 13 - import "@fontsource/inter/latin-700.css"; 14 - import "./global.css"; 15 import notFoundPageRender from "./404.ts"; 16 17 export const CONSTANTS = { ··· 528 return null; 529 } 530 531 - const count = ( 532 - Number.parseInt( 533 - storage.get(CONSTANTS.LOCAL_STORAGE_KEYS.SEARCH_COUNT) || "0", 534 - ) + 1 535 - ).toString(); 536 - storage.set(CONSTANTS.LOCAL_STORAGE_KEYS.SEARCH_COUNT, count); 537 - 538 const match = query.toLowerCase().match(/^!(\S+)|!(\S+)$/i); 539 const selectedBang = match 540 ? customBangs[match[1] || match[2]] || bangs[match[1] || match[2]] ··· 548 return ensureProtocol(selectedBang.d); 549 } 550 551 - if ( 552 - storage.get(CONSTANTS.LOCAL_STORAGE_KEYS.HISTORY_ENABLED) === "true" 553 - ) { 554 - addToSearchHistory(cleanQuery, { 555 - bang: selectedBang?.t || "", 556 - name: selectedBang?.s || "", 557 - url: selectedBang?.u || "", 558 - }); 559 - } 560 - 561 - return selectedBang?.u.replace( 562 "{{{s}}}", 563 encodeURIComponent(cleanQuery).replace(/%2F/g, "/"), 564 ); 565 } 566 default: 567 notFoundPageRender();
··· 1 + import "./global.css"; 2 import { bangs } from "./bangs/hashbang.ts"; 3 import { 4 addToSearchHistory, ··· 8 storage, 9 } from "./libs.ts"; 10 11 import notFoundPageRender from "./404.ts"; 12 13 export const CONSTANTS = { ··· 524 return null; 525 } 526 527 const match = query.toLowerCase().match(/^!(\S+)|!(\S+)$/i); 528 const selectedBang = match 529 ? customBangs[match[1] || match[2]] || bangs[match[1] || match[2]] ··· 537 return ensureProtocol(selectedBang.d); 538 } 539 540 + const redirectUrl = selectedBang?.u.replace( 541 "{{{s}}}", 542 encodeURIComponent(cleanQuery).replace(/%2F/g, "/"), 543 ); 544 + 545 + // Do these operations after determining redirect URL to minimize delay 546 + setTimeout(() => { 547 + const count = ( 548 + Number.parseInt( 549 + storage.get(CONSTANTS.LOCAL_STORAGE_KEYS.SEARCH_COUNT) || "0", 550 + ) + 1 551 + ).toString(); 552 + storage.set(CONSTANTS.LOCAL_STORAGE_KEYS.SEARCH_COUNT, count); 553 + 554 + if ( 555 + storage.get(CONSTANTS.LOCAL_STORAGE_KEYS.HISTORY_ENABLED) === "true" 556 + ) { 557 + addToSearchHistory(cleanQuery, { 558 + bang: selectedBang?.t || "", 559 + name: selectedBang?.s || "", 560 + url: selectedBang?.u || "", 561 + }); 562 + } 563 + }, 0); 564 + 565 + return redirectUrl; 566 } 567 default: 568 notFoundPageRender();
+1 -1
vite.config.ts
··· 6 VitePWA({ 7 registerType: "autoUpdate", 8 workbox: { 9 - globPatterns: ["**/*.{js,css,html}", "assets/inter*.woff2"], 10 maximumFileSizeToCacheInBytes: 3 * 1048576, 11 }, 12 }),
··· 6 VitePWA({ 7 registerType: "autoUpdate", 8 workbox: { 9 + globPatterns: ["**/*.{js,css,html}"], 10 maximumFileSizeToCacheInBytes: 3 * 1048576, 11 }, 12 }),