Initial scaffold: Beat Pocket MV3 extension
- manifest.json with MV3 config, host permissions for beat-battle.net - content/detector.ts: route + overlay observer, emits bbp:phase events - content/layout.ts: defensive mobile-first layout reflow - content/chat-drawer.ts: bottom-sheet drawer, dispatches synthetic events through site's own React-managed textarea + button (preserves auth, rate-limit, mute, profanity guards) - content/util/selectors.ts: text- and role-based fallback chain - content/util/ws-proxy.ts: lightweight WebSocket instrumentation, no payload capture - content/inject.css: mobile overrides using site's existing --bb-* vars - background.js: MV3 service worker stub - package.json + tsconfig.json + esbuild.config.mjs: build pipeline - icons/: 16/32/48/128 placeholder PNGs (chili-red disc) - docs/PLAN.md: full V1 architecture, risks, scope - README.md: scope, dev workflow (load unpacked), tech
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
// esbuild config — bundles TS entry to a single content script
|
||||
import * as esbuild from 'esbuild';
|
||||
import { existsSync, mkdirSync } from 'node:fs';
|
||||
|
||||
const isWatch = process.argv.includes('--watch');
|
||||
const outdir = 'dist/content';
|
||||
|
||||
if (!existsSync(outdir)) mkdirSync(outdir, { recursive: true });
|
||||
|
||||
const ctx = await esbuild.context({
|
||||
entryPoints: ['extension/content/index.ts'],
|
||||
bundle: true,
|
||||
format: 'iife',
|
||||
target: 'chrome109',
|
||||
outfile: `${outdir}/index.js`,
|
||||
sourcemap: 'linked',
|
||||
logLevel: 'info',
|
||||
banner: { js: '/* Beat Pocket content script */' },
|
||||
});
|
||||
|
||||
if (isWatch) {
|
||||
await ctx.watch();
|
||||
console.log('esbuild watching…');
|
||||
} else {
|
||||
const r = await ctx.rebuild();
|
||||
await ctx.dispose();
|
||||
if (r.errors.length) process.exit(1);
|
||||
console.log('build complete');
|
||||
}
|
||||
Reference in New Issue
Block a user