mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-01 14:57:14 +08:00
1131350b5f
* feat: deploy RSSHub to Cloudflare Workers - Create Worker entry point (lib/worker.ts) with polyfills - Implement Worker-specific app configuration (lib/app.worker.tsx) - Add automatic .worker.ts resolution plugin for cleaner config - Simplify build configuration with only 3 essential shims - Enable static asset serving via Cloudflare Static Assets feature - Support dynamic route loading with proper module aliasing 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * feat(worker): add puppeteer and request-rewriter support - Add @cloudflare/puppeteer for Browser Rendering API support - Create puppeteer.worker.ts with Cloudflare Browser binding - Add request-rewriter Worker version with static browser headers - Add vm module shim to node-module.ts for JSDOM compatibility - Configure __dirname/__filename in tsdown for CommonJS compat - Update wrangler.toml with BROWSER binding configuration - Dynamically extract namespaces from foloAnalysisTop100 for routes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(cache): restore synchronous initialization for tests The async initialization caused cache tests to fail because the cache module wasn't ready when tests ran. Restored synchronous imports while keeping Worker-specific no-op behavior. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(worker): add automated Worker integration tests - Add miniflare for Worker environment simulation - Create lib/worker.worker.test.ts with integration tests - Test basic routes (/test/1, /, unknown routes) - Test RSS feed routes (hackernews, v2ex) - Test error handling for puppeteer routes without BROWSER binding - Add worker-test npm script 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(worker): use test routes for Worker integration tests - Replace third-party routes (hackernews, v2ex, weibo) with /test/* routes - Remove miniflare dependency (wrangler includes it internally) - Simplify test setup using wrangler's unstable_dev API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix(test): make header-generator test less flaky The header-generator library may return different platform values due to internal randomness. Update test to check for valid format instead of exact value. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix(test): exclude worker tests from vitest coverage run Worker tests require the dist-worker bundle to be built first, which is not part of the regular CI test workflow. These tests should be run separately using 'pnpm worker-test'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(worker): add automated Worker integration tests - Add worker-build step to CI workflow before running tests - Revert exclusion of worker tests from vitest coverage run - Worker tests now run as part of the regular test suite 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(worker): fix routes.js alias path in worker build config Change alias key from absolute path to relative import path to match how it's imported in lib/registry.ts. This fixes the worker build failing with "Could not resolve '../assets/build/routes.js'" error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * ci: trigger CI re-run 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(ci): build worker routes before worker-build The worker build requires routes-worker.js which is generated by running build:routes with WORKER_BUILD=true. This was missing in CI, causing the worker build to fail with "Could not resolve routes.js". 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(test): increase timeout for Worker integration tests Worker tests need more time in CI environments. Increase individual test timeouts from default 10s to 30s for each test case. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
// Worker-compatible logger shim using console
|
|
// Winston is not compatible with Cloudflare Workers
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
interface LogInfo {
|
|
level: string;
|
|
message: string;
|
|
timestamp?: string;
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
type LogMethod = (message: string, ...meta: unknown[]) => void;
|
|
|
|
interface Logger {
|
|
error: LogMethod;
|
|
warn: LogMethod;
|
|
info: LogMethod;
|
|
http: LogMethod;
|
|
verbose: LogMethod;
|
|
debug: LogMethod;
|
|
silly: LogMethod;
|
|
log: (level: string, message: string, ...meta: unknown[]) => void;
|
|
}
|
|
|
|
const formatMessage = (level: string, message: string): string => {
|
|
const timestamp = new Date().toISOString();
|
|
return `[${timestamp}] ${level}: ${message}`;
|
|
};
|
|
|
|
const logger: Logger = {
|
|
error: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.error(formatMessage('error', message), ...meta);
|
|
},
|
|
warn: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(formatMessage('warn', message), ...meta);
|
|
},
|
|
info: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.info(formatMessage('info', message), ...meta);
|
|
},
|
|
http: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log(formatMessage('http', message), ...meta);
|
|
},
|
|
verbose: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log(formatMessage('verbose', message), ...meta);
|
|
},
|
|
debug: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.debug(formatMessage('debug', message), ...meta);
|
|
},
|
|
silly: (message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log(formatMessage('silly', message), ...meta);
|
|
},
|
|
log: (level: string, message: string, ...meta: unknown[]) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log(formatMessage(level, message), ...meta);
|
|
},
|
|
};
|
|
|
|
export default logger;
|