{"version":3,"file":"index.mjs","sources":["../src/Types.ts","../src/ImportPathInternalResolver.ts","../src/createFixNode.ts","../src/importPathVisitor.ts","../src/transformPaths.ts"],"sourcesContent":["import ts from 'typescript'\n\nexport interface Config {\n  /**\n    Disable plugin path resolving for given paths keys\n    @default undefined\n  */\n  exclude?: string[] | undefined\n\n  /**\n   * Disable path rewriting for generated d.ts\n   *\n   * @default false\n   */\n  disableForDeclarations?: boolean;\n\n  /**\n   * Try to load min.js and .js versions of each mapped import: for use ts without bundler\n   * @default false\n   */\n  tryLoadJs?: boolean\n}\n\nexport const defaultConfig: Config = {}\n\ntype FileExists = Partial<Pick<ts.ModuleResolutionHost, 'fileExists'>>\n\nexport type EmitHost = FileExists\n\nexport type Program = ts.Program & FileExists\n\nexport type TransformationContext = ts.TransformationContext & {\n  getEmitHost?: () => EmitHost\n}\n\ntype ExtractElement<T> = T extends Array<unknown> ? T[number] : T\n\nexport type CustomTransformer = {\n  [Key in keyof ts.CustomTransformers]: ExtractElement<ts.CustomTransformers[Key]>\n}\n","import path from 'path'\nimport { ImportPathsResolver } from '@zerollup/ts-helpers'\nimport { Config, EmitHost, Program, TransformationContext } from './Types'\n\nconst fileExistsParts = ['.min.js', '.js'] as const\n\nconst tsParts = ['.ts', '.d.ts', '.tsx', '/index.ts', '/index.tsx', '/index.d.ts', ''] as const\n\nexport class ImportPathInternalResolver {\n  protected resolver: ImportPathsResolver\n  protected emitHost: EmitHost | undefined\n\n  constructor(\n    protected program: Program | undefined,\n    transformationContext: TransformationContext,\n    protected config: Config\n  ) {\n    const { paths, baseUrl } = transformationContext.getCompilerOptions()\n    this.resolver = new ImportPathsResolver({\n      paths,\n      baseUrl,\n      exclude: config.exclude,\n    })\n    this.emitHost = transformationContext.getEmitHost\n      ? transformationContext.getEmitHost()\n      : undefined\n  }\n\n  fileExists(file: string) {\n    const { program, emitHost } = this\n    if (program?.fileExists) return program.fileExists(file)\n    if (emitHost?.fileExists) return emitHost.fileExists(file)\n\n    return true\n  }\n\n  resolveImport(oldImport: string, currentDir: string): string | undefined {\n    const config = this.config\n    const newImports = this.resolver.getImportSuggestions(oldImport, currentDir)\n\n    if (!newImports) return\n\n    for (let newImport of newImports) {\n      const newImportPath = path.join(currentDir, newImport)\n\n      for (let part of tsParts) {\n        if (this.fileExists(`${newImportPath}${part}`)) return newImport\n      }\n\n      if (config.tryLoadJs) {\n        for (let ext of fileExistsParts) {\n          if (this.fileExists(`${newImportPath}${ext}`))\n            return `${newImport}${ext}`\n        }\n      }\n\n    }\n  }\n}\n","import ts from 'typescript'\n\nexport type FixNode = (fixNode: ts.Node, newImport: string) => ts.Node\n\nexport function createFixNode(sf: ts.SourceFile) {\n  const posMap = new Map<string, number>()\n  return function fixNode(fixNode: ts.Node, newImport: string): ts.Node {\n    /**\n     * This hack needed for properly d.ts paths rewrite.\n     * moduleSpecifier value obtained by moduleSpecifier.pos from original source file text.\n     * See emitExternalModuleSpecifier -> writeTextOfNode -> getTextOfNodeFromSourceText.\n     *\n     * We need to add new import path to the end of source file text and adjust moduleSpecifier.pos\n     *\n     * ts remove quoted string from output\n     */\n    const newStr = `\"${newImport}\"`\n    let cachedPos = posMap.get(newImport)\n    if (cachedPos === undefined) {\n      cachedPos = sf.text.length\n      posMap.set(newImport, cachedPos)\n      sf.text += newStr\n      sf.end += newStr.length\n    }\n    fixNode.pos = cachedPos\n    fixNode.end = cachedPos + newStr.length\n\n    return fixNode\n  }\n}\n","import path from 'path'\nimport ts from 'typescript'\nimport { FixNode } from './createFixNode'\nimport { ImportPathInternalResolver } from './ImportPathInternalResolver'\n\nexport interface ImportPathVisitorContext {\n  sf: ts.SourceFile\n  fixNode?: FixNode | undefined\n  resolver: ImportPathInternalResolver\n}\n\nfunction stripQuotes(quoted: string): string {\n  if (quoted[0] !== '\"' && quoted[0] !== \"'\") return quoted\n  return quoted.substring(1, quoted.length - 1)\n}\n\nexport function importPathVisitor(\n  node: ts.Node,\n  { fixNode, sf, resolver }: ImportPathVisitorContext\n): ts.Node | undefined {\n  let importValue: string | undefined\n  let nodeToFix: ts.Node | undefined\n\n  // dynamic import or require()\n  if (ts.isCallExpression(node)) {\n    const expression = node.expression\n    if (node.arguments.length === 0) return\n    const arg = node.arguments[0]\n    if (!ts.isStringLiteral(arg)) return\n    if (\n      // Can't call getText on after step\n      expression.getText(sf) !== 'require' &&\n      expression.kind !== ts.SyntaxKind.ImportKeyword\n    )\n      return\n    importValue = stripQuotes(arg.getText(sf))\n    nodeToFix = arg\n    // import, export\n  } else if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {\n    if (!node.moduleSpecifier || !ts.isStringLiteral(node.moduleSpecifier))\n      return\n    // do not use getFullText() here, bug in watch mode, https://github.com/zerkalica/zerollup/issues/12\n    importValue = node.moduleSpecifier.text\n    nodeToFix = node.moduleSpecifier\n  } else if (\n    ts.isImportTypeNode(node) &&\n    ts.isLiteralTypeNode(node.argument) &&\n    ts.isStringLiteral(node.argument.literal)\n  ) {\n    importValue = node.argument.literal.text\n  } else if (ts.isModuleDeclaration(node)) {\n    if (!ts.isStringLiteral(node.name)) return\n    importValue = node.name.text\n    nodeToFix = node.name\n  } else {\n    return\n  }\n\n  const newImport = resolver.resolveImport(\n    importValue,\n    path.dirname(sf.fileName)\n  )\n\n  if (!newImport || newImport === importValue) return\n\n  if (nodeToFix && fixNode) fixNode(nodeToFix, newImport)\n  const newSpec = ts.createLiteral(newImport)\n\n  let newNode: ts.Node | undefined\n\n  if (ts.isImportTypeNode(node)) {\n    newNode = ts.updateImportTypeNode(\n      node,\n      ts.createLiteralTypeNode(newSpec),\n      node.qualifier,\n      node.typeArguments,\n      node.isTypeOf\n    )\n    newNode.flags = node.flags\n  }\n\n  if (ts.isImportDeclaration(node)) {\n    newNode = ts.updateImportDeclaration(\n      node,\n      node.decorators,\n      node.modifiers,\n      node.importClause,\n      newSpec\n    )\n\n    /**\n     * Without this hack ts generates bad import of pure interface in output js,\n     * this causes warning \"module has no exports\" in bundlers.\n     *\n     * index.ts\n     * ```ts\n     * import {Some} from './lib'\n     * export const some: Some = { self: 'test' }\n     * ```\n     *\n     * lib.ts\n     * ```ts\n     * export interface Some { self: string }\n     * ```\n     *\n     * output: index.js\n     * ```js\n     * import { Some } from \"./some/lib\"\n     * export const some = { self: 'test' }\n     * ```\n     */\n    newNode.flags = node.flags\n  }\n\n  if (ts.isExportDeclaration(node)) {\n    const exportNode = ts.updateExportDeclaration(\n      node,\n      node.decorators,\n      node.modifiers,\n      node.exportClause,\n      newSpec\n    )\n    if (exportNode.flags !== node.flags) {\n      /**\n       * Additional hacks for exports. Without it ts throw exception, if flags changed in export node.\n       */\n      const ms = exportNode.moduleSpecifier\n      const oms = node.moduleSpecifier\n      if (ms && oms) {\n        ms.pos = oms.pos\n        ms.end = oms.end\n        ms.parent = oms.parent\n      }\n\n      newNode = exportNode\n\n      newNode.flags = node.flags\n    }\n  }\n\n  if (ts.isCallExpression(node))\n    newNode = ts.updateCall(node, node.expression, node.typeArguments, [\n      newSpec,\n    ])\n\n  if (ts.isModuleDeclaration(node)) {\n    newNode = ts.updateModuleDeclaration(\n      node,\n      node.decorators,\n      node.modifiers,\n      newSpec,\n      node.body\n    )\n  }\n\n  return newNode\n}\n","import ts from 'typescript'\nimport { createTraverseVisitor } from '@zerollup/ts-helpers'\nimport {\n  Config,\n  defaultConfig,\n  TransformationContext,\n  CustomTransformer,\n} from './Types'\nimport { ImportPathInternalResolver } from './ImportPathInternalResolver'\nimport { createFixNode } from './createFixNode'\nimport { importPathVisitor } from './importPathVisitor'\n\nexport function transformPaths(\n  program?: ts.Program,\n  configRaw: Config = defaultConfig\n) {\n  const config = { ...defaultConfig, ...configRaw }\n\n  function createTransformer(transformationContext: TransformationContext) {\n    const resolver = new ImportPathInternalResolver(\n      program,\n      transformationContext,\n      config\n    )\n\n    return function transformer(sf: ts.SourceFile) {\n      return ts.visitNode(\n        sf,\n        createTraverseVisitor(\n          importPathVisitor,\n          {\n            fixNode: config.disableForDeclarations\n              ? undefined\n              : createFixNode(sf),\n            sf,\n            resolver,\n          },\n          transformationContext\n        )\n      )\n    }\n  }\n\n  const plugin: CustomTransformer = {\n    before: createTransformer,\n    afterDeclarations: config.disableForDeclarations\n      ? undefined\n      : (createTransformer as CustomTransformer['afterDeclarations']),\n  }\n\n  return plugin\n}\n"],"names":[],"mappings":"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"}