testOneImportEach
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, ); }