* feat(route/sjtu): add CS school academic activities
* refactor(route/sjtu/cs/xshd): use JSX for description and respect dedicated item fields
- Switch to .tsx with renderToString (Rule 25)
- Move 时间→pubDate (with HH:mm), 报告人→author, 封面→image (Rule 11)
- Drop hand-written referrerpolicy attributes (Rule 39)
- pubDate now preserves hour/minute when source provides it
* fix(route/sjtu/cs/xshd): separate publish date from event time
- pubDate now reflects announcement publish date:
- in-site articles: detail page 发布日期 (authoritative)
- WeChat-redirect items: extracted from image URL path /upload/image/YYYYMMDD/
- 举办时间 (event time) moved back into description (no longer duplicates pubDate)
* fix(route/sjtu/cs/xshd): remove manual title trimming (Rule 16)
* fix(route/sjtu/cs/xshd): address review comments
- Use response URL to detect WeChat redirect
- Fetch WeChat MP content via fetchArticle
- Remove try-catch around detail requests
- Remove dangerouslySetInnerHTML from JSX rendering
* fix(route/sjtu/cs/xshd): use ofetch consistently
* fix(route/sjtu/cs/xshd): fallback on WeChat MP WAF errors
* fix(route/sjtu/cs/xshd): fallback when detail enrichment fails
The route enriches list items by fetching detail pages, but some SJTU
detail URLs are redirect stubs to WeChat MP. In CI, those intermediate
detail requests can fail with no response before the route reaches the
WeChat MP parser, causing Promise.all to reject and the whole feed to
return 503.
Switch detail enrichment aggregation from Promise.all to
Promise.allSettled and fall back to list-page metadata for only the
failed item. Successful items are still enriched with in-site article
content or WeChat MP content.
This follows the existing resilient detail-fetching pattern in
lib/routes/usenix/usenix.ts and keeps the scoped WeChatMpError fallback
around fetchArticle(), similar to lib/routes/wechat/sogou.ts.
|
||
|---|---|---|
| .. | ||
| api | ||
| assets | ||
| errors | ||
| middleware | ||
| routes | ||
| routes-deprecated | ||
| shims | ||
| utils | ||
| views | ||
| app-bootstrap.test.tsx | ||
| app-bootstrap.tsx | ||
| app.test.ts | ||
| app.ts | ||
| app.worker.tsx | ||
| bilibili-video-route.test.ts | ||
| config.remote-error.test.ts | ||
| config.test.ts | ||
| config.ts | ||
| container.ts | ||
| entrypoints.test.ts | ||
| index.test.ts | ||
| index.ts | ||
| obsidian-routes.test.ts | ||
| pkg.test.ts | ||
| pkg.ts | ||
| registry.dynamic.test.ts | ||
| registry.test.ts | ||
| registry.ts | ||
| route-paths.d.ts | ||
| router.js | ||
| routes.test.ts | ||
| server.ts | ||
| setup.test.ts | ||
| techflowpost.test.ts | ||
| types.ts | ||
| worker.ts | ||
| worker.worker.test.ts | ||