mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 06:52:20 +02:00
The email library was 11,375 lines in one file, the second-largest JS module in the repo. `static/js/emailLibrary/` already held four extracted helpers, so the package existed; the bulk of the code just was not in it. The implementation moves to `emailLibrary/index.js` and the old path becomes a re-export wrapper. Five call sites import that path, four of them dynamically with a `?v=` string, and `sw.js` caches URLs verbatim, so a wrapper is what makes the move need no coordinated edit to any of them. The test side is the part worth reviewing. 58 tests read `static/js/emailLibrary.js` as text. Pointing them at `emailLibrary/index.js` would buy one move and break again on the next one, which is exactly what happened to the stylesheet tests (they now go through `tests/helpers/stylesheets.py`). So the same shape: `tests/helpers/js_modules.py` reads the whole package, and assertions stop caring which module a function sits in. `tests/test_email_library_module_graph_js.py` is new. This frontend has no module-graph validation, and a package fails in ways a single file cannot: a wrapper that drops an export is `undefined` at call time rather than an error at load time, and a module that reads a `const` across an import cycle throws only when that module is entered first. It pins the wrapper's surface against the entry module's, evaluates every module on its own in a browser, and requires both import paths to hand out one instance. It also caught a live gap while being written: `emailLibrary/replyRecipients.js` is imported by `emailInbox.js`, an app shell module, and was never in the `sw.js` precache.
27 lines
991 B
JavaScript
27 lines
991 B
JavaScript
// static/js/emailLibrary.js — compatibility wrapper.
|
|
//
|
|
// The email library now lives in `static/js/emailLibrary/`. This file stays at
|
|
// the old path because five call sites import it, four of them dynamically
|
|
// with a version query string (`emailInbox.js`, `chatStream.js`,
|
|
// `chatRenderer.js`, `document.js`, `settings.js`), and `sw.js` caches URLs
|
|
// verbatim. Re-exporting here means the move needed no coordinated edit to any
|
|
// of them.
|
|
//
|
|
// Importing this module evaluates `emailLibrary/index.js`, so the side effects
|
|
// the panel relies on — the `window.__odysseusGetActiveEmailContext` bridge,
|
|
// the agent tool-output listeners — still happen exactly when they used to.
|
|
//
|
|
// New code should import `./emailLibrary/index.js` directly.
|
|
|
|
export {
|
|
refreshEmailLibrary,
|
|
prewarmEmailLibrary,
|
|
prewarmUnreadEmails,
|
|
initEmailLibrary,
|
|
isOpen,
|
|
openEmailLibrary,
|
|
mountEmailSettings,
|
|
openEmailLibrarySettings,
|
|
closeEmailLibrary,
|
|
} from './emailLibrary/index.js';
|