You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Move the generic extractor out of event-extractors/
extension/event-extractors/ is the extensibility point for PER-SITE
extractors. The generic extractor is a fundamentally different thing — one
fixed, site-agnostic reader that every per-site extractor layers over, not
another entry in the set — so it doesn't belong in that folder:
event-extractors/core/generic.js -> generic-extractor.js
event-extractors/core/generic-sites.js -> generic-sites.js
Both now sit at the extension root beside config.js / fallback-policy.js, and
event-extractors/ holds only the pipeline's own registry/orchestrator/helpers
and the custom/ sources.
The load-order generator emits extension-root-relative paths throughout (it
already did for the output) and pins the two generic files by name, since
they're the only injected files outside that folder; the ordering rule is
unchanged, with generic-sites.js still pinned behind every custom source so a
dedicated source always wins the host match.
Also added the two files to the release shipping set — the zip guard caught
their absence, since it was keyed on the event-extractors/ directory entry.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VE29ox6D2VwKLJJEy4bmfy
Copy file name to clipboardExpand all lines: dev/procedures/fileDescriptions.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,8 @@ extension does.
17
17
|`extension/icon/toolbar-icon.js`| Background service worker: registers `chrome.declarativeContent` rules (from `fallback-lists.json`) so the browser colors the toolbar icon by host pattern — green on supported hosts, gray on denylisted ones, blue elsewhere — without the extension reading any tab URL |
18
18
|`extension/event-extractors/registry.js`| Bootstraps `GCal`, the `GCal.sources` registry, and `isSupportedHost`|
19
19
|`extension/event-extractors/helpers/`| Shared utilities any extractor may use, split by concern: DOM, text (rich-text/`htmlToText`/`parts`), dates, timezones, timezone-names, merge, and `embedded-events` (the `GCal.embeddedEvents` schema.org JSON-LD reader) |
20
-
|`extension/event-extractors/core/generic.js`|`GCal.genericExtractor`: THE core generic extractor, run on every page — best-effort event (embedded JSON-LD + generic heuristics over meta tags, microdata, `<time>`, and visible text). It is the base layer every per-site source overrides, the only extractor on an unsupported host, and the whole of the support for a `generic-sites.js` host |
21
-
|`extension/event-extractors/core/generic-sites.js`| The hosts fully covered by `core/generic.js` alone — each registers a `matches`-only source, so the host is supported with no per-site file. Loaded after `custom/` so a dedicated source always wins the match |
20
+
|`extension/generic-extractor.js`|`GCal.genericExtractor`: THE core generic extractor, run on every page — best-effort event (embedded JSON-LD + generic heuristics over meta tags, microdata, `<time>`, and visible text). It is the base layer every per-site source overrides, the only extractor on an unsupported host, and the whole of the support for a `generic-sites.js` host |
21
+
|`extension/generic-sites.js`| The hosts fully covered by `generic-extractor.js` alone — each registers a `matches`-only source, so the host is supported with no per-site file. Loaded after `custom/` so a dedicated source always wins the match |
22
22
|`extension/event-extractors/custom/meetup.js`, `eventbrite.js`, `edinburghfringe.js`, `telavivcinematheque.js`, `ticketmaster.js`, … | One per site the generic extractor gets wrong: hardcoded selectors + inline host matcher, stating ONLY the fields it overrides (or its own enumerated `events`) |
23
23
|`extension/events-popup/build-calendar-url.js`| Builds the pre-filled Google Calendar template URL (incl. markdown→HTML for details) |
24
24
|`extension/event-extractors/assemble-events.js`| Orchestrator `GCal.extract()`: runs the core generic extractor for the base events and merges the matched site source's overrides over them; normalizes/sorts events and reports `supported` + `fallback`|
0 commit comments