chore: add ESLint with eslint-plugin-jsdoc and central typedefs

- flat config, JSDoc-only rules (no stylistic — Biome owns those)
- src/types.js defines Env, Module, Command, Cron, ModuleContext, Trade
- lint script now runs biome check + eslint src
This commit is contained in:
2026-04-15 13:29:23 +07:00
parent d040ce4161
commit 97ee30590a
2 changed files with 152 additions and 0 deletions

57
eslint.config.js Normal file
View File

@@ -0,0 +1,57 @@
import jsdoc from "eslint-plugin-jsdoc";
// Cloudflare Workers globals + custom codebase types that no-undefined-types
// must treat as defined (no tsc/jsconfig — plain ESM JS).
const DEFINED_TYPES = [
// Cloudflare Workers runtime globals
"KVNamespace",
"D1Database",
"D1PreparedStatement",
// Web globals not always in eslint's scope
"Request",
"Response",
"URL",
// KV interface types (src/db/kv-store-interface.js)
"KVStore",
"KVStorePutOptions",
"KVStoreListOptions",
"KVStoreListResult",
// SQL interface types (src/db/sql-store-interface.js)
"SqlStore",
"SqlRunResult",
// Central typedefs (src/types.js)
"Env",
"Module",
"Command",
"Cron",
"ModuleContext",
"Trade",
"Portfolio",
"PortfolioMeta",
// Module sub-types (registry, validate-*)
"BotModule",
"RegistryEntry",
"Registry",
"ModuleCommand",
"ModuleCron",
"CronEntry",
// Trading sub-types
"ResolvedSymbol",
];
export default [
{
files: ["src/**/*.js"],
plugins: { jsdoc },
rules: {
"jsdoc/check-alignment": "warn",
"jsdoc/check-param-names": "error",
"jsdoc/check-tag-names": "error",
"jsdoc/check-types": "error",
"jsdoc/no-undefined-types": ["error", { definedTypes: DEFINED_TYPES }],
"jsdoc/require-param-type": "error",
"jsdoc/require-returns-type": "error",
"jsdoc/valid-types": "error",
},
},
];