93 lines · 2.8 KB · TypeScript
RawDownload
// @effect-diagnostics nodeBuiltinImport:off - entrypoint detection is a Node filesystem boundary.import * as NodeFS from "node:fs";import * as NodeOS from "node:os";import * as NodePath from "node:path";import * as NodeURL from "node:url"; import { describe, expect, it } from "vite-plus/test"; import { isEntrypoint } from "./entrypoint.ts";import { symlinksSupported } from "@t3tools/shared/testing/symlinks"; const makeTempDir = () => NodeFS.mkdtempSync(NodePath.join(NodeOS.tmpdir(), "t3-entrypoint-test-")); describe("isEntrypoint", () => {  it("uses the runtime answer when Node provides one", () => {    // Node 22.18+ and 24.2+ populate `import.meta.main`; nothing else is consulted.    expect(      isEntrypoint({        moduleUrl: "file:///somewhere/bin.mjs",        entryPath: "/elsewhere/other.mjs",        runtimeMain: true,      }),    ).toBe(true);    expect(      isEntrypoint({        moduleUrl: "file:///somewhere/bin.mjs",        entryPath: "/somewhere/bin.mjs",        runtimeMain: false,      }),    ).toBe(false);  });   it("matches the entrypoint path when the runtime has no import.meta.main", () => {    // Node 22.16, 22.17 and 23.11 are inside `engines.node` but leave it undefined.    const dir = makeTempDir();    const entry = NodePath.join(dir, "bin.mjs");    NodeFS.writeFileSync(entry, "");     expect(      isEntrypoint({        moduleUrl: NodeURL.pathToFileURL(entry).href,        entryPath: entry,        runtimeMain: undefined,      }),    ).toBe(true);  });   it.skipIf(!symlinksSupported)(    "matches through a symlinked entrypoint, as npm and npx install it",    () => {      const dir = makeTempDir();      const real = NodePath.join(dir, "bin.mjs");      const link = NodePath.join(dir, "t3");      NodeFS.writeFileSync(real, "");      NodeFS.symlinkSync(real, link);       expect(        isEntrypoint({          moduleUrl: NodeURL.pathToFileURL(real).href,          entryPath: link,          runtimeMain: undefined,        }),      ).toBe(true);    },  );   it("stays false for an imported module that is not the entrypoint", () => {    // This is what keeps `bin.test.ts` from launching the CLI on import.    const dir = makeTempDir();    const entry = NodePath.join(dir, "bin.mjs");    const imported = NodePath.join(dir, "cli.mjs");    NodeFS.writeFileSync(entry, "");    NodeFS.writeFileSync(imported, "");     expect(      isEntrypoint({        moduleUrl: NodeURL.pathToFileURL(imported).href,        entryPath: entry,        runtimeMain: undefined,      }),    ).toBe(false);  });   it("stays false when there is no entrypoint argument", () => {    expect(      isEntrypoint({        moduleUrl: "file:///somewhere/bin.mjs",        entryPath: undefined,        runtimeMain: undefined,      }),    ).toBe(false);  });});