63 lines · 1.6 KB · TypeScript
RawDownload
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/);    },  );});