t3-code-android-nightly/oxlint-plugin-t3code/rules/namespace-node-imports.test.ts
Julius Marminge 2fa37ec183
[codex] Enforce canonical Node namespace imports (#3238)
Co-authored-by: codex <codex@users.noreply.github.com>
2026-06-20 01:06:37 -07:00

63 lines
1.6 KiB
TypeScript

import { assert, describe } from "@effect/vitest";
import { createOxlintRuleHarness } from "../test/utils.ts";
const rule = createOxlintRuleHarness("t3code/namespace-node-imports");
describe("t3code/namespace-node-imports", () => {
rule.valid(
"allows canonical Node namespaces",
`
import * as NodeFS from "node:fs";
import * as NodeFSP from "node:fs/promises";
import * as NodeAssert from "node:assert/strict";
import * as NodeChildProcess from "node:child_process";
import * as NodeTimersPromises from "node:timers/promises";
import type * as NodeStream from "node:stream";
NodeAssert.ok(NodeChildProcess.spawn && NodeTimersPromises.setTimeout);
export const read = NodeFS.readFileSync;
export const readAsync = NodeFSP.readFile;
export type Input = NodeStream.Readable;
`,
);
rule.valid(
"does not apply to non-Node packages",
`
import { BrowserWindow } from "electron";
`,
);
rule.invalid(
"reports named imports",
`
import { readFile } from "node:fs/promises";
`,
(output) => {
assert.match(output, /namespace named NodeFSP/);
},
);
rule.invalid(
"reports default imports",
`
import path from "node:path";
`,
(output) => {
assert.match(output, /namespace named NodePath/);
},
);
rule.invalid(
"reports non-canonical namespace aliases",
`
import * as Crypto from "node:crypto";
import * as NodeOs from "node:os";
`,
(output) => {
assert.match(output, /namespace named NodeCrypto/);
assert.match(output, /namespace named NodeOS/);
},
);
});