testOneImportEach

tcmts.cli.merge.testOneImportEach · #ripx7lae · term

One definition named twice, imported by each side under its own name, is imported once; a type and a value import of one name is the value's; two definitions of one name both stay.

import { oneImportEach } from "#codebase/tcmts/cli/merge";
import assert from "node:assert/strict";

export const testOneImportEach = () => {
  const alias = (a: string, b: string) =>
    [a, b].every((n) => ["cli.changes.HistoryItem", "vscode.changes.HistoryItem"].includes(n)) ||
    a === b;
  assert.deepEqual(
    oneImportEach(
      [
        'import type { HistoryItem } from "#codebase/cli/changes";',
        'import type { HistoryItem } from "#codebase/vscode/changes";',
        'import { x } from "react";',
      ],
      alias,
    ),
    ['import { x } from "react";', 'import type { HistoryItem } from "#codebase/cli/changes";'],
  );
  assert.deepEqual(
    oneImportEach(
      ['import type { Store } from "#codebase/lib";', 'import { Store } from "#codebase/lib";'],
      alias,
    ),
    ['import { Store } from "#codebase/lib";'],
  );
  assert.equal(
    oneImportEach(
      ['import { a } from "#codebase/one";', 'import { a } from "#codebase/two";'],
      alias,
    ).length,
    2,
  );
}

uses