{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,UAAU,EAEX,MAAM,YAAY,CAAA;AA2GnB,QAAA,MAAM,MAAM,EAAE,UAAoC,CAAA;AAClD,eAAe,MAAM,CAAA","sourcesContent":["// get the config and package and stuff\n\nimport chalk from 'chalk'\nimport { Minimatch } from 'minimatch'\nimport * as console from './console.js'\nimport fail from './fail.js'\nimport pkg from './package.js'\nimport sources from './sources.js'\nimport {\n  Package,\n  TshyConfig,\n  TshyConfigMaybeGlobExports,\n} from './types.js'\nimport validDialects from './valid-dialects.js'\nimport validExclude from './valid-exclude.js'\nimport validExports from './valid-exports.js'\nimport validExtraDialects from './valid-extra-dialects.js'\nimport validImports from './valid-imports.js'\nimport validProject from './valid-project.js'\nimport validCompiler from './valid-compiler.js'\n\nconst validBoolean = (e: Record<string, any>, name: string) => {\n  const v = e[name]\n  if (v === undefined || typeof v === 'boolean') return true\n  fail(`tshy.${name} must be a boolean value if specified, got: ` + v)\n  return process.exit(1)\n}\n\nconst isStringArray = (e: any): e is string[] =>\n  !!e && Array.isArray(e) && !e.some(e => typeof e !== 'string')\n\nconst validConfig = (e: any): e is TshyConfigMaybeGlobExports =>\n  !!e &&\n  typeof e === 'object' &&\n  (e.exports === undefined ||\n    typeof e.exports === 'string' ||\n    isStringArray(e.exports) ||\n    validExports(e.exports)) &&\n  (e.dialects === undefined || validDialects(e.dialects)) &&\n  (e.project === undefined || validProject(e.project)) &&\n  (e.exclude === undefined || validExclude(e.exclude)) &&\n  validExtraDialects(e) &&\n  validCompiler(e.compiler) &&\n  validBoolean(e, 'selfLink') &&\n  validBoolean(e, 'main') &&\n  validBoolean(e, 'liveDev')\n\nconst match = (e: string, pattern: Minimatch[]): boolean =>\n  pattern.some(m => m.match(e))\n\nconst parsePattern = (p: string | string[]): Minimatch[] =>\n  Array.isArray(p) ?\n    p.map(p => new Minimatch(p.replace(/^\\.\\//, '')))\n  : parsePattern([p])\n\nconst getConfig = (pkg: Package, sources: Set<string>): TshyConfig => {\n  const tshy: TshyConfigMaybeGlobExports =\n    validConfig(pkg.tshy) ? pkg.tshy : {}\n  let exportsConfig = tshy.exports\n  if (typeof exportsConfig === 'string' || Array.isArray(exportsConfig)) {\n    // Strip off the `./src` prefix and the extension\n    // exports: \"src/**/*.ts\" => exports: {\"./foo\": \"./src/foo.ts\"}\n    const exp: Exclude<TshyConfig['exports'], undefined> = {}\n    const pattern: string | string[] = exportsConfig\n    const m = parsePattern(pattern)\n    for (const e of sources) {\n      if (!match(e.replace(/^\\.\\//, ''), m)) continue\n      // index is main, anything else is a subpath\n      const sp =\n        /^\\.\\/src\\/index.([mc]?[jt]s|[jt]sx)$/.test(e) ? '.' : (\n          './' +\n          e.replace(/^\\.\\/src\\//, '').replace(/\\.([mc]?[tj]s|[jt]sx)$/, '')\n        )\n      exp[sp] = `./${e}`\n    }\n    /* c8 ignore start - should be impossible */\n    if (!validExports(exp)) {\n      console.error('invalid exports pattern, using default exports')\n      delete tshy.exports\n      exportsConfig = undefined\n    } else {\n      /* c8 ignore stop */\n      exp['./package.json'] = './package.json'\n      tshy.exports = exp\n    }\n  }\n  const config = { ...tshy } as TshyConfig\n  const ti = config as TshyConfig & { imports?: any }\n  if (ti.imports) {\n    console.debug(\n      chalk.cyan.dim('imports') + ' moving from tshy config to top level',\n    )\n    pkg.imports = {\n      ...pkg.imports,\n      ...ti.imports,\n    }\n    delete ti.imports\n  }\n  validImports(pkg)\n  if (!exportsConfig) {\n    const e: Exclude<TshyConfig['exports'], undefined> = {\n      './package.json': './package.json',\n    }\n    for (const i of sources) {\n      if (/^\\.\\/src\\/index\\.[^\\.]+$/.test(i)) {\n        e['.'] = i\n        break\n      }\n    }\n    config.exports = e\n    tshy.exports = e\n    exportsConfig = e\n  }\n  // return the filled out config, but leave the package.json\n  // exports as they were, as long as they turned out to be valid.\n  pkg.tshy = { ...tshy, exports: exportsConfig }\n  return config\n}\n\nconst config: TshyConfig = getConfig(pkg, sources)\nexport default config\n"]}