{"version":3,"file":"index.mjs","names":["dts"],"sources":["../src/logger.ts","../src/es-declarations.ts","../src/index.ts"],"sourcesContent":["// oxlint-disable no-console\nimport c from 'picocolors'\n\nexport function log(text: string): void {\n  console.log(`${c.cyan('[vite:lib]')} ${text}`)\n}\n\nexport function logWarn(text: string): void {\n  console.warn(`${c.yellow('[vite:lib]')} ${text}`)\n}\n\nexport function logError(text: string): void {\n  console.error(`${c.red('[vite:lib]')} ${text}`)\n}\n","import { existsSync } from 'node:fs'\nimport { readFile, readdir, unlink, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { normalizePath } from 'vite'\n\nimport { log } from './logger'\n\nexport async function generateMTSDeclarations(\n  typesDir: string,\n  deleteSourceFiles: boolean,\n  verbose: boolean | undefined,\n): Promise<void> {\n  const files = await collectFiles(typesDir)\n  for (const file of files) {\n    await createMTSImports(file, verbose)\n    if (deleteSourceFiles) {\n      await unlink(file)\n    }\n  }\n  log(`Generated ${files.length} MTS declarations.`)\n}\n\nasync function collectFiles(dir: string): Promise<string[]> {\n  const entries = await readdir(dir, {\n    recursive: false, // does not provide full path to nested files\n    withFileTypes: true,\n  })\n  const files = entries.filter((entry) => entry.isFile())\n  const nestedFiles = await Promise.all(\n    entries\n      .filter((entry) => entry.isDirectory())\n      .map((entry) => collectFiles(normalizePath(path.join(dir, entry.name)))),\n  )\n  return files.map((file) => normalizePath(path.join(dir, file.name))).concat(...nestedFiles)\n}\n\nasync function createMTSImports(file: string, verbose: boolean | undefined) {\n  const content = await readFile(file, 'utf-8')\n  const lines = content.split('\\n')\n  const modified = lines.map((line) => transformLine(file, line, verbose))\n  const targetFile = file.replace('.d.ts', '.d.mts')\n  await writeFile(targetFile, modified.join('\\n'))\n}\n\nfunction transformLine(file: string, line: string, verbose: boolean | undefined) {\n  return (\n    transformStaticImport(file, line, \"'\", verbose) ??\n    transformStaticImport(file, line, '\"', verbose) ??\n    transformExport(file, line, \"'\", verbose) ??\n    transformExport(file, line, '\"', verbose) ??\n    line\n  )\n}\n\nfunction transformStaticImport(\n  file: string,\n  line: string,\n  quote: string,\n  verbose: boolean | undefined,\n) {\n  const importPathMarker = `from ${quote}`\n  const isStaticImport = line.includes('import ') && line.includes(`${importPathMarker}.`)\n  if (!isStaticImport) {\n    return undefined\n  }\n\n  const importStartIndex = line.lastIndexOf(importPathMarker)\n  const importPath = line.substring(importStartIndex + importPathMarker.length, line.length - 2)\n  const resolvedImport = path.resolve(path.dirname(file), importPath)\n  if (existsSync(resolvedImport)) {\n    if (verbose) {\n      log(`got index import ${resolvedImport}`)\n    }\n    return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n  }\n\n  return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n\nfunction transformExport(file: string, line: string, quote: string, verbose: boolean | undefined) {\n  const exportPathMarker = ` from ${quote}`\n  const isStaticExport = line.includes('export ') && line.includes(`${exportPathMarker}.`)\n  if (!isStaticExport) {\n    return undefined\n  }\n\n  const exportStartIndex = line.lastIndexOf(exportPathMarker)\n  const exportPath = line.substring(exportStartIndex + exportPathMarker.length, line.length - 2)\n  const resolvedExport = path.resolve(path.dirname(file), exportPath)\n  if (existsSync(resolvedExport)) {\n    if (verbose) {\n      log(`got index export ${resolvedExport}`)\n    }\n    return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n  }\n\n  return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n","import { existsSync, readFileSync, readdirSync, rmSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { builtinModules } from 'node:module'\nimport path from 'node:path'\n\nimport c from 'picocolors'\nimport type { CompilerOptions } from 'typescript'\nimport ts from 'typescript'\nimport type { Alias, AliasOptions, LibraryFormats, Plugin, UserConfig } from 'vite'\nimport dts from 'vite-plugin-dts'\n\nimport { generateMTSDeclarations } from './es-declarations'\nimport { log, logError, logWarn } from './logger'\n\nexport * as dts from 'vite-plugin-dts'\n\nconst typesDir = 'dist/types'\n\nexport interface CommonOptions {\n  verbose: boolean\n}\n\nconst COMMON_DEFAULTS = {\n  verbose: false,\n} satisfies Partial<CommonOptions>\n\nexport interface TSConfigPathsOptions extends CommonOptions {\n  /** Path to the tsconfig file (relative to the project root). Defaults to `./tsconfig.json` */\n  tsconfig: string\n}\n\nconst TS_CONFIG_PATHS_OPTIONS = {\n  ...COMMON_DEFAULTS,\n  tsconfig: './tsconfig.json',\n} satisfies Partial<TSConfigPathsOptions>\n\nexport interface BundleOptions {\n  /** If `false`, all builtin modules will be externalized. Defaults to `false`. */\n  builtin: boolean\n  /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n  dependencies: boolean\n  /** If `false`, all devDependencies will be externalized. Defaults to `true`. */\n  devDependencies: boolean\n  /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n  peerDependencies: boolean\n  /** List of packages or modules to externalize. Defaults to `[]`. */\n  exclude: (string | RegExp)[]\n  /** List of packages or modules to bundle. Acts as an override and defaults to `[]`. */\n  include: (string | RegExp)[]\n  /** If `false`, all direct imports from `node_modules` will be externalized. Defaults to `false`. */\n  nodeModules: boolean\n}\n\nconst BUNDLE_DEFAULTS = {\n  builtin: false,\n  dependencies: false,\n  devDependencies: true,\n  peerDependencies: false,\n  exclude: [],\n  include: [],\n  nodeModules: false,\n} satisfies BundleOptions\n\nexport interface LibraryOptions extends TSConfigPathsOptions {\n  /** Defaults to `src/index.ts`. */\n  entry: string\n  /** Bundle configuration for packages and modules. See {@link BundleOptions} for defaults. */\n  bundle: Partial<BundleOptions>\n  /** Defaults to `['es']`. */\n  formats: LibraryFormats[]\n  /** Defaults to `package.json`. */\n  manifest: string\n  name?: string\n  /** Remove any temporary build files. Defaults to `true`. */\n  cleanup: boolean\n}\n\nconst LIBRARY_DEFAULTS = {\n  ...TS_CONFIG_PATHS_OPTIONS,\n  cleanup: true,\n  entry: 'src/index.ts',\n  bundle: {},\n  formats: ['es'],\n  manifest: 'package.json',\n} satisfies Partial<LibraryOptions>\n\nfunction mergeWithDefaults(options: Partial<LibraryOptions>): LibraryOptions {\n  return {\n    ...LIBRARY_DEFAULTS,\n    ...options,\n  }\n}\n\nexport function tsconfigPaths(options: Partial<TSConfigPathsOptions> = {}): Plugin {\n  const tsconfig = options.tsconfig ?? TS_CONFIG_PATHS_OPTIONS.tsconfig\n  const verbose = options.verbose ?? TS_CONFIG_PATHS_OPTIONS.verbose\n  return {\n    name: 'vite-plugin-lib:alias',\n    enforce: 'pre',\n    config: async (config) => {\n      const tsconfigPath = path.resolve(config.root ?? '.', tsconfig)\n      const { baseUrl, paths } = await readConfig(tsconfigPath)\n      if (!baseUrl || !paths) {\n        log(`No paths found in ${tsconfig}.`)\n        return config\n      }\n      const pathToAlias = pathToAliasFactory(tsconfigPath, baseUrl, verbose)\n      const aliasOptions = Object.entries(paths)\n        .map(pathToAlias)\n        .filter((alias) => alias !== undefined)\n      if (aliasOptions.length > 0) {\n        logInjectedAliases(aliasOptions, config, verbose)\n      }\n      const existingAlias = transformExistingAlias(config.resolve?.alias)\n      return {\n        ...config,\n        resolve: {\n          ...config.resolve,\n          alias: [...existingAlias, ...aliasOptions],\n        },\n      }\n    },\n  }\n}\n\nfunction buildConfig({ entry, formats, manifest, name, bundle, verbose }: LibraryOptions): Plugin {\n  const bundleWithDefaults = { ...BUNDLE_DEFAULTS, ...bundle }\n  const packagesToExternalize = [\n    ...getBuiltinModules(bundleWithDefaults),\n    ...getDependencies(manifest, bundleWithDefaults, verbose),\n    ...bundleWithDefaults.exclude,\n  ]\n  if (!bundleWithDefaults.nodeModules) {\n    packagesToExternalize.push(/node_modules/)\n    if (verbose) {\n      log(`Externalized node_modules.`)\n    }\n  }\n  return {\n    name: 'vite-plugin-lib:build',\n    enforce: 'pre',\n    apply: 'build',\n    config: (config) => {\n      return {\n        ...config,\n        build: {\n          ...config.build,\n          lib: {\n            ...config.build?.lib,\n            entry: path.resolve(config.root ?? '.', entry),\n            formats,\n            name,\n            fileName: (format: string) => formatToFileName(entry, format),\n          },\n          rollupOptions: {\n            external: (source: string, _importer: string | undefined, _isResolved: boolean) => {\n              const shouldBeExternalized = packagesToExternalize.some((rule) =>\n                matchesRule(source, rule),\n              )\n              const shouldBeBundled = bundleWithDefaults.include.some((rule) =>\n                matchesRule(source, rule),\n              )\n              return shouldBeExternalized && !shouldBeBundled\n            },\n          },\n        },\n      }\n    },\n  }\n}\n\nfunction matchesRule(source: string, rule: string | RegExp) {\n  return typeof rule === 'string' ? rule === source : rule.test(source)\n}\n\nfunction getDependencies(manifest: string, bundle: BundleOptions, verbose: boolean): string[] {\n  try {\n    const content = readFileSync(manifest, { encoding: 'utf-8' })\n    const { dependencies = {}, devDependencies = {}, peerDependencies = {} } = JSON.parse(content)\n    const dependenciesToExternalize: string[] = []\n    if (!bundle.dependencies) {\n      const names = Object.keys(dependencies)\n      dependenciesToExternalize.push(...names)\n      if (verbose) {\n        log(`Externalized ${names.length} dependencies.`)\n      }\n    }\n    if (!bundle.devDependencies) {\n      const names = Object.keys(devDependencies)\n      dependenciesToExternalize.push(...names)\n      if (verbose) {\n        log(`Externalized ${names.length} devDependencies.`)\n      }\n    }\n    if (!bundle.peerDependencies) {\n      const names = Object.keys(peerDependencies)\n      dependenciesToExternalize.push(...names)\n      if (verbose) {\n        log(`Externalized ${names.length} peerDependencies.`)\n      }\n    }\n    return dependenciesToExternalize\n  } catch (error) {\n    const message = getErrorMessage(error)\n    logError(`Could not read ${c.green(manifest)}: ${message}`)\n    throw error\n  }\n}\n\nfunction getBuiltinModules(bundle: BundleOptions) {\n  if (bundle.builtin) {\n    return []\n  }\n  log('Externalized builtin modules.')\n  return [...builtinModules, /node:/, /bun:/, /deno:/]\n}\n\nfunction logInjectedAliases(aliasOptions: Alias[], config: UserConfig, verbose?: boolean) {\n  log(`Injected ${c.green(aliasOptions.length)} aliases.`)\n  if (!verbose) {\n    return\n  }\n  const base = `${path.resolve(config.root ?? '.')}/`\n  aliasOptions\n    .map(\n      ({ find, replacement }) =>\n        `  ${c.gray('>')} ${c.green(find.toString())} ${c.gray(\n          c.bold('->'),\n        )} ${c.green(replacement.replace(base, ''))}`,\n    )\n    .forEach(log)\n}\n\nfunction pathToAliasFactory(\n  tsconfigPath: string,\n  baseUrl: string,\n  verbose?: boolean,\n): (path: [string, string[]]) => Alias | undefined {\n  return ([alias, replacements]) => {\n    if (replacements.length === 0) {\n      if (verbose) {\n        logWarn(`No replacements for alias ${c.green(alias)}.`)\n      }\n      return undefined\n    }\n    if (verbose && replacements.length > 1) {\n      logWarn(`Found more than one replacement for alias ${c.green(alias)}.`)\n      logWarn('Using the first existing replacement.')\n    }\n    const find = alias.replace('/*', '')\n    const replacement = getFirstExistingReplacement(tsconfigPath, baseUrl, replacements, find)\n    if (!replacement) {\n      if (verbose) {\n        logWarn(`No replacement found for alias ${c.green(alias)}.`)\n      }\n      return undefined\n    }\n    return {\n      find,\n      replacement,\n    }\n  }\n}\n\nfunction getFirstExistingReplacement(\n  tsconfigPath: string,\n  baseUrl: string,\n  replacements: string[],\n  find: string,\n  verbose?: boolean,\n): string | undefined {\n  for (const replacement of replacements) {\n    const resolvedReplacement = path.resolve(\n      tsconfigPath,\n      baseUrl,\n      replacement.replace('/*', '') ?? find,\n    )\n    if (existsSync(resolvedReplacement)) {\n      return resolvedReplacement\n    } else if (verbose) {\n      logWarn(`Path ${c.green(replacement)} does not exist.`)\n    }\n  }\n  return undefined\n}\n\nfunction formatToFileName(entry: string, format: string): string {\n  const entryFileName = entry.substring(entry.lastIndexOf('/') + 1, entry.lastIndexOf('.'))\n  if (format === 'es') {\n    return `${entryFileName}.mjs`\n  }\n  if (format === 'cjs') {\n    return `${entryFileName}.cjs`\n  }\n  return `${entryFileName}.${format}.js`\n}\n\nexport function library(options: Partial<LibraryOptions> = {}): Plugin[] {\n  const mergedOptions = mergeWithDefaults(options)\n  const plugins = [\n    tsconfigPaths(mergedOptions),\n    buildConfig(mergedOptions),\n    dts({\n      cleanVueFileName: true,\n      copyDtsFiles: true,\n      include: `${path.resolve(mergedOptions.entry, '..')}/**`,\n      outDir: typesDir,\n      staticImport: true,\n      tsconfigPath: mergedOptions.tsconfig,\n      afterBuild: async () => {\n        if (includesESFormat(mergedOptions.formats)) {\n          await generateMTSDeclarations(\n            typesDir,\n            mergedOptions.formats?.length === 1,\n            options.verbose,\n          )\n        }\n      },\n    }),\n  ]\n\n  if (mergedOptions.cleanup) {\n    plugins.push(cleanup(mergedOptions))\n  }\n\n  return plugins\n}\n\nfunction transformExistingAlias(alias: AliasOptions | undefined): Alias[] {\n  if (!alias) {\n    return []\n  }\n  if (Array.isArray(alias)) {\n    return alias\n  }\n  return Object.entries(alias).map(([find, replacement]) => ({\n    find,\n    replacement,\n  }))\n}\n\nasync function readConfig(configPath: string): Promise<CompilerOptions> {\n  try {\n    const configFileText = await readFile(configPath, { encoding: 'utf-8' })\n\n    const { config } = ts.parseConfigFileTextToJson(configPath, configFileText)\n\n    const { options } = ts.parseJsonConfigFileContent(config, ts.sys, path.dirname(configPath))\n    return options\n  } catch (error: any) {\n    const message = getErrorMessage(error)\n    logError(`Could not read ${configPath}: ${message}`)\n    throw error\n  }\n}\n\nfunction includesESFormat(formats?: LibraryFormats[]) {\n  return formats?.includes('es') ?? true\n}\n\nfunction getErrorMessage(error: unknown): string {\n  if (\n    typeof error === 'object' &&\n    error !== null &&\n    'message' in error &&\n    typeof error.message === 'string'\n  ) {\n    return error.message\n  }\n  return String(error)\n}\n\n/**\n * Remove any temporary `vite.config.ts.timestamp-*` files.\n */\nexport function cleanup(options: Partial<CommonOptions> = {}): Plugin {\n  const verbose = options.verbose ?? COMMON_DEFAULTS.verbose\n  return {\n    name: 'vite-plugin-lib:cleanup',\n    enforce: 'post',\n    closeBundle: () => {\n      let deletedCount = 0\n      readdirSync('.').forEach((file) => {\n        if (!file.startsWith('vite.config.ts.timestamp-')) {\n          return\n        }\n        rmSync(`./${file}`)\n        deletedCount++\n      })\n      if (verbose) {\n        log(`Removed ${deletedCount} temporary files.`)\n      }\n    },\n  }\n}\n"],"mappings":"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"}