{"id":20544553,"url":"https://github.com/merlin04/bandcamp","last_synced_at":"2026-02-05T22:01:21.383Z","repository":{"id":93387101,"uuid":"456585200","full_name":"Merlin04/bandcamp","owner":"Merlin04","description":null,"archived":false,"fork":false,"pushed_at":"2022-04-16T23:04:51.000Z","size":776,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-08T03:41:24.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Merlin04.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-07T16:25:29.000Z","updated_at":"2024-08-09T07:34:03.000Z","dependencies_parsed_at":"2023-03-06T03:45:16.276Z","dependency_job_id":null,"html_url":"https://github.com/Merlin04/bandcamp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"antfu-collective/vitesse-webext","purl":"pkg:github/Merlin04/bandcamp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merlin04%2Fbandcamp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merlin04%2Fbandcamp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merlin04%2Fbandcamp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merlin04%2Fbandcamp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Merlin04","download_url":"https://codeload.github.com/Merlin04/bandcamp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Merlin04%2Fbandcamp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29135918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T21:59:57.939Z","status":"ssl_error","status_checked_at":"2026-02-05T21:59:57.628Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T01:47:37.257Z","updated_at":"2026-02-05T22:01:21.244Z","avatar_url":"https://github.com/Merlin04.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bandcamp Collector\n\n(WORK IN PROGRESS)\n\nWeb extension to add an alternative player UI to Bandcamp album pages, allowing you to easily save albums to your library, navigate between albums in a single page app, and avoid some of Bandcamp's jank\n\n### Ok that's cool and all but what is this horrendous bundling system\n\nI got tired of Vite taking 25 seconds to bundle the content script and all of its dependencies every time I changed a file, so I spent multiple days creating this. Dependencies are bundled (supposedly) whenever `package.json` changes using [a complicated Rollup config](rollup.config.content.deps.ts), sending each module into a separate JS file (`/modules/[module name].js`, kind of like `node_modules`) and Babel transpiles the actual content script code whenever that changes, using a custom Babel plugin to transform imports to use the new `modules` folder. \n\nAlso, content scripts don't support ES Modules so Babel and Rollup are outputting SystemJS modules, and [I completely rewrote the SystemJS loader](extension/assets/index.js) to work in a web extension content script\n\nI am sorry\n\n## Instructions for the firefox addon reviewer person\n\n**Your source code must include:**\n\n- **Step-by-step build instructions to create an exact copy of the add-on code, in a README file in your source code or in the reviewer notes on the next page.**\n  \n  1. `yarn`\n  2. `yarn build`\n  3. `yarn pack:xpi`\n- **A build script that executes all necessary technical steps.**\n\n  (scripts in the package.json, unfortunately there are some manual steps to build)\n- Operating system and build environment requirements.\n  \n  Any OS with a properly configured yarn/node should work, I'm on Ubuntu 20.04\n- The required version and installation instructions of any programs used in the build process (such as node and npm).\n  \n  - [Yarn v1](https://classic.yarnpkg.com/en/docs/install#windows-stable): I have 1.22.5, that or any newer version should work\n  - [Node.js](https://nodejs.org/en/): I have 16.14.0, but any newer should work\n\n\n\n# `vitesse-webext` stuff\nLots of this doesn't apply anymore since I stripped out Vue and have the weird bundling system\n\n# WebExtension Vite Starter\n\nA [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.chrome.com/docs/extensions/reference/), [FireFox](https://addons.mozilla.org/en-US/developers/), etc.) starter template.\n\n\u003cp align=\"center\"\u003e\n\u003csub\u003ePopup\u003c/sub\u003e\u003cbr/\u003e\n\u003cimg width=\"655\" src=\"https://user-images.githubusercontent.com/11247099/126741643-813b3773-17ff-4281-9737-f319e00feddc.png\"\u003e\u003cbr/\u003e\n\u003csub\u003eOptions Page\u003c/sub\u003e\u003cbr/\u003e\n\u003cimg width=\"655\" src=\"https://user-images.githubusercontent.com/11247099/126741653-43125b62-6578-4452-83a7-bee19be2eaa2.png\"\u003e\u003cbr/\u003e\n\u003csub\u003eInject Vue App into the Content Script\u003c/sub\u003e\u003cbr/\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/11247099/130695439-52418cf0-e186-4085-8e19-23fe808a274e.png\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- ⚡️ **Instant HMR** - use **Vite** on dev (no more refresh!)\n- 🥝 Vue 3 - Composition API, [`\u003cscript setup\u003e` syntax](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0040-script-setup.md) and more!\n- 💬 Effortless communications - powered by [`webext-bridge`](https://github.com/antfu/webext-bridge) and [VueUse](https://github.com/antfu/vueuse) storage\n- 🍃 [Windi CSS](https://windicss.org/) - on-demand CSS utilities\n- 🦾 [TypeScript](https://www.typescriptlang.org/) - type safe\n- 📦 [Components auto importing](./src/components)\n- 🌟 [Icons](./src/components) - Access to icons from any iconset directly\n- 🖥 Content Script - Use Vue even in content script\n- 🌍 WebExtension - isomorphic extension for Chrome, Firefox, and others\n- 📃 Dynamic `manifest.json` with full type support\n\n## Pre-packed\n\n### WebExtension Libraries\n\n- [`webextension-polyfill`](https://github.com/mozilla/webextension-polyfill) - WebExtension browser API Polyfill with types\n- [`webext-bridge`](https://github.com/antfu/webext-bridge) - effortlessly communication between contexts\n\n### Vite Plugins\n\n- [`unplugin-auto-import`](https://github.com/antfu/unplugin-auto-import) - Directly use `browser` and Vue Composition API without importing\n- [`unplugin-vue-components`](https://github.com/antfu/vite-plugin-components) - components auto import\n- [`unplugin-icons`](https://github.com/antfu/unplugin-icons) - icons as components\n  - [Iconify](https://iconify.design) - use icons from any icon sets [🔍Icônes](https://icones.netlify.app/)\n- [`vite-plugin-windicss`](https://github.com/antfu/vite-plugin-windicss) - WindiCSS support\n\n### Vue Plugins\n\n- [VueUse](https://github.com/antfu/vueuse) - collection of useful composition APIs\n\n### UI Frameworks\n\n- [Windi CSS](https://github.com/windicss/windicss) - next generation utility-first CSS framework\n\n### Coding Style\n\n- Use Composition API with [`\u003cscript setup\u003e` SFC syntax](https://github.com/vuejs/rfcs/pull/227)\n- [ESLint](https://eslint.org/) with [@antfu/eslint-config](https://github.com/antfu/eslint-config), single quotes, no semi\n\n### Dev tools\n\n- [TypeScript](https://www.typescriptlang.org/)\n- [pnpm](https://pnpm.js.org/) - fast, disk space efficient package manager\n- [esno](https://github.com/antfu/esno) - TypeScript / ESNext node runtime powered by esbuild\n- [npm-run-all](https://github.com/mysticatea/npm-run-all) - Run multiple npm-scripts in parallel or sequential\n- [web-ext](https://github.com/mozilla/web-ext) - Streamlined experience for developing web extensions\n\n## Use the Template\n\n### GitHub Template\n\n[Create a repo from this template on GitHub](https://github.com/antfu/vitesse-webext/generate).\n\n### Clone to local\n\nIf you prefer to do it manually with the cleaner git history\n\n\u003e If you don't have pnpm installed, run: npm install -g pnpm\n\n```bash\nnpx degit antfu/vitesse-webext my-webext\ncd my-webext\npnpm i\n```\n\n## Usage\n\n### Folders\n\n- `src` - main source.\n  - `contentScript` - scripts and components to be injected as `content_script`\n  - `background` - scripts for background.\n  - `components` - auto-imported Vue components that shared in popup and options page.\n  - `styles` - styles shared in popup and options page\n  - `manifest.ts` - manifest for the extension.\n- `extension` - extension package root.\n  - `assets` - static assets.\n  - `dist` - built files, also serve stub entry for Vite on development.\n- `scripts` - development and bundling helper scripts.\n\n### Development\n\n```bash\npnpm dev\n```\n\nThen **load extension in browser with the `extension/` folder**.\n\nFor Firefox developers, you can run the following command instead:\n\n```bash\npnpm start:firefox\n```\n\n`web-ext` auto reload the extension when `extension/` files changed.\n\n\u003e While Vite handles HMR automatically in the most of the case, [Extensions Reloader](https://chrome.google.com/webstore/detail/fimgfedafeadlieiabdeeaodndnlbhid) is still recommanded for cleaner hard reloading.\n\n### Build\n\nTo build the extension, run\n\n```bash\npnpm build\n```\n\nAnd then pack files under `extension`, you can upload `extension.crx` or `extension.xpi` to appropriate extension store.\n\n## Credits\n\n![](https://user-images.githubusercontent.com/11247099/127029137-6b5ad5db-76c4-4061-86ff-489911a8adfb.png)\n\nThis template is originally made for the [volta.net](https://volta.net) browser extension.\n\n## Variations\n\nThis is a variant of [Vitesse](https://github.com/antfu/vitesse), check out the [full variations list](https://github.com/antfu/vitesse#variations).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerlin04%2Fbandcamp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerlin04%2Fbandcamp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerlin04%2Fbandcamp/lists"}