{"version":3,"sources":["../index.ts","../../../node_modules/tsup/assets/cjs_shims.js","../installer.ts","../helpers.ts","../executable.ts","../package.ts","../paths.ts","../git.ts","../loaders.ts","../config.ts"],"sourcesContent":["import pc from \"picocolors\";\nimport envinfo from \"envinfo\";\nimport semver from \"semver\";\nimport { execFileSync } from \"child_process\";\nimport type { TemplateOrExtension } from \"./loaders.js\";\nexport type { TemplateOrExtension } from \"./loaders.js\";\nimport { createApp } from \"./installer.js\";\nimport { resolveExecutable } from \"./executable.js\";\nexport {\n  getPackagePath,\n  getTemplateDirPath,\n  getTemplateBaseDirPath,\n} from \"./paths.js\";\nexport { downloadRepository } from \"./git.js\";\nexport { loadTemplateCnaConfig } from \"./config.js\";\nexport type { CnaConfig, CnaCustomOption } from \"./config.js\";\n\nexport const checkNodeVersion = (\n  requiredVersion: string,\n  packageName: string,\n) => {\n  if (!semver.satisfies(process.version, requiredVersion)) {\n    console.error(\n      pc.red(\n        `You are running Node ${process.version}.\\n` +\n          `${packageName} requires Node ${requiredVersion}.\\n` +\n          \"Please update your version of Node.\",\n      ),\n    );\n    process.exit(1);\n  }\n};\n\nexport const checkForLatestVersion = async (packageName: string) => {\n  try {\n    const response = await fetch(\n      `https://registry.npmjs.org/-/package/${packageName}/dist-tags`,\n    );\n    if (!response.ok) {\n      throw new Error(\"Registry request failed\");\n    }\n    const json = (await response.json()) as unknown;\n    if (json && typeof json === \"object\" && \"latest\" in json) {\n      return String((json as Record<string, unknown>)[\"latest\"]);\n    }\n    return null;\n  } catch {\n    try {\n      return execFileSync(resolveExecutable(\"npm\"), [\n        \"view\",\n        packageName,\n        \"version\",\n      ])\n        .toString()\n        .trim();\n    } catch {\n      // ignore\n    }\n  }\n  return null;\n};\n\nexport const printEnvInfo = async () => {\n  console.log(pc.bold(\"\\nEnvironment Info:\"));\n  const info = await envinfo.run(\n    {\n      System: [\"OS\", \"CPU\", \"Memory\", \"Shell\"],\n      Binaries: [\"Node\", \"npm\", \"pnpm\", \"Yarn\", \"Bun\", \"Watchman\"],\n      Browsers: [\"Chrome\", \"Edge\", \"Internet Explorer\", \"Firefox\", \"Safari\"],\n    },\n    {\n      duplicates: true,\n      showNotFound: true,\n    },\n  );\n  console.log(info);\n  process.exit(0);\n};\n\nexport type CnaOptions = {\n  projectName: string;\n  info?: boolean;\n  verbose?: boolean;\n  packageManager?: string;\n  install?: boolean;\n  template?: string;\n  templatesOrExtensions?: TemplateOrExtension[];\n} & {\n  [key: string]: unknown;\n};\n\nexport type CnaOptionsTransform = (options: CnaOptions) => Promise<CnaOptions>;\n\nexport const createNodeApp = async (\n  programName: string,\n  options: CnaOptions,\n  transformOptions: CnaOptionsTransform,\n) => {\n  if (options.info) {\n    await printEnvInfo();\n  }\n\n  if (typeof options.projectName === \"undefined\") {\n    console.error(\"Please specify the project directory:\");\n    console.log(`  ${pc.cyan(programName)} ${pc.green(\"[project-directory]\")}`);\n    console.log();\n    console.log(\"For example:\");\n    console.log(`  ${pc.cyan(programName)} ${pc.green(\"my-app\")}`);\n    console.log();\n    console.log(`Run ${pc.cyan(`${programName} --help`)} to see all options.`);\n    process.exit(1);\n  }\n\n  const appOptions = await transformOptions(options);\n  await createApp({\n    ...appOptions,\n    name: appOptions.projectName,\n    installDependencies: options.install ?? true,\n  });\n};\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n  typeof document === \"undefined\" \n    ? new URL(`file:${__filename}`).href \n    : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n      ? document.currentScript.src \n      : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import lodash from \"lodash\";\n\nconst { isEmpty } = lodash;\nimport path from \"path\";\nimport fs from \"fs\";\nimport pc from \"picocolors\";\nimport os from \"os\";\nimport semver from \"semver\";\nimport { execFileSync } from \"child_process\";\n// Use dynamic import for simple-git to avoid bundlers injecting unsupported dynamic requires in ESM\nimport type { SimpleGit, SimpleGitOptions } from \"simple-git\";\n\nimport {\n  shouldUseYarn,\n  checkThatNpmCanReadCwd,\n  checkNpmVersion,\n  checkIfOnline,\n  shouldUsePnpm,\n  shouldUseBun,\n} from \"./helpers.js\";\nimport { loadPackages } from \"./package.js\";\nimport type { TemplateOrExtension } from \"./loaders.js\";\nimport { loadFiles } from \"./loaders.js\";\nimport { resolveExecutable } from \"./executable.js\";\n\nconst install = async (\n  root: string,\n  useYarn = false,\n  usePnpm = false,\n  useBun = false,\n  dependencies: string[] = [],\n  verbose = false,\n  isOnline = true,\n  isDevDependencies = false,\n) => {\n  let command: string;\n  let args: string[];\n\n  if (useYarn) {\n    command = \"yarnpkg\";\n    args = [\"add\", \"--ignore-workspace-root-check\"];\n    if (!isOnline) {\n      args.push(\"--offline\");\n    }\n    if (isDevDependencies) {\n      args.push(\"--dev\");\n    }\n    args.push(...dependencies);\n    args.push(\"--cwd\");\n    args.push(root);\n\n    if (!isOnline) {\n      console.log(pc.yellow(\"You appear to be offline.\"));\n      console.log(pc.yellow(\"Falling back to the local Yarn cache.\"));\n      console.log();\n    }\n  } else if (usePnpm) {\n    command = \"pnpm\";\n    args = [\"install\", \"--ignore-workspace\", \"--loglevel\", \"error\"];\n    if (isDevDependencies) {\n      args.push(\"--save-dev\");\n    } else {\n      args.push(\"--save\");\n    }\n\n    args.push(...dependencies);\n  } else if (useBun) {\n    command = \"bun\";\n    if (dependencies.length > 0) {\n      args = [\"add\"];\n      if (isDevDependencies) {\n        args.push(\"--dev\");\n      }\n      args.push(...dependencies);\n    } else {\n      args = [\"install\"];\n    }\n  } else {\n    command = \"npm\";\n    args = [\"install\", \"--loglevel\", \"error\"];\n    if (isDevDependencies) {\n      args.push(\"--save-dev\");\n    } else {\n      args.push(\"--save\");\n    }\n\n    args.push(...dependencies);\n  }\n\n  if (verbose) {\n    args.push(\"--verbose\");\n  }\n\n  try {\n    execFileSync(resolveExecutable(command), args, {\n      cwd: root,\n      stdio: \"inherit\",\n    });\n  } catch {\n    throw new Error(`${command} ${args.join(\" \")}`);\n  }\n};\n\nexport type RunOptions = {\n  root: string;\n  appName: string;\n  originalDirectory: string;\n  verbose?: boolean;\n  useYarn?: boolean;\n  usePnpm?: boolean;\n  useBun?: boolean;\n  templatesOrExtensions?: TemplateOrExtension[];\n  dependencies?: string[];\n  devDependencies?: string[];\n  installDependencies?: boolean;\n  runCommand: string;\n  installCommand: string;\n} & {\n  [key: string]: unknown;\n};\n\nconst runCommandInProjectDir = async (\n  root: string,\n  command: string,\n  args: string[] = [],\n  successMessage = \"Operation completed successfully.\",\n  errorMessage = \"Operation failed.\",\n) => {\n  const [executable, ...baseArgs] =\n    command === \"npm run\"\n      ? [\"npm\", \"run\"]\n      : command === \"pnpm run\"\n        ? [\"pnpm\", \"run\"]\n        : command === \"bun run\"\n          ? [\"bun\", \"run\"]\n          : [command];\n\n  try {\n    execFileSync(resolveExecutable(executable), [...baseArgs, ...args], {\n      cwd: root,\n      stdio: \"ignore\",\n    });\n    console.log(pc.green(successMessage));\n  } catch {\n    console.log();\n    console.log(pc.red(errorMessage));\n    console.log();\n  }\n};\n\nfunction extractNameAndVersion(dependencyString: string) {\n  // extract the name and version from the dependency string separated by @\n  // e.g. @types/react@^16\n  // => name: @types/react\n  // => version: ^16\n  // e.g. react@^16\n  // => name: react\n  // => version: ^16\n\n  // Find the last \"@\" symbol to split the string\n  const lastIndex = dependencyString.lastIndexOf(\"@\");\n\n  if (lastIndex !== -1) {\n    // Split the string into name and version parts\n    const name = dependencyString.substring(0, lastIndex); // Name\n    const version = dependencyString.substring(lastIndex + 1); // Version\n\n    return { name, version };\n  } else {\n    // If \"@\" is not present, treat the whole string as the name\n    return { name: dependencyString, version: \"\" };\n  }\n}\n\nconst run = async ({\n  root,\n  appName,\n  originalDirectory,\n  verbose = false,\n  useYarn = false,\n  usePnpm = false,\n  useBun = false,\n  templatesOrExtensions = [],\n  dependencies = [],\n  devDependencies = [],\n  installDependencies = true,\n  runCommand = \"\",\n  installCommand = \"\",\n  ...customOptions\n}: RunOptions) => {\n  const isOnline = useYarn ? await checkIfOnline(useYarn) : true;\n\n  if (isEmpty(templatesOrExtensions)) {\n    console.log();\n    console.log(\n      pc.yellow(\n        \"No templates or extensions specified to bootstrap application.\",\n      ),\n    );\n    console.log();\n    process.exit(0);\n  }\n\n  console.log();\n  console.log(\"Scaffolding project in \" + root + \"...\");\n\n  await loadFiles({\n    root,\n    templatesOrExtensions,\n    appName,\n    originalDirectory,\n    verbose,\n    useYarn,\n    usePnpm,\n    useBun,\n    runCommand,\n    installCommand,\n    ...customOptions,\n  });\n\n  console.log();\n  console.log(pc.green(\"Successfully scaffolded project.\"));\n  console.log();\n\n  if (installDependencies) {\n    console.log(\n      pc.green(\"Installing packages. This might take a couple of minutes.\"),\n    );\n    console.log(pc.green(\"Installing dependencies...\"));\n    console.log();\n    // Install dependencies\n    await install(\n      root,\n      useYarn,\n      usePnpm,\n      useBun,\n      dependencies,\n      verbose,\n      isOnline,\n      false,\n    );\n\n    if (devDependencies.length > 0) {\n      console.log();\n      console.log(pc.green(\"Installing devDependencies...\"));\n      console.log();\n      // Install devDependencies\n      await install(\n        root,\n        useYarn,\n        usePnpm,\n        useBun,\n        devDependencies,\n        verbose,\n        isOnline,\n        true,\n      );\n    }\n  } else {\n    console.log(pc.yellow(\"Skip package installation.\"));\n    const packageJson = JSON.parse(\n      fs.readFileSync(`${root}/package.json`, \"utf8\"),\n    );\n\n    const updateDependencies = (deps: string[]) => {\n      return deps.reduce(\n        (dep, elem) => {\n          const nextDep = dep;\n          if (/.+@(\\^|~)?[0-9a-zA-Z-.]+$/.test(elem)) {\n            const { name, version } = extractNameAndVersion(elem);\n            nextDep[name] = version;\n          } else {\n            nextDep[elem] = \"*\";\n          }\n          return nextDep;\n        },\n        {} as { [key: string]: string },\n      );\n    };\n\n    packageJson.dependencies = updateDependencies(dependencies);\n    packageJson.devDependencies = updateDependencies(devDependencies);\n\n    fs.writeFileSync(\n      path.join(root, \"package.json\"),\n      JSON.stringify(packageJson, null, 2) + os.EOL,\n    );\n\n    console.log();\n    console.log(pc.green(\"Successfully updated package.json.\"));\n    console.log(pc.yellow(`Run ${pc.cyan(installCommand)} to install.`));\n  }\n\n  console.log();\n  console.log(\"Initializing git repository...\");\n\n  try {\n    const { simpleGit } = (await import(\"simple-git\")) as unknown as {\n      simpleGit: (\n        baseDir?: string,\n        options?: Partial<SimpleGitOptions>,\n      ) => SimpleGit;\n    };\n    const git = simpleGit(root);\n    await git.init();\n    console.log(pc.green(\"Successfully initialized git repository.\"));\n  } catch {\n    console.log();\n    console.log(\n      pc.red(\n        \"Failed to initialize git repository. Run `git init` to initialize git repository after the process is completed.\",\n      ),\n    );\n    console.log();\n  }\n\n  if (installDependencies && isOnline) {\n    const packageJson = JSON.parse(\n      fs.readFileSync(`${root}/package.json`, \"utf8\"),\n    );\n\n    const runFormat = async () => {\n      try {\n        await runCommandInProjectDir(\n          root,\n          runCommand,\n          [\"format\"],\n          \"Successfully formatted code.\",\n          `Failed to format code. Run \\`${runCommand} format\\` to format code after the process is completed.`,\n        );\n      } catch {\n        // ignore\n      }\n    };\n\n    const runLintFix = async () => {\n      try {\n        await runCommandInProjectDir(\n          root,\n          runCommand,\n          [\"lint:fix\"],\n          \"Successfully fixed linting errors.\",\n          `Failed to fix linting errors. Run \\`${runCommand} lint:fix\\` to fix linting errors after the process is completed.`,\n        );\n      } catch {\n        // ignore\n      }\n    };\n\n    if (packageJson.scripts && packageJson.scripts[\"format\"]) {\n      await runFormat();\n    }\n    if (packageJson.scripts && packageJson.scripts[\"lint:fix\"]) {\n      await runLintFix();\n    }\n  }\n\n  // Print out instructions\n  console.log();\n  console.log(pc.green(\"Successfully created project \" + appName + \".\"));\n  console.log();\n  console.log(\"Done! Now run:\");\n  console.log();\n  console.log(pc.cyan(`  cd ${appName}`));\n  console.log(pc.cyan(`  ${installCommand}`));\n\n  const packageJson = JSON.parse(\n    fs.readFileSync(`${root}/package.json`, \"utf8\"),\n  );\n\n  const lookForScripts = [\"compose:up\", \"sls:offline\", \"dev\", \"start\"];\n\n  for (const script of lookForScripts) {\n    if (packageJson.scripts && packageJson.scripts[script]) {\n      console.log(pc.cyan(`  ${runCommand} ${script}`));\n      break;\n    }\n  }\n\n  console.log();\n  console.log(pc.green(\"Happy hacking!\"));\n};\n\nexport type CreateAppOptions = {\n  name: string;\n  verbose?: boolean;\n  packageManager?: string;\n  templatesOrExtensions?: TemplateOrExtension[];\n  installDependencies?: boolean;\n  ignorePackage?: boolean;\n} & {\n  [key: string]: unknown;\n};\n\nexport const createApp = async ({\n  name,\n  verbose = false,\n  templatesOrExtensions = [],\n  installDependencies = true,\n  ignorePackage = false,\n  ...customOptions\n}: CreateAppOptions) => {\n  const root = path.resolve(name);\n  const appName = path.basename(root);\n\n  fs.mkdirSync(name, {\n    recursive: true,\n  });\n\n  console.log(`Creating a new Node app in ${pc.green(root)}.`);\n  console.log();\n\n  const useYarn = customOptions.packageManager === \"yarn\" && shouldUseYarn();\n  const usePnpm = customOptions.packageManager === \"pnpm\" && shouldUsePnpm();\n  const useBun = customOptions.packageManager === \"bun\" && shouldUseBun();\n  const runCommand = useYarn\n    ? \"yarn\"\n    : usePnpm\n      ? \"pnpm run\"\n      : useBun\n        ? \"bun run\"\n        : \"npm run\";\n  const installCommand = useYarn\n    ? \"yarn\"\n    : usePnpm\n      ? \"pnpm install\"\n      : useBun\n        ? \"bun install\"\n        : \"npm install\";\n\n  const { packageJson, dependencies, devDependencies } = await loadPackages({\n    templatesOrExtensions,\n    appName,\n    usePnpm,\n    useYarn,\n    useBun,\n    runCommand,\n    ignorePackage,\n  });\n\n  fs.writeFileSync(\n    path.join(root, \"package.json\"),\n    JSON.stringify(packageJson, null, 2) + os.EOL,\n  );\n\n  const originalDirectory = process.cwd();\n  process.chdir(root);\n  if (!useYarn && !useBun && !checkThatNpmCanReadCwd()) {\n    process.exit(1);\n  }\n\n  if (!semver.satisfies(process.version, \">=18.0.0\")) {\n    console.log(\n      pc.yellow(\n        `You are using Node ${process.version} so the project will be bootstrapped with an old unsupported version of tools.\\n\\n` +\n          `Please update to Node 18 or higher for a better, fully supported experience.\\n`,\n      ),\n    );\n  }\n\n  if (!useYarn && !useBun) {\n    const npmInfo = checkNpmVersion();\n    if (!npmInfo.hasMinNpm) {\n      if (npmInfo.npmVersion) {\n        console.log(\n          pc.yellow(\n            `You are using npm ${npmInfo.npmVersion} so the project will be bootstrapped with an old unsupported version of tools.\\n\\n` +\n              `Please update to npm 3 or higher for a better, fully supported experience.\\n`,\n          ),\n        );\n      }\n    }\n  }\n\n  if (useYarn) {\n    let yarnUsesDefaultRegistry = true;\n    try {\n      yarnUsesDefaultRegistry =\n        execFileSync(resolveExecutable(\"yarnpkg\"), [\n          \"config\",\n          \"get\",\n          \"registry\",\n        ])\n          .toString()\n          .trim() === \"https://registry.yarnpkg.com\";\n    } catch {\n      // ignore\n    }\n    if (false && yarnUsesDefaultRegistry) {\n      fs.cpSync(\n        require.resolve(\"./yarn.lock.cached\"),\n        path.join(root, \"yarn.lock\"),\n        { force: true },\n      );\n    }\n  }\n\n  return run({\n    root,\n    appName,\n    originalDirectory,\n    verbose,\n    useYarn,\n    usePnpm,\n    useBun,\n    templatesOrExtensions,\n    dependencies,\n    devDependencies,\n    installDependencies,\n    runCommand,\n    installCommand,\n    ...customOptions,\n  });\n};\n","import { execFileSync } from \"child_process\";\nimport spawn from \"cross-spawn\";\nimport pc from \"picocolors\";\nimport semver from \"semver\";\nimport dns from \"dns\";\nimport { URL } from \"url\";\nimport { resolveExecutable } from \"./executable.js\";\n\nexport const toCamelCase = (str: string) => {\n  // Lower cases the string\n  return (\n    str\n      .toLowerCase()\n      // Replaces any - or _ characters with a space\n      .replace(/[-_]+/g, \" \")\n      // Removes any non alphanumeric characters\n      .replace(/[^\\w\\s]/g, \"\")\n      // Uppercases the first character in each group immediately following a space\n      // (delimited by spaces)\n      .replace(/ (.)/g, ($1) => {\n        return $1.toUpperCase();\n      })\n      // Removes spaces\n      .replace(/ /g, \"\")\n  );\n};\n\nexport const isUsingYarn = () => {\n  return (process.env.npm_config_user_agent || \"\").indexOf(\"yarn\") === 0;\n};\n\nexport const shouldUseYarn = () => {\n  const { hasMinYarnPnp, hasMaxYarnPnp, yarnVersion } = checkYarnVersion();\n\n  if (!hasMinYarnPnp) {\n    console.log(\n      pc.yellow(\n        `You are using yarn version ${pc.bold(\n          yarnVersion,\n        )} which is not supported yet. ` +\n          `To use Yarn, install v1.12.0 or higher and lower than v2.0.0. ` +\n          `See https://yarnpkg.com for instructions on how to update.`,\n      ),\n    );\n    return false;\n  }\n\n  if (!hasMaxYarnPnp) {\n    console.log(\n      pc.yellow(\n        `You are using a pre-release version of Yarn which is not supported yet. ` +\n          `To use Yarn, install v1.12.0 or higher and lower than v2.0.0. ` +\n          `See https://yarnpkg.com for instructions on how to update.`,\n      ),\n    );\n    return false;\n  }\n\n  return true;\n};\n\nexport const shouldUsePnpm = () => {\n  const { hasMinPnpm, pnpmVersion } = checkPnpmVersion();\n\n  if (!hasMinPnpm) {\n    console.log(\n      pc.yellow(\n        `You are using pnpm version ${pc.bold(\n          pnpmVersion,\n        )} which is not supported yet. ` +\n          `To use pnpm, install v5.0.0 or higher. ` +\n          `See https://pnpm.js.org for instructions on how to update.`,\n      ),\n    );\n    return false;\n  }\n\n  return true;\n};\n\nexport const shouldUseBun = () => {\n  const { hasMinBun, bunVersion } = checkBunVersion();\n\n  if (!hasMinBun) {\n    console.log(\n      pc.yellow(\n        `You are using bun version ${pc.bold(\n          bunVersion,\n        )} which is not supported yet. ` +\n          `To use bun, install v1.0.0 or higher. ` +\n          `See https://bun.sh for instructions on how to install.`,\n      ),\n    );\n    return false;\n  }\n\n  return true;\n};\n\nexport const checkThatNpmCanReadCwd = () => {\n  const cwd = process.cwd();\n  let childOutput = null;\n  try {\n    // Note: intentionally using spawn over exec since\n    // the problem doesn't reproduce otherwise.\n    // `npm config list` is the only reliable way I could find\n    // to reproduce the wrong path. Just printing process.cwd()\n    // in a Node process was not enough.\n    childOutput = spawn.sync(\"npm\", [\"config\", \"list\"]).output.join(\"\");\n  } catch {\n    // Something went wrong spawning node.\n    // Not great, but it means we can't do this check.\n    // We might fail later on, but let's continue.\n    return true;\n  }\n  if (typeof childOutput !== \"string\") {\n    return true;\n  }\n  const lines = childOutput.split(\"\\n\");\n  // `npm config list` output includes the following line:\n  // \"; cwd = C:\\path\\to\\current\\dir\" (unquoted)\n  // I couldn't find an easier way to get it.\n  const prefix = \"; cwd = \";\n  const line = lines.find((line) => line.startsWith(prefix));\n  if (typeof line !== \"string\") {\n    // Fail gracefully. They could remove it.\n    return true;\n  }\n  const npmCWD = line.substring(prefix.length);\n  if (npmCWD === cwd) {\n    return true;\n  }\n  console.error(\n    pc.red(\n      `Could not start an npm process in the right directory.\\n\\n` +\n        `The current directory is: ${pc.bold(cwd)}\\n` +\n        `However, a newly started npm process runs in: ${pc.bold(npmCWD)}\\n\\n` +\n        `This is probably caused by a misconfigured system terminal shell.`,\n    ),\n  );\n  if (process.platform === \"win32\") {\n    console.error(\n      pc.red(`On Windows, this can usually be fixed by running:\\n\\n`) +\n        `  ${pc.cyan(\n          \"reg\",\n        )} delete \"HKCU\\\\Software\\\\Microsoft\\\\Command Processor\" /v AutoRun /f\\n` +\n        `  ${pc.cyan(\n          \"reg\",\n        )} delete \"HKLM\\\\Software\\\\Microsoft\\\\Command Processor\" /v AutoRun /f\\n\\n` +\n        pc.red(`Try to run the above two lines in the terminal.\\n`) +\n        pc.red(\n          `To learn more about this problem, read: https://blogs.msdn.microsoft.com/oldnewthing/20071121-00/?p=24433/`,\n        ),\n    );\n  }\n  return false;\n};\n\nexport const checkPnpmVersion = () => {\n  const minPnpm = \"5.0.0\";\n  let hasMinPnpm = false;\n  let pnpmVersion = null;\n  try {\n    pnpmVersion = execFileSync(resolveExecutable(\"pnpm\"), [\"--version\"])\n      .toString()\n      .trim();\n    if (semver.valid(pnpmVersion)) {\n      hasMinPnpm = semver.gte(pnpmVersion, minPnpm);\n    } else {\n      // Handle non-semver compliant pnpm version strings, which pnpm currently\n      // uses for nightly builds. The regex truncates anything after the first\n      // dash. See #5362.\n      const trimmedPnpmVersionMatch = /^(.*?)[-+].+$/.exec(pnpmVersion);\n      if (trimmedPnpmVersionMatch && trimmedPnpmVersionMatch[1]) {\n        hasMinPnpm = semver.gte(trimmedPnpmVersionMatch[1], minPnpm);\n      }\n    }\n  } catch {\n    // Ignore errors.\n  }\n  return { hasMinPnpm, pnpmVersion };\n};\n\nexport const checkBunVersion = () => {\n  const minBun = \"1.0.0\";\n  let hasMinBun = false;\n  let bunVersion = null;\n  try {\n    bunVersion = execFileSync(resolveExecutable(\"bun\"), [\"--version\"])\n      .toString()\n      .trim();\n    if (semver.valid(bunVersion)) {\n      hasMinBun = semver.gte(bunVersion, minBun);\n    }\n  } catch {\n    // ignore\n  }\n  return { hasMinBun, bunVersion };\n};\n\nexport const checkYarnVersion = () => {\n  const minYarnPnp = \"1.12.0\";\n  const maxYarnPnp = \"2.0.0\";\n  let hasMinYarnPnp = false;\n  let hasMaxYarnPnp = false;\n  let yarnVersion = null;\n  try {\n    yarnVersion = execFileSync(resolveExecutable(\"yarnpkg\"), [\"--version\"])\n      .toString()\n      .trim();\n    if (semver.valid(yarnVersion)) {\n      hasMinYarnPnp = semver.gte(yarnVersion, minYarnPnp);\n      hasMaxYarnPnp = semver.lt(yarnVersion, maxYarnPnp);\n    } else {\n      // Handle non-semver compliant yarn version strings, which yarn currently\n      // uses for nightly builds. The regex truncates anything after the first\n      // dash. See #5362.\n      const trimmedYarnVersionMatch = /^(.+?)[-+].+$/.exec(yarnVersion);\n      if (trimmedYarnVersionMatch) {\n        const trimmedYarnVersion = trimmedYarnVersionMatch.pop();\n        if (trimmedYarnVersion) {\n          hasMinYarnPnp = semver.gte(trimmedYarnVersion, minYarnPnp);\n          hasMaxYarnPnp = semver.lt(trimmedYarnVersion, maxYarnPnp);\n        }\n      }\n    }\n  } catch {\n    // ignore\n  }\n  return {\n    hasMinYarnPnp: hasMinYarnPnp,\n    hasMaxYarnPnp: hasMaxYarnPnp,\n    yarnVersion: yarnVersion,\n  };\n};\n\nexport const checkNpmVersion = () => {\n  let hasMinNpm = false;\n  let npmVersion = null;\n  try {\n    npmVersion = execFileSync(resolveExecutable(\"npm\"), [\"--version\"])\n      .toString()\n      .trim();\n    hasMinNpm = semver.gte(npmVersion, \"6.0.0\");\n  } catch {\n    // ignore\n  }\n  return {\n    hasMinNpm: hasMinNpm,\n    npmVersion: npmVersion,\n  };\n};\n\nconst getProxy = () => {\n  if (process.env.HTTPS_PROXY) {\n    return process.env.HTTPS_PROXY;\n  }\n  try {\n    // Trying to read https-proxy from .npmrc\n    const httpsProxy = execFileSync(resolveExecutable(\"npm\"), [\n      \"config\",\n      \"get\",\n      \"https-proxy\",\n    ])\n      .toString()\n      .trim();\n    return httpsProxy !== \"null\" ? httpsProxy : undefined;\n  } catch {\n    // ignore\n  }\n  return \"\";\n};\n\nexport const checkIfOnline = (useYarn?: boolean) => {\n  if (!useYarn) {\n    // Don't ping the Yarn registry.\n    // We'll just assume the best case.\n    return Promise.resolve(true);\n  }\n\n  return new Promise<boolean>((resolve) => {\n    dns.lookup(\"registry.yarnpkg.com\", (err) => {\n      let proxy;\n      if (err != null && (proxy = getProxy())) {\n        // If a proxy is defined, we likely can't resolve external hostnames.\n        // Try to resolve the proxy name as an indication of a connection.\n        dns.lookup(new URL(proxy).hostname, (proxyErr) => {\n          resolve(!proxyErr);\n        });\n      } else {\n        resolve(!err);\n      }\n    });\n  });\n};\n","export const resolveExecutable = (bin: string) =>\n  process.platform === \"win32\" ? `${bin}.cmd` : bin;\n","// Removed unused eslint-disable (global-require) after migration to flat config\nimport { existsSync } from \"fs\";\nimport merge from \"lodash.merge\";\nimport type { TemplateOrExtension } from \"./loaders.js\";\nimport { getPackagePath } from \"./paths.js\";\n\n// Type for setup options\ntype GetInstallableSetupOptions = {\n  dependencies?: Record<string, string>;\n  devDependencies?: Record<string, string>;\n  [key: string]: unknown;\n};\n\n// Helper function to prepare installable setup\nconst getInstallableSetup = ({\n  dependencies,\n  devDependencies,\n  ...packageJson\n}: GetInstallableSetupOptions) => {\n  const getInstallableDeps = (deps = {}) =>\n    Object.entries(deps).map(([dep, version]) => `${dep}@${version}`);\n\n  return {\n    packageJson,\n    dependencies: getInstallableDeps(dependencies),\n    devDependencies: getInstallableDeps(devDependencies),\n  };\n};\n\n// Helper function to require a module if it exists, or throw an error\nconst requireIfExists = (path: string) => {\n  if (existsSync(path)) {\n    return require(path);\n  }\n\n  throw new Error(`File ${path} does not exist`);\n};\n\n// Options for loading packages\nexport type LoadPackagesOptions = {\n  templatesOrExtensions?: TemplateOrExtension[];\n  ignorePackage?: boolean;\n  [key: string]: unknown;\n};\n\n/**\n * loadPackages loads the templatesOrExtensions packages and merge them into a single package.json\n * @param opts.templatesOrExtensions - templatesOrExtensions to load\n * @param opts.ignorePackage - ignore package.json file\n * @param opts.config - config to pass to the templatesOrExtensions package module\n * @returns\n */\nexport const loadPackages = async ({\n  templatesOrExtensions = [],\n  ignorePackage: globalIgnorePackage = false,\n  ...config\n}: LoadPackagesOptions) => {\n  // Load and merge template packages concurrently\n  const setup = await Promise.all(\n    templatesOrExtensions.map(async ({ url: templateOrExtension }) => {\n      try {\n        // Try to load and merge template package\n        const template = requireIfExists(\n          await getPackagePath(templateOrExtension, \"template.json\"),\n        );\n        return template.package || {}; // Use an empty object if template.json is not found\n      } catch {\n        return {}; // Ignore if template.json is not found\n      }\n    }),\n  );\n\n  // Merge all the setup results from templates\n  const mergedSetup = merge(\n    {\n      name: config.appName,\n      dependencies: {},\n      devDependencies: {},\n      scripts: {},\n    },\n    ...setup,\n  );\n\n  // Load and merge package.json files concurrently\n  const finalSetup = await Promise.all(\n    templatesOrExtensions.map(\n      async ({ url: templateOrExtension, ignorePackage }) => {\n        try {\n          // Try to load and merge package.json\n          const templateOrExtensionPackageJson = requireIfExists(\n            await getPackagePath(\n              templateOrExtension,\n              \"package.json\",\n              globalIgnorePackage || ignorePackage,\n            ),\n          );\n          return templateOrExtensionPackageJson; // Use an empty object if package.json is not found\n        } catch {\n          return {}; // Ignore if package.json is not found\n        }\n      },\n    ),\n  );\n\n  // Resolve package updates using package module concurrently\n  const resolvedSetup = await Promise.all(\n    templatesOrExtensions.map(async ({ url: templateOrExtension }) => {\n      try {\n        // Try to resolve package updates using package module\n        const resolveTemplateOrExtensionPackage = requireIfExists(\n          await getPackagePath(templateOrExtension),\n        );\n        return resolveTemplateOrExtensionPackage(mergedSetup, config); // Use an empty object if resolution fails\n      } catch {\n        return {}; // Ignore if the resolution function fails\n      }\n    }),\n  );\n\n  // Merge all setup results\n  const packageJson = merge(mergedSetup, ...finalSetup, ...resolvedSetup);\n\n  // Prepare the final installable setup\n  return getInstallableSetup({\n    ...packageJson,\n    name: config.appName,\n  });\n};\n","import fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport debug from \"debug\";\nimport { downloadRepository } from \"./git.js\";\n\nconst log = debug(\"cna:paths\");\n\nconst moduleDir =\n  typeof __dirname !== \"undefined\"\n    ? __dirname\n    : path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Parse a template / extension URL (supports GitHub style and file:// URLs).\n * For GitHub style URLs we accept:\n *   https://github.com/<org>/<repo>\n *   https://github.com/<org>/<repo>/tree/<branch>/<subdir?>?ignorePackage=true\n * For local file templates:\n *   file:///absolute/path/to/template\n *   file:///absolute/path/to/repo?subdir=templates/react-vite-starter\n * Query params:\n *   - ignorePackage=true  -> ignore package.json from template\n *   - subdir=<relativePath> (only for file://) -> pick subdirectory\n */\nconst solveValuesFromTemplateOrExtensionUrl = (templateOrExtension: string) => {\n  const url = new URL(templateOrExtension);\n  const ignorePackage = url.searchParams.get(\"ignorePackage\") === \"true\";\n\n  if (url.protocol === \"file:\") {\n    // Handle platform specific absolute paths\n    let pathname = decodeURIComponent(url.pathname);\n    // On Windows a file URL looks like file:///C:/path -> pathname /C:/path\n    if (process.platform === \"win32\" && /^\\/[A-Za-z]:\\//.test(pathname)) {\n      pathname = pathname.slice(1); // drop leading slash\n    }\n    const subdirParam = url.searchParams.get(\"subdir\") || \"\";\n    return {\n      url: templateOrExtension, // not used for git cloning when file://\n      branch: \"\",\n      subdir: subdirParam,\n      protocol: url.protocol,\n      host: \"\", // host is unused for file\n      pathname,\n      ignorePackage,\n    };\n  }\n\n  const origin = `${url.protocol}//${url.host}`;\n  // GitHub style path splitting: /org/repo[/tree/<branch>/<subdir...>]\n  const parts = url.pathname.slice(1).split(\"/\");\n  const [org, repo] = parts;\n  let branch = \"\";\n  let subdir = \"\";\n  if (parts[2] === \"tree\") {\n    branch = parts[3] || \"\";\n    subdir = parts.slice(4).join(\"/\");\n  }\n  return {\n    url: `${origin}/${org}/${repo}`,\n    branch,\n    subdir,\n    protocol: url.protocol,\n    host: url.host,\n    pathname: url.pathname,\n    ignorePackage,\n  };\n};\n\ntype SolveRepositoryPathOptions = {\n  url: string;\n  branch?: string;\n  subdir?: string;\n};\n\nconst solveRepositoryPath = async ({\n  url,\n  branch,\n  subdir,\n}: SolveRepositoryPathOptions) => {\n  const targetId = Buffer.from(`${url}#${branch}`).toString(\"base64\");\n  const targetWithSubdir = Buffer.from(`${url}#${branch}#${subdir}`).toString(\n    \"base64\",\n  );\n  const target = path.join(os.homedir(), \".cna\", targetWithSubdir);\n\n  // Test helper: allow skipping actual git clone to prevent network / credential prompts\n  if (process.env.CNA_SKIP_GIT === \"1\") {\n    return { dir: target, subdir };\n  }\n\n  await downloadRepository({\n    url,\n    branch: branch || \"\",\n    target,\n    targetId,\n  });\n\n  return { dir: target, subdir };\n};\n\ntype SolvedTemplatePath = {\n  dir: string;\n  // subdir can be empty string or undefined\n  subdir: string | undefined;\n  ignorePackage: boolean | undefined;\n};\n\nconst solveTemplateOrExtensionPath = async (\n  templateOrExtension: string,\n): Promise<SolvedTemplatePath> => {\n  let parsed: ReturnType<typeof solveValuesFromTemplateOrExtensionUrl>;\n  try {\n    parsed = solveValuesFromTemplateOrExtensionUrl(templateOrExtension);\n  } catch {\n    // Fallback to an internal templatesOrExtensions directory (legacy behavior)\n    log(\"Falling back to legacy template path for: %s\", templateOrExtension);\n    return {\n      dir: path.resolve(\n        moduleDir,\n        \"..\",\n        \"templatesOrExtensions\",\n        templateOrExtension,\n      ),\n      subdir: undefined,\n      ignorePackage: undefined,\n    };\n  }\n\n  const { url, branch, subdir, protocol, pathname, ignorePackage } = parsed;\n\n  if (protocol === \"file:\") {\n    return { dir: pathname, subdir, ignorePackage };\n  }\n\n  const gitData = await solveRepositoryPath({ url, branch, subdir });\n  return { dir: gitData.dir, subdir: gitData.subdir, ignorePackage };\n};\n\nexport const getPackagePath = async (\n  templateOrExtension: string,\n  name = \"package\",\n  ignorePackage = false,\n) => {\n  const {\n    dir,\n    subdir,\n    ignorePackage: templateOrExtensionIgnorePackage,\n  } = await solveTemplateOrExtensionPath(templateOrExtension);\n\n  if (\n    name === \"package.json\" &&\n    (ignorePackage || templateOrExtensionIgnorePackage)\n  ) {\n    throw new Error(\n      \"package.json should be ignored for file templateOrExtension\",\n    );\n  }\n\n  if (subdir) {\n    return path.resolve(dir, subdir, name);\n  }\n\n  return path.resolve(dir, name);\n};\n\n/**\n * Returns the base directory for a template URL — i.e. the directory that\n * CONTAINS the optional `template/` subdirectory. This is where cna.config.json\n * should be placed by template authors.\n */\nexport const getTemplateBaseDirPath = async (\n  templateOrExtensionUrl: string,\n): Promise<string> => {\n  try {\n    const { dir, subdir = \"\" } = await solveTemplateOrExtensionPath(\n      templateOrExtensionUrl,\n    );\n    return path.resolve(dir, subdir);\n  } catch {\n    return \"\";\n  }\n};\n\nexport const getTemplateDirPath = async (templateOrExtensionUrl: string) => {\n  const { dir, subdir = \"\" } = await solveTemplateOrExtensionPath(\n    templateOrExtensionUrl,\n  );\n  let templateDirPath = path.resolve(dir, subdir);\n\n  // If `${templateDirPath}/template` is a directory, return it. Otherwise, return `${templateDirPath}`\n  const templateDirPathWithTemplate = path.resolve(templateDirPath, \"template\");\n\n  return new Promise<string>((resolve) => {\n    fs.stat(templateDirPathWithTemplate, (_err, stats) => {\n      if (_err) {\n        resolve(templateDirPath);\n        return;\n      }\n\n      if (stats.isDirectory()) {\n        templateDirPath = templateDirPathWithTemplate;\n      }\n\n      resolve(templateDirPath);\n    });\n  });\n};\n","import os from \"os\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport debug from \"debug\";\nimport { simpleGit, type SimpleGit, type CloneOptions } from \"simple-git\";\nimport * as fse from \"fs-extra\"; // Import fs-extra for advanced file operations\n\nconst log = debug(\"cna:git\");\n\nconst formatRepositoryDownloadError = (error: unknown, url: string): string => {\n  const message = error instanceof Error ? error.message : String(error);\n\n  if (/not found|404|repository not found/i.test(message)) {\n    return [\n      `Error: Could not fetch template from '${url}'.`,\n      \"  → The URL returned HTTP 404 or the repository was not found. Please verify the URL is correct.\",\n      \"  → Run 'npx create-awesome-node-app --list-templates' to see available templates.\",\n    ].join(\"\\n\");\n  }\n\n  if (/403|authentication|permission denied|access denied/i.test(message)) {\n    return [\n      `Error: Could not fetch template from '${url}'.`,\n      \"  → Access denied (HTTP 403). Check that the repository is public or you have access.\",\n      \"  → Run 'npx create-awesome-node-app --list-templates' to see available templates.\",\n    ].join(\"\\n\");\n  }\n\n  if (/ECONNREFUSED|ENOTFOUND|ETIMEDOUT|network/i.test(message)) {\n    return [\n      `Error: Could not fetch template from '${url}'.`,\n      \"  → Could not reach the repository. Please check your internet connection.\",\n      \"  → Run 'npx create-awesome-node-app --list-templates' to see available templates.\",\n    ].join(\"\\n\");\n  }\n\n  return [\n    `Error: Could not fetch template from '${url}'.`,\n    `  → ${message}`,\n    \"  → Run 'npx create-awesome-node-app --list-templates' to see available templates.\",\n  ].join(\"\\n\");\n};\n\n/**\n * filter .git folder\n */\nconst filterGit = (src: string) => {\n  return !/(\\\\|\\/)\\.git\\b/.test(src);\n};\n\nexport type DownloadRepositoryOptions = {\n  url?: string;\n  target: string;\n  cacheDir?: string;\n  branch?: string | undefined;\n  offline?: boolean;\n  targetId?: string;\n};\n\n// Create a Map to store ongoing Git operations\nconst gitOperationMap = new Map<string, Promise<void>>();\n\n// Create a Map to store completed targetIds\nconst completedTargetIds = new Map<string, boolean>();\n\n/**\n * @param opts options\n * @param opts.url The git repository url.\n * @param opts.targetId The target id. Default is `Buffer.from(`${gitUrl}@${branch}`).toString(\"base64\")`\n * @param opts.target The target folder.\n * @param opts.cacheDir? Default `~/.cache/cna/${name}`, the folder\n * @param opts.branch? Default 'main'. Git branch.\n * @param opts.offline? use cached files, and don't update.\n */\nexport const downloadRepository = async ({\n  url = \"\",\n  offline = false,\n  target = \"./\",\n  branch = \"main\",\n  targetId,\n  cacheDir: optsCacheDir,\n}: DownloadRepositoryOptions) => {\n  const absoluteTarget = path.isAbsolute(target)\n    ? target\n    : path.resolve(target);\n  const targetExistedBefore = fs.existsSync(absoluteTarget);\n\n  const isGithub = /^[^/]+\\/[^/]+$/.test(url);\n  const gitUrl = isGithub ? `https://github.com/${url}` : url;\n  const id = targetId || Buffer.from(`${gitUrl}@${branch}`).toString(\"base64\");\n  let cacheDir = optsCacheDir || path.join(os.homedir(), \".cache\", \"cna\", id);\n\n  cacheDir = path.isAbsolute(cacheDir) ? cacheDir : path.resolve(cacheDir);\n\n  log(\"cache folder: %s\", cacheDir);\n\n  // Check if the targetId has already been completed (checkout done)\n  if (completedTargetIds.has(id)) {\n    log(\n      `Git checkout for target ID '${id}' has already been completed. Skipping.`,\n    );\n    // Use fs-extra's copy method with filter\n    await fse.copy(cacheDir, absoluteTarget, {\n      overwrite: true,\n      filter: filterGit,\n    });\n    return;\n  }\n\n  // Check if there is an ongoing Git operation with the same target ID\n  if (gitOperationMap.has(id)) {\n    log(\n      `Git operation for target ID '${id}' is already in progress. Waiting...`,\n    );\n    await gitOperationMap.get(id);\n    log(`Git operation for target ID '${id}' has completed.`);\n    return;\n  }\n\n  // Create a new promise for the Git operation and store it in the map\n  const gitOperationPromise = (async () => {\n    let git: SimpleGit = simpleGit();\n    const cloneOptions: CloneOptions = {\n      \"--depth\": 1,\n      \"--branch\": branch,\n      \"--single-branch\": null,\n      \"--no-tags\": null,\n    };\n\n    try {\n      const cached = fs.existsSync(cacheDir);\n\n      if (!cached) {\n        log(\"Cloning repository...\");\n        await git.clone(gitUrl, cacheDir, cloneOptions);\n      }\n\n      git = simpleGit(cacheDir);\n\n      if (!offline) {\n        log(\"Pulling repository...\");\n        await git.checkout([\"-f\", branch]);\n        await git.pull();\n      }\n\n      // Use fs-extra's copy method with filter\n      await fse.copy(cacheDir, absoluteTarget, {\n        overwrite: true,\n        filter: filterGit,\n      });\n\n      // Mark the targetId as completed\n      completedTargetIds.set(id, true);\n    } catch (error) {\n      if (!targetExistedBefore && fs.existsSync(absoluteTarget)) {\n        try {\n          fse.removeSync(absoluteTarget);\n          log(\"Cleaned up partially created directory: %s\", absoluteTarget);\n        } catch (cleanupErr) {\n          log(\"Failed to clean up directory: %s\", cleanupErr);\n        }\n      }\n\n      throw new Error(formatRepositoryDownloadError(error, gitUrl));\n    } finally {\n      // Remove the promise from the map when the operation is complete\n      gitOperationMap.delete(id);\n    }\n  })();\n\n  gitOperationMap.set(id, gitOperationPromise);\n\n  // Wait for the Git operation to complete\n  await gitOperationPromise;\n};\n","import fs from \"fs\";\nimport pc from \"picocolors\";\nimport { readdirp } from \"readdirp\";\nimport { dirname } from \"path\";\nimport { getTemplateDirPath } from \"./paths.js\";\nimport { promisify } from \"util\";\nimport lodash from \"lodash\";\n\nconst { template } = lodash;\n\nconst writeFileAsync = promisify(fs.writeFile);\nconst copyFileAsync = promisify(fs.copyFile);\n\n// Token used inside templates to denote the source directory.\n// Templates name a directory literally `[src]` and files inside like `[src]/App.tsx.template`.\n// We map the prefix `[src]/` to the selected srcDir (e.g. `src/`).\nconst SRC_PATH_PATTERN = \"[src]/\";\nconst DEFAULT_SRC_PATH = \"src/\";\n\nconst getSrcDirPattern = (srcDir: string) =>\n  srcDir === \".\" ? \"\" : srcDir + \"/\";\n\nconst makeDirectory = (dirPath: string) => {\n  if (!fs.existsSync(dirPath)) {\n    fs.mkdirSync(dirPath, { recursive: true });\n  }\n};\n\nconst getModeFromPath = (path = \"\") => {\n  const matchExts = (...exts: string[]) =>\n    exts.find((ext) => path.endsWith(ext));\n\n  if (matchExts(\".append\")) {\n    return \"append\";\n  }\n  if (matchExts(\".append.template\", \".template.append\")) {\n    return \"appendTemplate\";\n  }\n  if (matchExts(\".template\")) {\n    return \"copyTemplate\";\n  }\n  return \"copy\";\n};\n\ntype FileLoaderOptions = {\n  root: string;\n  templateDir: string;\n  appName: string;\n  originalDirectory: string;\n  verbose: boolean;\n  useYarn?: boolean;\n  usePnpm?: boolean;\n  useBun?: boolean;\n  srcDir: string;\n  mode?: string;\n  runCommand: string;\n  installCommand: string;\n} & {\n  [key: string]: unknown;\n};\n\nexport type FileLoader = (\n  options: FileLoaderOptions,\n) => (entry: { path: string }) => Promise<void>;\n\n// Batched file copy operation\nconst batchedCopyFiles = async (\n  operations: { src: string; dest: string; verbose: boolean }[],\n) => {\n  const batchedPromises = operations.map(async (operation) => {\n    try {\n      makeDirectory(dirname(operation.dest));\n      await copyFileAsync(operation.src, operation.dest);\n      // Preserve original file permissions (e.g. executable bit on husky hooks)\n      try {\n        const srcStat = await promisify(fs.stat)(operation.src);\n        await promisify(fs.chmod)(operation.dest, srcStat.mode);\n      } catch {\n        // Non-critical: file was already copied\n      }\n      if (operation.verbose) {\n        console.log(\n          pc.green(\n            `Added \"${operation.dest}\" from \"${operation.src}\" successfully`,\n          ),\n        );\n      }\n    } catch (err) {\n      console.log(\n        pc.red(`Cannot copy file ${operation.src} to ${operation.dest}`),\n      );\n      if (operation.verbose) {\n        console.log(pc.red(String(err)));\n      }\n      throw err;\n    }\n  });\n\n  await Promise.all(batchedPromises);\n};\n\n// Batched file write operation\nconst batchedWriteFiles = async (\n  operations: {\n    path: string;\n    content: string;\n    flag: string;\n    verbose: boolean;\n    mode?: number;\n  }[],\n) => {\n  const batchedPromises = operations.map(async (operation) => {\n    try {\n      makeDirectory(dirname(operation.path));\n      await writeFileAsync(operation.path, operation.content, {\n        flag: operation.flag,\n        mode: operation.mode,\n      });\n      if (operation.verbose) {\n        console.log(pc.green(`Added \"${operation.path}\" successfully`));\n      }\n    } catch (err) {\n      console.log(pc.red(`Cannot write file ${operation.path}`));\n      if (operation.verbose) {\n        console.log(pc.red(String(err)));\n      }\n      throw err;\n    }\n  });\n\n  await Promise.all(batchedPromises);\n};\n\n// Batched file append operation\nconst batchedAppendFiles = async (\n  operations: { src: string; dest: string; verbose: boolean }[],\n) => {\n  const batchedPromises = operations.map(async (operation) => {\n    try {\n      const content = await promisify(fs.readFile)(operation.src, \"utf8\");\n      const fileMode = (await promisify(fs.stat)(operation.src)).mode;\n      await batchedWriteFiles([\n        {\n          path: operation.dest,\n          content,\n          flag: \"a+\",\n          verbose: operation.verbose,\n          mode: fileMode,\n        },\n      ]);\n    } catch (err) {\n      console.log(\n        pc.red(`Cannot append file ${operation.src} to ${operation.dest}`),\n      );\n      if (operation.verbose) {\n        console.log(pc.red(String(err)));\n      }\n      throw err;\n    }\n  });\n\n  await Promise.all(batchedPromises);\n};\n\nconst copyLoader: FileLoader =\n  ({ root, templateDir, verbose, srcDir }) =>\n  async ({ path }) => {\n    const operations = [];\n    try {\n      const newPath = path\n        .replace(/.if-(npm|yarn|pnpm|bun)$/, \"\")\n        .replace(SRC_PATH_PATTERN, getSrcDirPattern(srcDir));\n\n      operations.push({\n        src: `${templateDir}/${path}`,\n        dest: `${root}/${newPath}`,\n        verbose,\n      });\n    } catch (err) {\n      if (verbose) {\n        console.log(err);\n      }\n      throw err;\n    }\n\n    await batchedCopyFiles(operations);\n  };\n\nconst appendLoader: FileLoader =\n  ({ root, templateDir, verbose, srcDir }) =>\n  async ({ path }) => {\n    const operations = [];\n    try {\n      const newPath = path\n        .replace(/.append$/, \"\")\n        .replace(/.if-(npm|yarn|pnpm|bun)$/, \"\")\n        .replace(SRC_PATH_PATTERN, getSrcDirPattern(srcDir));\n\n      operations.push({\n        src: `${templateDir}/${path}`,\n        dest: `${root}/${newPath}`,\n        verbose,\n      });\n    } catch (err) {\n      if (verbose) {\n        console.log(err);\n      }\n      throw err;\n    }\n\n    await batchedAppendFiles(operations);\n  };\n\nconst templateLoader: FileLoader =\n  ({\n    root,\n    templateDir,\n    appName,\n    verbose,\n    mode = \"\",\n    srcDir,\n    runCommand,\n    installCommand,\n    ...customOptions\n  }) =>\n  async ({ path }) => {\n    const operations = [];\n    try {\n      const flag = mode.includes(\"append\") ? \"a+\" : \"w\";\n      const filePath = `${templateDir}/${path}`;\n      const file = await promisify(fs.readFile)(filePath, \"utf8\");\n      const fileMode = (await promisify(fs.stat)(filePath)).mode;\n      const newFile = template(file);\n      const newPath = path\n        .replace(/.template$/, \"\")\n        .replace(/.append$/, \"\")\n        .replace(/.if-(npm|yarn|pnpm|bun)$/, \"\")\n        .replace(SRC_PATH_PATTERN, getSrcDirPattern(srcDir));\n\n      operations.push({\n        path: `${root}/${newPath}`,\n        content: newFile({\n          projectName: appName,\n          srcDir: srcDir || \".\",\n          runCommand,\n          installCommand,\n          ...customOptions,\n        }),\n        flag,\n        verbose,\n        mode: fileMode,\n      });\n    } catch (err) {\n      if (verbose) {\n        console.log(err);\n      }\n      throw err;\n    }\n\n    await batchedWriteFiles(operations);\n  };\n\nconst fileLoader: FileLoader =\n  ({\n    root,\n    templateDir,\n    appName,\n    originalDirectory,\n    verbose,\n    useYarn,\n    usePnpm,\n    useBun,\n    srcDir = DEFAULT_SRC_PATH,\n    runCommand,\n    installCommand,\n    ...customOptions\n  }) =>\n  async ({ path }) => {\n    try {\n      const mode = getModeFromPath(path);\n\n      const loaders = {\n        copy: copyLoader,\n        append: appendLoader,\n        copyTemplate: templateLoader,\n        // appendTemplate means treat as a template (interpolate) but append instead of overwrite\n        appendTemplate: templateLoader,\n      } as const;\n\n      await loaders[mode]({\n        root,\n        templateDir,\n        appName,\n        originalDirectory,\n        verbose,\n        useYarn: !!useYarn,\n        usePnpm: !!usePnpm,\n        useBun: !!useBun,\n        mode,\n        srcDir,\n        runCommand,\n        installCommand,\n        ...customOptions,\n      })({\n        path,\n      });\n    } catch (err) {\n      if (verbose) {\n        console.log(err);\n      }\n      throw err;\n    }\n  };\n\nexport type TemplateOrExtension = { url: string; ignorePackage?: boolean };\n\nexport type LoadFilesOptions = {\n  root: string;\n  templatesOrExtensions?: TemplateOrExtension[];\n  appName: string;\n  originalDirectory: string;\n  verbose: boolean;\n  useYarn?: boolean;\n  usePnpm?: boolean;\n  useBun?: boolean;\n  srcDir?: string;\n  runCommand: string;\n  installCommand: string;\n} & {\n  [key: string]: unknown;\n};\n\nexport const loadFiles = async ({\n  root,\n  templatesOrExtensions = [],\n  appName,\n  originalDirectory,\n  verbose,\n  useYarn = false,\n  usePnpm = false,\n  useBun = false,\n  srcDir = DEFAULT_SRC_PATH,\n  runCommand,\n  installCommand,\n  ...customOptions\n}: LoadFilesOptions) => {\n  try {\n    const operations = [];\n    for await (const { url: templateOrExtensionUrl } of templatesOrExtensions) {\n      const templateDir = await getTemplateDirPath(templateOrExtensionUrl);\n      if (verbose) {\n        try {\n          const stat = fs.existsSync(templateDir)\n            ? fs.statSync(templateDir)\n            : undefined;\n          console.log(\n            pc.dim(\n              `[cna] Template dir resolved: ${templateDir} exists=${!!stat} isDir=$${stat?.isDirectory?.()}`,\n            ),\n          );\n        } catch {\n          // ignore\n        }\n      }\n\n      if (\n        fs.existsSync(templateDir) &&\n        fs.statSync(templateDir).isDirectory()\n      ) {\n        // readdirp requires at least one positive pattern when using negations; we'll include '**/*'\n        // and then filter out undesired files. This ensures templates are actually discovered.\n        let debugFirst = true;\n        // Collect all file entries without filters then skip undesired patterns manually\n        const skipGlobs = [\n          /\\bpackage\\.js$/,\n          /\\bpackage\\.json$/,\n          /\\bpackage-lock\\.json$/,\n          /\\btemplate\\.json$/,\n          /\\byarn\\.lock$/,\n          /\\bpnpm-lock\\.yaml$/,\n        ];\n        const skipManager = usePnpm\n          ? [/\\.if-npm\\./, /\\.if-yarn\\./, /\\.if-bun\\./]\n          : useYarn\n            ? [/\\.if-npm\\./, /\\.if-pnpm\\./, /\\.if-bun\\./]\n            : useBun\n              ? [/\\.if-yarn\\./, /\\.if-pnpm\\./]\n              : [/\\.if-yarn\\./, /\\.if-pnpm\\./, /\\.if-bun\\./];\n        const shouldSkip = (p: string) =>\n          [...skipGlobs, ...skipManager].some((rgx) => rgx.test(p));\n\n        for await (const entry of readdirp(templateDir, {\n          type: \"files\",\n          alwaysStat: false,\n        })) {\n          if (shouldSkip(entry.path)) continue;\n          if (entry.path.startsWith(\"package/\")) continue; // skip helper package dir\n          if (verbose && debugFirst) {\n            console.log(pc.dim(`[cna] First discovered file: ${entry.path}`));\n            debugFirst = false;\n          }\n          operations.push({\n            root,\n            templateDir,\n            appName,\n            originalDirectory,\n            verbose,\n            useYarn,\n            usePnpm,\n            useBun,\n            srcDir,\n            runCommand,\n            installCommand,\n            entry,\n            ...customOptions,\n          });\n        }\n      }\n    }\n\n    if (verbose) {\n      console.log(\n        pc.dim(\n          `[cna] Prepared ${operations.length} file operations from ${templatesOrExtensions.length} template(s)`,\n        ),\n      );\n      if (operations.length === 0) {\n        console.log(\n          pc.yellow(\n            \"[cna] No files discovered. Check that the template repository was cloned and fileFilter patterns are correct.\",\n          ),\n        );\n      }\n    }\n\n    await Promise.all(\n      operations.map((operation) => fileLoader(operation)(operation.entry)),\n    );\n  } catch (err) {\n    if (verbose) {\n      console.log(err);\n    }\n    throw err;\n  }\n};\n","import fs from \"fs\";\nimport path from \"path\";\nimport { getTemplateBaseDirPath } from \"./paths.js\";\n\nexport type CnaCustomOption = {\n  name: string;\n  type: string;\n  message?: string;\n  initial?: unknown;\n  [key: string]: unknown;\n};\n\nexport type CnaConfig = {\n  customOptions?: CnaCustomOption[];\n};\n\n/**\n * Load cna.config.json from the base directory of a template.\n *\n * The config file lives alongside (not inside) the `template/` subdirectory:\n *\n *   my-template/\n *     cna.config.json   ← here\n *     template/\n *       src/\n *       package.json\n *\n * Works for both remote GitHub URLs (uses cached clone) and local file:// URLs.\n * Returns null if the file doesn't exist or cannot be parsed.\n */\nexport const loadTemplateCnaConfig = async (\n  templateUrl: string,\n): Promise<CnaConfig | null> => {\n  try {\n    const basePath = await getTemplateBaseDirPath(templateUrl);\n    if (!basePath) return null;\n\n    const configPath = path.join(basePath, \"cna.config.json\");\n    if (!fs.existsSync(configPath)) return null;\n\n    const content = fs.readFileSync(configPath, \"utf8\");\n    return JSON.parse(content) as CnaConfig;\n  } catch {\n    return null;\n  }\n};\n"],"mappings":"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","names":["import_picocolors","import_semver","import_child_process","import_lodash","import_path","import_fs","import_picocolors","import_os","import_semver","import_child_process","pc","spawn","line","semver","dns","import_fs","import_fs","import_os","import_path","import_url","import_debug","debug","path","fs","os","log","debug","path","os","fs","path","template","merge","import_fs","import_picocolors","import_path","import_lodash","lodash","fs","path","pc","lodash","pc","packageJson","fs","path","os","simpleGit","semver","import_fs","import_path","path","fs","semver","pc","envinfo"]}