{
  "version": 3,
  "sources": ["../../src/internal/create-context.ts"],
  "sourceRoot": "file://",
  "sourcesContent": ["/**\n * @file Internal - createContext\n * @module mkbuild/internal/createContext\n */\n\nimport type { Context, SourceFile, Task } from '#src/interfaces'\nimport * as mkp from '#src/plugins'\nimport type { FileSystemAdapter } from '#src/types'\nimport fsa from '#src/utils/fs'\nimport IGNORE_PATTERNS from '#src/utils/ignore-patterns'\nimport loaders from '#src/utils/loaders'\nimport { EXT_DTS_REGEX } from '@flex-development/ext-regex'\nimport * as mlly from '@flex-development/mlly'\nimport * as pathe from '@flex-development/pathe'\nimport type { PackageJson } from '@flex-development/pkg-types'\nimport {\n  DOT,\n  cast,\n  get,\n  isString,\n  isUndefined,\n  keys,\n  omit,\n  regexp,\n  shake,\n  sift\n} from '@flex-development/tutils'\nimport * as esbuild from 'esbuild'\nimport fg from 'fast-glob'\nimport gitignore from './gitignore'\n\n/**\n * Creates a build context for the given build `task`.\n *\n * @todo throw if `absWorkingDir` is not a directory\n * @todo throw if `task.ext` is not a valid `OutputExtension`\n * @todo throw if `task.outdir` is not a directory\n * @todo throw if `task.source` is not a directory when not bundling\n * @todo throw if `task.source` is not a file when bundling\n *\n * @internal\n * @async\n *\n * @param {Partial<Task & { write?: boolean }>} task - Build task object\n * @param {PackageJson?} [pkg={}] - Relevant `package.json` object\n * @param {Partial<FileSystemAdapter>} [fs=fsa] - Custom file system methods\n * @return {Promise<Context>} Build context for `task`\n */\nasync function createContext(\n  task: Partial<Task & { write?: boolean }>,\n  pkg: PackageJson = {},\n  fs: Partial<FileSystemAdapter> = fsa\n): Promise<Context> {\n  const {\n    assetNames = 'assets/[name]-[hash]',\n    banner = {},\n    bundle = false,\n    chunkNames = 'chunks/[name]-[hash]',\n    clean = true,\n    color = true,\n    conditions = ['import', 'default'],\n    cwd = DOT,\n    drop,\n    dts = await (async () => {\n      try {\n        await mlly.resolveModule(\n          pathe.resolve(cwd, 'node_modules', 'typescript', 'package.json')\n        )\n        return true\n      } catch {\n        return false\n      }\n    })(),\n    external = bundle ? keys(get(pkg, 'peerDependencies', {})) : [],\n    footer = {},\n    format = 'esm',\n    ignore = IGNORE_PATTERNS,\n    inject,\n    loader = {},\n    logLimit = 10,\n    logOverride = {},\n    mainFields = ['module', 'main'],\n    name = '[name]',\n    outExtension = {},\n    outdir = 'dist',\n    pattern = mlly.PATTERN_CHARACTER.repeat(2),\n    pure,\n    platform = 'neutral',\n    plugins = [],\n    resolveExtensions = mlly.RESOLVE_EXTENSIONS,\n    source = bundle ? 'src/index' : 'src',\n    target,\n    tsconfig,\n    write = false,\n    createRequire = bundle && format === 'esm' && platform === 'node',\n    ext = format === 'cjs' ? '.cjs' : format === 'esm' ? '.mjs' : '.js',\n    outbase = bundle ? pathe.dirname(source) : source,\n    ...options\n  } = task\n\n  /**\n   * Absolute path to current working directory.\n   *\n   * @const {string} absWorkingDir\n   */\n  const absWorkingDir: string = pathe.resolve(cwd)\n\n  /**\n   * Relative paths to source files.\n   *\n   * **Note**: Files are relative to {@linkcode source} when {@linkcode bundle}\n   * is `false`. When enabled, files are relative to {@linkcode absWorkingDir}.\n   *\n   * @const {string[]} files\n   */\n  const files: string[] = await fg(\n    bundle\n      ? (!pathe.extname(source) && source + '.*') || /* c8 ignore next */ source\n      : isString(pattern)\n      ? pattern\n      : [...new Set<string>(pattern)],\n    {\n      absolute: false,\n      braceExpansion: true,\n      caseSensitiveMatch: true,\n      cwd: pathe.join(absWorkingDir, bundle ? '' : source),\n      dot: true,\n      extglob: true,\n      fs: omit(fs, ['readdir']),\n      globstar: true,\n      ignore: [\n        ...IGNORE_PATTERNS,\n        ...new Set([...(await gitignore(absWorkingDir)), ...ignore])\n      ],\n      objectMode: false,\n      onlyFiles: true,\n      stats: false,\n      throwErrorOnBrokenSymbolicLink: false,\n      unique: true\n    }\n  )\n\n  /**\n   * Boolean indicating if module specifiers should be fully specified.\n   *\n   * @const {boolean} fill\n   */\n  const fill: boolean = format === 'esm' ||\n    ['.cjs', '.mjs'].some(e => ext.endsWith(e))\n\n  // remove unsupported options that are not overridden\n  Reflect.deleteProperty(options, 'incremental')\n  Reflect.deleteProperty(options, 'outfile')\n  Reflect.deleteProperty(options, 'stdin')\n  Reflect.deleteProperty(options, 'watch')\n\n  return esbuild.context(\n    shake({\n      ...options,\n      absWorkingDir,\n      allowOverwrite: false,\n      assetNames,\n      banner,\n      bundle,\n      chunkNames,\n      color,\n      conditions: [...new Set(conditions)],\n      drop: [...new Set(drop)],\n      entryNames: `[dir]${pathe.sep}${name}`,\n      entryPoints: files\n        .map((file: string): SourceFile => {\n          return {\n            ext: cast(pathe.extname(file)),\n            file: bundle && outbase !== DOT\n              // outbase support for bundles (esbuild only uses outbase for\n              // multiple entries); https://esbuild.github.io/api/#outbase\n              ? file\n                .replace(new RegExp(`^${regexp(outbase)}`), '')\n                .replace(/^\\//, '')\n              : file,\n            path: pathe.join(absWorkingDir, source, bundle ? '' : file)\n          }\n        })\n        .map((sourcefile: SourceFile): string => {\n          return pathe.join(bundle ? outbase : source, sourcefile.file)\n        }),\n      external: bundle\n        ? [...new Set([...keys(get(pkg, 'peerDependencies', {})), ...external])]\n        : [],\n      footer,\n      format,\n      inject: [...new Set(inject)],\n      loader: { ...loaders(format, bundle), ...loader },\n      logLimit,\n      logOverride,\n      mainFields: [...new Set(mainFields)],\n      metafile: true as const,\n      outExtension: { ...outExtension, '.js': pathe.formatExt(ext) },\n      outbase,\n      outdir,\n      platform,\n      plugins: sift([\n        mkp.pkgtype(pkg),\n        clean && mkp.clean(fs),\n        createRequire && mkp.createRequire(),\n        dts !== false && mkp.dts(),\n        !!tsconfig && mkp.decorators(),\n        !!tsconfig && mkp.tsconfigPaths(),\n        fill && mkp.fullySpecified(),\n        ...plugins,\n        mkp.filter(dts === 'only' ? EXT_DTS_REGEX : undefined),\n        write && mkp.write(fs)\n      ]),\n      pure: [...new Set(pure)],\n      resolveExtensions: [...new Set(resolveExtensions)].map(pathe.formatExt),\n      target: isUndefined(target)\n        ? undefined\n        : isString(target)\n        ? target\n        : [...new Set(target)],\n      tsconfig,\n      write: false as const\n    })\n  )\n}\n\nexport default createContext\n"],
  "mappings": "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",
  "names": []
}
