patchImportLines

tcmts.cli.main.patchImportLines · #cb6oo5c5 · term · runs anywhere

The import lines that add imports (PatchImport), each checked.

import type { PatchImport } from "#codebase/tcmts/cli/main";
import { UsageError } from "#codebase/tcmts/cli/ui";

export function patchImportLines(imports: PatchImport[]): string[] {
  const word = /^[A-Za-z_$][\w$]*$/;
  return imports.map((i) => {
    const as = i.as || undefined;
    if (!i.from)
      throw new UsageError(`an import of ${i.name || "?"} says nothing it's from (\`from\`)`);
    if (
      i.name === "*" || i.name === "default"
        ? !as || !word.test(as)
        : !word.test(i.name) || (as !== undefined && !word.test(as))
    )
      throw new UsageError(
        `an import of ${JSON.stringify(i.name)}${as ? ` as ${JSON.stringify(as)}` : ""} from ${i.from} isn't one: \`name\` is a name, or \`default\` or \`*\` with \`as\`; \`as\` another`,
      );
    const kind = i.type ? "import type" : "import";
    const from = JSON.stringify(i.from);
    if (i.name === "*") return `${kind} * as ${as} from ${from};`;
    if (i.name === "default") return `${kind} ${as} from ${from};`;
    return `${kind} { ${as && as !== i.name ? `${i.name} as ${as}` : i.name} } from ${from};`;
  });
}

uses

used by