@r_masseater/msch 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +43 -2
- package/dist/cli-contract-BRpk_UKr.mjs +279 -0
- package/dist/cli-contract-BRpk_UKr.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +1229 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/decision-rules-BFywSPLT.d.mts +3 -0
- package/dist/decision-rules.d.mts +2 -0
- package/dist/decision-rules.mjs +31 -0
- package/dist/decision-rules.mjs.map +1 -0
- package/dist/lint.d.mts +200 -0
- package/dist/lint.mjs +917 -0
- package/dist/lint.mjs.map +1 -0
- package/dist/oxlint.d.mts +7 -0
- package/dist/oxlint.mjs +38 -0
- package/dist/oxlint.mjs.map +1 -0
- package/package.json +72 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.mjs","names":["Arr","Rec","Str","effectPresets","decisionPlugin","shadcn","decisionPlugin"],"sources":["../src/lint/lint-overrides.config.ts","../src/lint/lint.config.ts","../src/lint/readonly-lint-tools.config.ts","../src/lint/readonly-types.config.ts","../src/lint/preset.ts"],"sourcesContent":["const alchemyOverride: {\n files: string[];\n rules: Readonly<Record<string, [\"error\", ...unknown[]]>>;\n} = {\n files: [\"**/alchemy.run.ts\"],\n rules: {\n \"eslint-js/no-restricted-syntax\": [\n \"error\",\n {\n selector: 'CallExpression[callee.name=\"Stack\"]:not([arguments.0.name=\"APP_NAME\"])',\n message: \"スタック名には app-name.ts の APP_NAME を渡す\",\n },\n {\n selector:\n 'Program:not(:has(YieldExpression[delegate=true] > Identifier.argument[name=\"requireAppPrefix\"]))',\n message:\n \"スタックの最後で app-name.ts の requireAppPrefix を yield* して、リソース名の prefix を検査する\",\n },\n {\n selector:\n 'CallExpression[callee.name=\"Stack\"] > .arguments:nth-child(3):not(:has(FunctionExpression > BlockStatement > ExpressionStatement:nth-last-child(2) > YieldExpression[delegate=true] > Identifier.argument[name=\"requireAppPrefix\"]))',\n message:\n \"スタックの最後で app-name.ts の requireAppPrefix を yield* して、リソース名の prefix を検査する\",\n },\n ],\n },\n};\n\nconst scriptsOverride: {\n files: string[];\n rules: Readonly<Record<string, \"off\">>;\n} = {\n files: [\"scripts/**\"],\n rules: {\n \"import/no-nodejs-modules\": \"off\",\n \"node/no-process-env\": \"off\",\n \"node/no-sync\": \"off\",\n \"effecttsgo/node-builtin-import\": \"off\",\n },\n};\n\nexport { alchemyOverride, scriptsOverride };\n","import { presets as effectPresets } from \"@effect/tsgo/oxlint-presets\";\nimport htmlReact from \"@html-eslint/eslint-plugin-react\";\nimport eslintReact from \"@r_masseater/oxlint-typed-rules/react\";\nimport { Array as Arr, Record as Rec, String as Str, Struct, pipe } from \"effect\";\nimport reactHooks from \"eslint-plugin-react-hooks\";\n\nimport decisionPlugin from \"./decision-rules.ts\";\n\nconst REACT_STATE_HOOKS: readonly string[] = [\n \"useState\",\n \"useReducer\",\n \"createContext\",\n \"useContext\",\n];\nconst HAND_WRITTEN_SQL = \"SQL を手書きせず Drizzle のクエリビルダーを使う\";\nconst UI_STATE = \"UI 状態は effect-atom だけで扱う\";\n\nconst INSTRUMENTATION = \"計装は Effect のトレーシングだけで扱う\";\nconst INFRASTRUCTURE = \"インフラは Alchemy の IaC と Cloudflare だけで扱い、wrangler は使わない\";\n\nconst requiredStack: Readonly<Record<string, readonly string[]>> = {\n [UI_STATE]: [\n \"zustand\",\n \"jotai\",\n \"valtio\",\n \"recoil\",\n \"mobx\",\n \"mobx-*\",\n \"redux\",\n \"@reduxjs/*\",\n \"react-redux\",\n \"xstate\",\n \"@xstate/*\",\n \"nanostores\",\n \"@nanostores/*\",\n \"@preact/signals*\",\n ],\n \"サーバー状態は TanStack Query と Eden だけで扱う\": [\n \"swr\",\n \"react-query\",\n \"@apollo/*\",\n \"urql\",\n \"@urql/*\",\n \"axios\",\n \"ky\",\n \"ofetch\",\n \"got\",\n \"node-fetch\",\n \"graphql-request\",\n \"@trpc/*\",\n ],\n \"ルーティングとサーバーは TanStack Start と Elysia だけで扱う\": [\n \"react-router\",\n \"react-router-dom\",\n \"next\",\n \"@remix-run/*\",\n \"wouter\",\n \"express\",\n \"hono\",\n \"fastify\",\n \"koa\",\n \"@nestjs/*\",\n ],\n \"データベースは Drizzle だけで扱い、スキーマはマイグレーションで生成する\": [\n \"prisma\",\n \"@prisma/*\",\n \"typeorm\",\n \"sequelize\",\n \"kysely\",\n \"knex\",\n \"@mikro-orm/*\",\n \"better-sqlite3\",\n \"pg\",\n \"mysql2\",\n ],\n \"認証は better-auth だけで扱う\": [\n \"next-auth\",\n \"@auth/*\",\n \"lucia\",\n \"passport\",\n \"passport-*\",\n \"@clerk/*\",\n \"firebase/auth\",\n \"@supabase/*\",\n ],\n \"UI は shadcn/ui と Tailwind CSS だけで組む\": [\n \"@mui/*\",\n \"antd\",\n \"@chakra-ui/*\",\n \"@mantine/*\",\n \"styled-components\",\n \"@emotion/*\",\n \"bootstrap\",\n \"react-bootstrap\",\n ],\n \"検証、日時、ログ、関数型ユーティリティは Effect だけで扱う\": [\n \"zod\",\n \"yup\",\n \"joi\",\n \"valibot\",\n \"arktype\",\n \"io-ts\",\n \"superstruct\",\n \"moment\",\n \"dayjs\",\n \"date-fns\",\n \"luxon\",\n \"winston\",\n \"pino\",\n \"bunyan\",\n \"loglevel\",\n \"lodash\",\n \"lodash-es\",\n \"ramda\",\n \"rxjs\",\n \"fp-ts\",\n \"neverthrow\",\n \"ts-results\",\n \"purify-ts\",\n ],\n \"フィーチャーフラグは OpenFeature だけで扱う\": [\n \"launchdarkly-*\",\n \"@launchdarkly/*\",\n \"@growthbook/*\",\n \"unleash-client\",\n \"flagsmith\",\n \"@vercel/flags\",\n ],\n [INSTRUMENTATION]: [\"@opentelemetry/*\", \"dd-trace\", \"newrelic\"],\n [INFRASTRUCTURE]: [\n \"wrangler\",\n \"miniflare\",\n \"@cloudflare/vite-plugin\",\n \"@vercel/*\",\n \"@netlify/*\",\n \"aws-cdk\",\n \"aws-cdk-lib\",\n \"@pulumi/*\",\n \"cdktf\",\n ],\n};\n\nconst requiredStackEntries = Arr.flatMap(Rec.toEntries(requiredStack), ([message, modules]) =>\n pipe(\n modules,\n Arr.map((module) => ({ message, module })),\n ),\n);\n\nconst requiredStackPaths: readonly Readonly<{ name: string; message: string }>[] = Arr.map(\n pipe(\n requiredStackEntries,\n Arr.filter(({ module }) => !Str.includes(\"*\")(module)),\n ),\n ({ message, module }) => ({ name: module, message }),\n);\n\nconst requiredStackPatterns: readonly Readonly<{ group: readonly string[]; message: string }>[] =\n pipe(\n requiredStackEntries,\n Arr.map(({ message, module }) => {\n if (Str.includes(\"*\")(module)) {\n return { group: [module, `${module}/**`], message };\n }\n return { group: [`${module}/**`], message };\n }),\n );\n\nconst restrictedImports = {\n paths: [\n {\n name: \"react\",\n importNames: [...REACT_STATE_HOOKS],\n message: UI_STATE,\n },\n { name: \"drizzle-orm\", importNames: [\"sql\"], message: HAND_WRITTEN_SQL },\n { name: \"drizzle-orm/sql\", message: HAND_WRITTEN_SQL },\n ...requiredStackPaths,\n ],\n patterns: [...requiredStackPatterns],\n};\n\nconst generated = [\n \"**/routeTree.gen.ts\",\n \"**/generated/**\",\n \"**/drizzle/**/snapshot.json\",\n \".claude/skills/**\",\n \".intent/**\",\n \"AGENTS.md\",\n \"skills-lock.json\",\n \".github/release-please/*manifest.json\",\n \"**/*.d.rpp.ts\",\n \"**/src-tauri/gen/**\",\n];\n\nconst asErrors = (names: readonly string[]): Readonly<Record<string, \"error\">> =>\n Rec.fromEntries(\n pipe(\n names,\n Arr.map((name) => [name, \"error\"] as const),\n ),\n );\n\nconst allRulesOf = ({\n prefix,\n rules,\n}: Readonly<{ prefix: string; rules: Readonly<Record<string, unknown>> }>): Readonly<\n Record<string, \"error\">\n> =>\n asErrors(\n pipe(\n Rec.keys(rules),\n Arr.map((rule) => `${prefix}/${rule}`),\n ),\n );\n\nconst reactHooksRuleNames = pipe(\n Struct.keys(reactHooks.configs[\"recommended-latest\"].rules),\n Arr.map(Str.replace(\"react-hooks/\", \"react-hooks-js/\")),\n);\n\nconst reactHooksRules = asErrors(reactHooksRuleNames);\n\nconst eslintReactRuleNames = pipe(\n Rec.keys(eslintReact.configs[\"strict-typescript\"].rules ?? {}),\n Arr.filter(\n (name) => !(Str.replace(\"@eslint-react/\", \"react-hooks-js/\")(name) in reactHooksRules),\n ),\n);\n\nconst effectRuleNames = pipe(\n Rec.values(effectPresets),\n Arr.flatMap((preset) => Struct.keys(preset.rules ?? {})),\n);\n\nconst pluginRules: Readonly<Record<string, \"error\">> = {\n ...asErrors(Rec.keys(htmlReact.configs.all.rules ?? {})),\n ...reactHooksRules,\n ...asErrors(eslintReactRuleNames),\n ...asErrors(effectRuleNames),\n};\n\nconst decisionPluginName = decisionPlugin.meta.name;\n\nconst decisionRules = allRulesOf({ prefix: decisionPluginName, rules: decisionPlugin.rules });\n\nconst decisionTestRules = pipe(\n decisionRules,\n Rec.map(() => \"off\" as const),\n);\n\nconst shadcnRestyleContracts = [\n { pattern: \"^Table(Head|Cell)$\", allow: [\"text-alignment\", \"fvn-spacing\"] },\n { pattern: \"^TableCaption$\", allow: [\"caption\", \"text-alignment\", \"mt-*\", \"mb-*\"] },\n];\n\nexport {\n INFRASTRUCTURE,\n INSTRUMENTATION,\n shadcnRestyleContracts,\n allRulesOf,\n decisionPluginName,\n decisionRules,\n decisionTestRules,\n generated,\n pluginRules,\n requiredStack,\n restrictedImports,\n};\n","const lintToolReadonlyAllow = [\n {\n from: \"package\" as const,\n package: \"@oxlint/plugins\",\n name: [\n \"Context\",\n \"Location\",\n \"Node\",\n \"Range\",\n \"Rule\",\n \"RuleMeta\",\n \"SourceCode\",\n \"VisitorWithHooks\",\n ],\n },\n {\n from: \"package\" as const,\n package: \"oxlint\",\n name: [\"InvalidTestCase\", \"Rule\", \"TestCases\", \"ValidTestCase\"],\n },\n { from: \"package\" as const, package: \"@commitlint/types\", name: [\"QualifiedConfig\"] },\n {\n from: \"package\" as const,\n package: \"@textlint/config-loader\",\n name: [\"TextlintLoadPackagesFromRawConfigResult\"],\n },\n { from: \"package\" as const, package: \"markdownlint\", name: [\"LintError\"] },\n {\n from: \"package\" as const,\n package: \"steiger\",\n name: [\"ConfigObject\", \"GlobalIgnore\", \"Plugin\"],\n },\n {\n from: \"file\" as const,\n path: \"upstream/attw-core/lib/checkPackage.d.ts\",\n name: [\"CheckPackageOptions\"],\n },\n {\n from: \"file\" as const,\n path: \"../vite-plus-adopt/dist/attw.d.mts\",\n name: [\"CheckPackageOptions\"],\n },\n {\n from: \"file\" as const,\n path: \"src/types.ts\",\n name: [\"CommitlintConfig\", \"MarkdownlintConfig\", \"TextlintConfig\", \"ToolSections\"],\n },\n {\n from: \"file\" as const,\n name: [\n \"BoundSymbol\",\n \"CompatSymbol\",\n \"CompatType\",\n \"FileBinding\",\n \"SymbolTable\",\n \"TypedContext\",\n ],\n },\n];\n\nexport { lintToolReadonlyAllow };\n","import { lintToolReadonlyAllow } from \"./readonly-lint-tools.config.ts\";\n\nconst WEBGPU_HANDLES: readonly string[] = [\n \"GPUDevice\",\n \"GPUCanvasContext\",\n \"GPUTexture\",\n \"GPUBuffer\",\n \"GPUBindGroup\",\n \"GPUBindGroupLayout\",\n \"GPUPipelineLayout\",\n \"GPURenderPipeline\",\n \"GPUSampler\",\n];\n\nconst BROWSER_HANDLES: readonly string[] = [\n \"HTMLCanvasElement\",\n \"HTMLImageElement\",\n \"HTMLAnchorElement\",\n \"CanvasRenderingContext2D\",\n \"PointerEvent\",\n \"WheelEvent\",\n \"KeyboardEvent\",\n \"MouseEvent\",\n \"AbortSignal\",\n \"ImageBitmap\",\n ...WEBGPU_HANDLES,\n];\n\nconst readonlyParameterAllow = [\n {\n from: \"lib\" as const,\n name: [\n \"HTMLElement\",\n \"HTMLDivElement\",\n \"Worker\",\n \"ReadableStream\",\n \"Request\",\n \"Response\",\n \"Float64Array\",\n \"ArrayBuffer\",\n \"RegExp\",\n \"Uint8Array\",\n \"DataView\",\n \"RegExpExecArray\",\n \"RegExpMatchArray\",\n \"Date\",\n \"SpeechRecognitionResult\",\n ...BROWSER_HANDLES,\n ],\n },\n { from: \"package\" as const, package: \"@webgpu/types\", name: [...WEBGPU_HANDLES] },\n {\n from: \"package\" as const,\n package: \"@cloudflare/workers-types\",\n name: [\n \"AnalyticsEngineDataset\",\n \"Container\",\n \"DurableObjectState\",\n \"DurableObjectStorage\",\n \"KVNamespace\",\n \"R2Bucket\",\n \"SecretsStoreSecret\",\n \"TailEvent\",\n \"Onset\",\n \"Log\",\n \"Exception\",\n \"Attribute\",\n \"SpanUpdateInfo\",\n \"FetchResponseInfo\",\n \"Span\",\n ],\n },\n { from: \"package\" as const, package: \"@alchemy.run/cloudflare\", name: [\"Store\", \"WorkerProps\"] },\n {\n from: \"package\" as const,\n package: \"@bufbuild/protobuf\",\n name: [\"DescMessage\", \"JsonObject\", \"JsonValue\", \"Message\"],\n },\n { from: \"package\" as const, package: \"lighthouse\", name: [\"FlowResult\", \"Step\"] },\n { from: \"package\" as const, package: \"vitest\", name: \"TestProject\" },\n { from: \"package\" as const, package: \"puppeteer-core\", name: [\"Browser\", \"Page\"] },\n { from: \"package\" as const, package: \"miniflare\", name: \"Miniflare\" },\n { from: \"package\" as const, package: \"elysia\", name: \"ElysiaConfig\" },\n { from: \"package\" as const, package: \"@types/node\", name: [\"Request\", \"Response\"] },\n { from: \"package\" as const, package: \"@better-auth/drizzle-adapter\", name: \"DB\" },\n { from: \"package\" as const, package: \"@tanstack/query-core\", name: \"QueryClient\" },\n { from: \"package\" as const, package: \"@codemirror/view\", name: [\"EditorView\", \"ViewUpdate\"] },\n { from: \"package\" as const, package: \"@codemirror/state\", name: [\"Extension\", \"Text\"] },\n { from: \"package\" as const, package: \"@codemirror/lint\", name: \"Diagnostic\" },\n { from: \"package\" as const, package: \"comlink\", name: \"Remote\" },\n {\n from: \"package\" as const,\n package: \"typescript\",\n name: [\n \"API\",\n \"ArrayLiteralExpression\",\n \"BinaryExpression\",\n \"BindingElement\",\n \"CallExpression\",\n \"Checker\",\n \"ClassDeclaration\",\n \"CompilerHost\",\n \"CompilerOptions\",\n \"CompletionEntry\",\n \"ConfigFileResponse\",\n \"Declaration\",\n \"DeclarationBase\",\n \"DiagnosticResponse\",\n \"ElementAccessExpression\",\n \"EnumDeclaration\",\n \"ExportAssignment\",\n \"ExportDeclaration\",\n \"ExportSpecifier\",\n \"Expression\",\n \"ExpressionBase\",\n \"InterfaceDeclaration\",\n \"JSDocCallbackTag\",\n \"JSDocTagBase\",\n \"JSDocTypedefTag\",\n \"ModuleDeclaration\",\n \"Node\",\n \"NodeHandle\",\n \"NumericLiteral\",\n \"ParameterDeclaration\",\n \"ParseConfigFileHost\",\n \"ParsedCommandLine\",\n \"Program\",\n \"Project\",\n \"PropertyAccessExpression\",\n \"PropertyDeclaration\",\n \"PropertySignature\",\n \"Signature\",\n \"SignatureDeclaration\",\n \"Snapshot\",\n \"SourceFile\",\n \"StringLiteral\",\n \"Symbol\",\n \"Type\",\n \"TypeAliasDeclaration\",\n \"TypeChecker\",\n \"TypeFlags\",\n \"TypeNode\",\n \"TypeNodeBase\",\n \"UnionTypeNode\",\n \"VariableDeclaration\",\n \"VariableDeclarationList\",\n \"WasmTransport\",\n ],\n },\n { from: \"package\" as const, package: \"@codemirror/autocomplete\", name: \"CompletionContext\" },\n ...lintToolReadonlyAllow,\n {\n from: \"package\" as const,\n package: \"react\",\n name: [\n \"ReactNode\",\n \"ButtonHTMLAttributes\",\n \"ChangeEvent\",\n \"ClassAttributes\",\n \"KeyboardEvent\",\n \"SubmitEvent\",\n ],\n },\n { from: \"package\" as const, package: \"clsx\", name: \"ClassValue\" },\n {\n from: \"package\" as const,\n package: \"@anthropic-ai/claude-agent-sdk\",\n name: [\"SDKMessage\", \"SDKResultMessage\"],\n },\n {\n from: \"package\" as const,\n package: \"@types/dom-speech-recognition\",\n name: [\"SpeechRecognition\", \"SpeechRecognitionEvent\", \"SpeechRecognitionResult\"],\n },\n { from: \"package\" as const, package: \"@modelcontextprotocol/server\", name: \"McpServer\" },\n { from: \"package\" as const, package: \"discord.js\", name: [\"Client\", \"Guild\"] },\n {\n from: \"package\" as const,\n package: \"@discordjs/voice\",\n name: [\"AudioPlayer\", \"VoiceConnection\"],\n },\n { from: \"package\" as const, package: \"mdast\", name: [\"Root\", \"RootContent\", \"Yaml\"] },\n { from: \"package\" as const, package: \"@types/mdast\", name: [\"Code\", \"Nodes\"] },\n { from: \"package\" as const, package: \"@types/hast\", name: [\"Element\", \"RootContent\"] },\n { from: \"package\" as const, package: \"ical.js\", name: \"Component\" },\n {\n from: \"package\" as const,\n package: \"@jupyterlab/nbformat\",\n name: [\n \"ICell\",\n \"IDisplayData\",\n \"IExecuteResult\",\n \"INotebookContent\",\n \"IOutput\",\n \"MultilineString\",\n ],\n },\n { from: \"package\" as const, package: \"unpdf\", name: \"PDFDocumentProxy\" },\n { from: \"package\" as const, package: \"@kenjiuno/msgreader\", name: \"FieldsData\" },\n {\n from: \"package\" as const,\n package: \"parse5\",\n name: [\n \"Document\",\n \"DocumentFragment\",\n \"DocumentType\",\n \"Element\",\n \"Template\",\n \"CommentNode\",\n \"TextNode\",\n ],\n },\n { from: \"package\" as const, package: \"postal-mime\", name: [\"Address\", \"Email\"] },\n { from: \"package\" as const, package: \"fflate\", name: [\"Unzipped\"] },\n {\n from: \"package\" as const,\n package: \"@openrouter/sdk\",\n name: [\"DecisionsChoiceAnswer\", \"DecisionsNoulAnswer\", \"DecisionsScoreAnswer\", \"Unknown\"],\n },\n { from: \"package\" as const, package: \"recharts\", name: \"TooltipPayloadEntry\" },\n { from: \"package\" as const, package: \"vfile\", name: \"VFile\" },\n { from: \"package\" as const, package: \"modern-tar\", name: \"ParsedTarEntry\" },\n { from: \"package\" as const, package: \"@zip.js/zip.js\", name: [\"Entry\", \"FileEntry\"] },\n {\n from: \"package\" as const,\n package: \"three\",\n name: [\n \"LoadingManager\",\n \"Object3D\",\n \"WebGLRenderer\",\n \"PerspectiveCamera\",\n \"Scene\",\n \"Sphere\",\n \"BufferAttribute\",\n \"Material\",\n \"Mesh\",\n ],\n },\n {\n from: \"package\" as const,\n package: \"@huggingface/transformers\",\n name: [\"RawImage\", \"PretrainedConfig\", \"PreTrainedModel\", \"Processor\"],\n },\n {\n from: \"package\" as const,\n package: \"effect\",\n name: [\n \"Atom\",\n \"Cause\",\n \"Context\",\n \"Duration\",\n \"Effect\",\n \"Exit\",\n \"Fiber\",\n \"HashMap\",\n \"HashSet\",\n \"HttpClientRequest\",\n \"HttpServerRequest\",\n \"HttpServerResponse\",\n \"Layer\",\n \"Logger\",\n \"NativeSpan\",\n \"Option\",\n \"Redacted\",\n \"Ref\",\n \"Stream\",\n \"Utc\",\n \"Writable\",\n ],\n },\n];\n\nexport { readonlyParameterAllow };\n","import { fileURLToPath } from \"node:url\";\n\nimport tanstackQuery from \"@r_masseater/oxlint-typed-rules/tanstack-query\";\nimport tanstackRouter from \"@r_masseater/oxlint-typed-rules/tanstack-router\";\nimport { plugin as shadcn } from \"@shadcn/lint\";\nimport baselineJs from \"eslint-plugin-baseline-js\";\nimport type { UserConfig } from \"vite-plus\";\n\nimport decisionPlugin from \"./decision-rules.ts\";\nimport { alchemyOverride, scriptsOverride } from \"./lint-overrides.config.ts\";\nimport {\n allRulesOf,\n decisionPluginName,\n generated,\n pluginRules,\n restrictedImports,\n shadcnRestyleContracts,\n} from \"./lint.config.ts\";\nimport { readonlyParameterAllow } from \"./readonly-types.config.ts\";\n\ntype LintConfig = NonNullable<UserConfig[\"lint\"]>;\n\nconst resolved = (specifier: string): string => fileURLToPath(import.meta.resolve(specifier));\n\nconst typedRules = \"@r_masseater/oxlint-typed-rules\";\n\nconst jsPlugins = [\n { name: \"vite-plus\", specifier: resolved(\"vite-plus/oxlint-plugin\") },\n { name: \"tanstack-query\", specifier: resolved(`${typedRules}/tanstack-query`) },\n { name: \"tanstack-router\", specifier: resolved(`${typedRules}/tanstack-router`) },\n { name: \"tanstack-start\", specifier: resolved(`${typedRules}/tanstack-start`) },\n { name: \"drizzle\", specifier: resolved(`${typedRules}/drizzle`) },\n { name: \"react-hooks-js\", specifier: resolved(\"eslint-plugin-react-hooks\") },\n { name: \"@eslint-react\", specifier: resolved(`${typedRules}/react`) },\n { name: \"shadcn\", specifier: resolved(\"@shadcn/lint\") },\n { name: \"no-comments\", specifier: resolved(\"eslint-plugin-no-comments\") },\n { name: \"baseline-js\", specifier: resolved(\"eslint-plugin-baseline-js\") },\n { name: \"@html-eslint/react\", specifier: resolved(\"@html-eslint/eslint-plugin-react\") },\n { name: \"eslint-js\", specifier: resolved(\"oxlint-plugin-eslint\") },\n { name: decisionPluginName, specifier: resolved(\"@r_masseater/msch/decision-rules\") },\n];\n\nconst rules = {\n \"vite-plus/prefer-vite-plus-imports\": \"error\",\n \"tanstack-start/no-async-client-component\": \"error\",\n \"tanstack-start/no-client-code-in-server-component\": \"error\",\n \"no-comments/disallowComments\": [\n \"error\",\n {\n allow: [\n \"oxlint-disable\",\n \"eslint-disable\",\n String.raw`\\* @internal \\*?$`,\n String.raw`\\* @msch \\S+ \\*?$`,\n \"/usr/bin/env node$\",\n ],\n },\n ],\n ...allRulesOf({ prefix: \"tanstack-query\", rules: tanstackQuery.rules }),\n ...allRulesOf({ prefix: \"tanstack-router\", rules: tanstackRouter.rules }),\n \"drizzle/enforce-delete-with-where\": [\"error\", { drizzleObjectName: [\"db\"] }],\n \"drizzle/enforce-update-with-where\": [\"error\", { drizzleObjectName: [\"db\"] }],\n ...allRulesOf({ prefix: \"shadcn\", rules: shadcn.rules }),\n \"shadcn/no-restyle\": [\"error\", { contracts: shadcnRestyleContracts }],\n ...allRulesOf({ prefix: \"baseline-js\", rules: baselineJs.rules }),\n ...baselineJs.configs.recommended().rules,\n \"baseline-js/use-baseline\": [\n \"error\",\n {\n available: \"widely\",\n includeWebApis: { preset: \"auto\" },\n includeJsBuiltins: { preset: \"auto\" },\n },\n ],\n ...pluginRules,\n \"eslint/sort-imports\": \"off\",\n \"eslint/sort-keys\": \"off\",\n \"import/no-named-export\": \"off\",\n \"import/prefer-default-export\": \"off\",\n \"react/react-in-jsx-scope\": \"off\",\n \"eslint/no-undef\": \"off\",\n \"typescript/promise-function-async\": \"off\",\n \"react/forbid-component-props\": \"off\",\n \"oxc/no-rest-spread-properties\": \"off\",\n \"node/no-top-level-await\": \"off\",\n \"eslint/one-var\": [\"error\", \"never\"],\n \"eslint/id-length\": [\"error\", { exceptions: [\"x\", \"y\"] }],\n \"jsdoc/check-tag-names\": [\"error\", { definedTags: [\"msch\"] }],\n \"eslint/no-restricted-imports\": [\"error\", restrictedImports],\n \"typescript/prefer-readonly-parameter-types\": [\n \"error\",\n { ignoreInferredTypes: true, allow: readonlyParameterAllow },\n ],\n \"eslint/no-duplicate-imports\": [\"error\", { allowSeparateTypeImports: true }],\n \"react/function-component-definition\": [\n \"error\",\n { namedComponents: \"arrow-function\", unnamedComponents: \"arrow-function\" },\n ],\n \"typescript/no-empty-interface\": [\"error\", { allowSingleExtends: true }],\n \"typescript/no-empty-object-type\": [\"error\", { allowInterfaces: \"with-single-extends\" }],\n \"react/jsx-filename-extension\": [\"error\", { extensions: [\".tsx\"] }],\n \"react/only-export-components\": [\"error\", { allowExportNames: [\"Route\"] }],\n} satisfies LintConfig[\"rules\"];\n\nconst overrides = [\n alchemyOverride,\n {\n files: [\"**/*.config.ts\", \"**/alchemy.*.ts\", \"**/*.worker.ts\", \"**/decision-rules.ts\"],\n rules: { \"import/no-default-export\": \"off\" },\n },\n scriptsOverride,\n] satisfies LintConfig[\"overrides\"];\n\nconst lint = {\n ignorePatterns: generated,\n plugins: [\n \"eslint\",\n \"typescript\",\n \"unicorn\",\n \"oxc\",\n \"import\",\n \"react\",\n \"react-perf\",\n \"jsx-a11y\",\n \"jsdoc\",\n \"promise\",\n \"node\",\n \"effecttsgo\",\n ],\n categories: {\n correctness: \"error\",\n suspicious: \"error\",\n pedantic: \"error\",\n perf: \"error\",\n style: \"error\",\n restriction: \"error\",\n nursery: \"error\",\n },\n jsPlugins,\n rules,\n overrides,\n settings: {\n [decisionPlugin.meta.name]: { model: \"openrouter/typesafe/jev-1.14\" },\n },\n options: {\n typeAware: true,\n typeCheck: true,\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n },\n} satisfies LintConfig;\n\nexport { lint };\n"],"mappings":";;;;;;;;;;;;AAAA,MAAM,kBAGF;CACF,OAAO,CAAC,mBAAmB;CAC3B,OAAO,EACL,kCAAkC;EAChC;EACA;GACE,UAAU;GACV,SAAS;EACX;EACA;GACE,UACE;GACF,SACE;EACJ;EACA;GACE,UACE;GACF,SACE;EACJ;CACF,EACF;AACF;AAEA,MAAM,kBAGF;CACF,OAAO,CAAC,YAAY;CACpB,OAAO;EACL,4BAA4B;EAC5B,uBAAuB;EACvB,gBAAgB;EAChB,kCAAkC;CACpC;AACF;;AC/BA,MAAM,oBAAuC;CAC3C;CACA;CACA;CACA;AACF;AACA,MAAM,mBAAmB;AACzB,MAAM,WAAW;AAEjB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AAEvB,MAAM,gBAA6D;EAChE,WAAW;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,uCAAuC;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,8CAA8C;EAC5C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,4CAA4C;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,yBAAyB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,uCAAuC;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,qCAAqC;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,gCAAgC;EAC9B;EACA;EACA;EACA;EACA;EACA;CACF;EACC,kBAAkB;EAAC;EAAoB;EAAY;CAAU;EAC7D,iBAAiB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,MAAM,uBAAuBA,MAAI,QAAQC,OAAI,UAAU,aAAa,IAAI,CAAC,SAAS,aAChF,KACE,SACAD,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"}
|
package/dist/oxlint.mjs
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { n as ProblemList, r as describeFinding, t as JSON_FLAG } from "./cli-contract-BRpk_UKr.mjs";
|
|
2
|
+
import { Array, Option, Schema, pipe } from "effect";
|
|
3
|
+
import { execFileSync } from "node:child_process";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
// src/oxlint-rule.ts
|
|
6
|
+
const diagnosticOf = (problem) => ({
|
|
7
|
+
message: describeFinding(problem),
|
|
8
|
+
loc: { start: {
|
|
9
|
+
line: problem.line,
|
|
10
|
+
column: problem.column - 1
|
|
11
|
+
} }
|
|
12
|
+
});
|
|
13
|
+
const vocabularyRule = (load) => ({ create: (context) => ({ Program: () => {
|
|
14
|
+
const problems = pipe(load(context.cwd), Array.filter((problem) => problem.file === context.filename));
|
|
15
|
+
for (const problem of problems) context.report(diagnosticOf(problem));
|
|
16
|
+
} }) });
|
|
17
|
+
const mschPlugin = (load) => ({
|
|
18
|
+
meta: { name: "msch" },
|
|
19
|
+
rules: { vocabulary: vocabularyRule(load) }
|
|
20
|
+
});
|
|
21
|
+
// src/oxlint.ts
|
|
22
|
+
const CLI_PATH = fileURLToPath(import.meta.resolve("@r_masseater/msch/cli"));
|
|
23
|
+
const decodeProblems = Schema.decodeUnknownSync(Schema.fromJsonString(ProblemList));
|
|
24
|
+
const loaded = /* @__PURE__ */ new Map();
|
|
25
|
+
const runCli = (cwd) => decodeProblems(execFileSync(process.execPath, [CLI_PATH, JSON_FLAG], {
|
|
26
|
+
cwd,
|
|
27
|
+
encoding: "utf8",
|
|
28
|
+
maxBuffer: Number.MAX_SAFE_INTEGER
|
|
29
|
+
}));
|
|
30
|
+
const loadProblems = (cwd) => Option.fromUndefinedOr(loaded.get(cwd)).pipe(Option.getOrElse(() => {
|
|
31
|
+
const problems = runCli(cwd);
|
|
32
|
+
loaded.set(cwd, problems);
|
|
33
|
+
return problems;
|
|
34
|
+
}));
|
|
35
|
+
var oxlint_default = mschPlugin(loadProblems);
|
|
36
|
+
export { oxlint_default as default };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=oxlint.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxlint.mjs","names":["Arr"],"sources":["../src/oxlint-rule.ts","../src/oxlint.ts"],"sourcesContent":["import { Array as Arr, pipe } from \"effect\";\nimport type { Diagnostic, Plugin, Rule } from \"vite-plus/lint/plugins\";\n\nimport { describeFinding } from \"./problem.ts\";\nimport type { Problem } from \"./problem.ts\";\nimport { POSITION_BASE } from \"./syntax.ts\";\n\ntype ProblemLoader = (cwd: string) => readonly Problem[];\n\nconst diagnosticOf = (problem: Problem): Diagnostic => ({\n message: describeFinding(problem),\n loc: { start: { line: problem.line, column: problem.column - POSITION_BASE } },\n});\n\nconst vocabularyRule = (load: ProblemLoader): Rule => ({\n create: (context) => ({\n Program: () => {\n const problems = pipe(\n load(context.cwd),\n Arr.filter((problem) => problem.file === context.filename),\n );\n for (const problem of problems) {\n context.report(diagnosticOf(problem));\n }\n },\n }),\n});\n\nconst mschPlugin = (load: ProblemLoader): Plugin & { rules: { vocabulary: Rule } } => ({\n meta: { name: \"msch\" },\n rules: { vocabulary: vocabularyRule(load) },\n});\n\nexport { mschPlugin };\nexport type { ProblemLoader };\n","import { execFileSync } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Option, Schema } from \"effect\";\n\nimport { JSON_FLAG } from \"./cli-contract.ts\";\nimport { mschPlugin } from \"./oxlint-rule.ts\";\nimport { ProblemList } from \"./problem.ts\";\nimport type { Problem } from \"./problem.ts\";\n\nconst CLI_PATH = fileURLToPath(import.meta.resolve(\"@r_masseater/msch/cli\"));\nconst decodeProblems = Schema.decodeUnknownSync(Schema.fromJsonString(ProblemList));\nconst loaded = new Map<string, readonly Problem[]>();\n\nconst runCli = (cwd: string): readonly Problem[] =>\n decodeProblems(\n execFileSync(process.execPath, [CLI_PATH, JSON_FLAG], {\n cwd,\n encoding: \"utf8\",\n maxBuffer: Number.MAX_SAFE_INTEGER,\n }),\n );\n\nconst loadProblems = (cwd: string): readonly Problem[] =>\n Option.fromUndefinedOr(loaded.get(cwd)).pipe(\n Option.getOrElse(() => {\n const problems = runCli(cwd);\n loaded.set(cwd, problems);\n return problems;\n }),\n );\n\nexport default mschPlugin(loadProblems);\n"],"mappings":";;;;;AASA,MAAM,gBAAgB,aAAkC;CACtD,SAAS,gBAAgB,OAAO;CAChC,KAAK,EAAE,OAAO;EAAE,MAAM,QAAQ;EAAM,QAAQ,QAAQ,SAAA;CAAuB,EAAE;AAC/E;AAEA,MAAM,kBAAkB,UAA+B,EACrD,SAAS,aAAa,EACpB,eAAe;CACb,MAAM,WAAW,KACf,KAAK,QAAQ,GAAG,GAChBA,MAAI,QAAQ,YAAY,QAAQ,SAAS,QAAQ,QAAQ,CAC3D;CACA,KAAK,MAAM,WAAW,UACpB,QAAQ,OAAO,aAAa,OAAO,CAAC;AAExC,EACF,GACF;AAEA,MAAM,cAAc,UAAmE;CACrF,MAAM,EAAE,MAAM,OAAO;CACrB,OAAO,EAAE,YAAY,eAAe,IAAI,EAAE;AAC5C;;ACrBA,MAAM,WAAW,cAAc,YAAY,QAAQ,uBAAuB,CAAC;AAC3E,MAAM,iBAAiB,OAAO,kBAAkB,OAAO,eAAe,WAAW,CAAC;AAClF,MAAM,yBAAS,IAAI,IAAgC;AAEnD,MAAM,UAAU,QACd,eACE,aAAa,QAAQ,UAAU,CAAC,UAAU,SAAS,GAAG;CACpD;CACA,UAAU;CACV,WAAW,OAAO;AACpB,CAAC,CACH;AAEF,MAAM,gBAAgB,QACpB,OAAO,gBAAgB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,KACtC,OAAO,gBAAgB;CACrB,MAAM,WAAW,OAAO,GAAG;CAC3B,OAAO,IAAI,KAAK,QAAQ;CACxB,OAAO;AACT,CAAC,CACH;AAEF,IAAA,iBAAe,WAAW,YAAY"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,75 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@r_masseater/msch",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "masseater's check policy: points every finite value set and object shape at its one owner, and ships the oxlint preset of plugins and rules.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"lint",
|
|
7
|
+
"oxlint",
|
|
8
|
+
"vite-plus"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/masseater/masseater.dev/tree/main/libs/msch#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/masseater/masseater.dev/issues"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/masseater/masseater.dev.git",
|
|
18
|
+
"directory": "libs/msch"
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"msch": "./dist/cli.mjs"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"type": "module",
|
|
27
|
+
"exports": {
|
|
28
|
+
"./cli": "./dist/cli.mjs",
|
|
29
|
+
"./decision-rules": {
|
|
30
|
+
"types": "./dist/decision-rules.d.mts",
|
|
31
|
+
"default": "./dist/decision-rules.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./lint": {
|
|
34
|
+
"types": "./dist/lint.d.mts",
|
|
35
|
+
"default": "./dist/lint.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./oxlint": {
|
|
38
|
+
"types": "./dist/oxlint.d.mts",
|
|
39
|
+
"default": "./dist/oxlint.mjs"
|
|
40
|
+
},
|
|
41
|
+
"./package.json": "./package.json"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public",
|
|
45
|
+
"provenance": true
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@effect/platform-node": "4.1.2",
|
|
49
|
+
"@effect/tsgo": "0.67.5",
|
|
50
|
+
"@html-eslint/eslint-plugin-react": "0.68.0",
|
|
51
|
+
"@r_masseater/oxlint-plugin-decision": "0.3.0",
|
|
52
|
+
"@r_masseater/oxlint-typed-rules": "0.3.0",
|
|
53
|
+
"@shadcn/lint": "0.2.5",
|
|
54
|
+
"effect": "4.1.2",
|
|
55
|
+
"eslint-plugin-baseline-js": "0.7.7",
|
|
56
|
+
"eslint-plugin-no-comments": "1.2.1",
|
|
57
|
+
"eslint-plugin-react-hooks": "7.1.1",
|
|
58
|
+
"oxlint-plugin-eslint": "1.92.0",
|
|
59
|
+
"typescript": "7.1.0-beta",
|
|
60
|
+
"yaml": "2.9.1"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@effect/vitest": "4.1.2",
|
|
64
|
+
"@r_masseater/vitest-otlp": "0.2.0",
|
|
65
|
+
"@types/node": "26.6.6",
|
|
66
|
+
"vite-plus": "1.5.0"
|
|
67
|
+
},
|
|
68
|
+
"peerDependencies": {
|
|
69
|
+
"vite-plus": ">=1.5.0"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=26"
|
|
73
|
+
},
|
|
74
|
+
"scripts": {}
|
|
6
75
|
}
|