{"version":3,"file":"generate-piece-QTt-ddt2.mjs","sources":["../src/services/generate-piece.ts"],"sourcesContent":["import {\n  detectFeatures,\n  generateAllPieces,\n  generatePiece,\n  syncFeatureDependencies,\n} from \"@powerhousedao/codegen\";\nimport { derivePieceId } from \"@powerhousedao/codegen/name-builders\";\nimport {\n  buildTsMorphProject,\n  readPiecesList,\n} from \"@powerhousedao/codegen/utils\";\nimport { kebabCase } from \"change-case\";\nimport enquirer from \"enquirer\";\nimport { basename } from \"node:path\";\nimport { readPackage } from \"read-pkg\";\nimport type { Project } from \"ts-morph\";\nimport type { GeneratePieceArgs } from \"../types.js\";\nimport { installAddedDependencies } from \"../utils/install-added-dependencies.js\";\n\n// The id a block type will name, asked for only where deriving one would claim\n// a namespace nobody owns; CI, with no TTY, takes the derived value.\nasync function resolvePieceId(v: {\n  project: Project;\n  projectDir: string;\n  pieceName: string;\n  id?: string;\n}): Promise<string> {\n  if (v.id) return v.id;\n  const pkg = await readPackage({ cwd: v.projectDir, normalize: false });\n  const { id, needsConfirmation } = derivePieceId({\n    packageName: pkg.name ?? \"\",\n    slug: kebabCase(v.pieceName),\n    hasOtherPieces: readPiecesList(v.project).length > 0,\n  });\n  if (!needsConfirmation || !process.stdin.isTTY) return id;\n  const { prompt } = enquirer;\n  const result = await prompt<{ pieceId: string }>([\n    {\n      type: \"input\",\n      name: \"pieceId\",\n      message:\n        \"What id should this piece have? A workflow step names it as its pieceName.\",\n      initial: id,\n      required: true,\n    },\n  ]);\n  return result.pieceId || id;\n}\n\nexport async function startGeneratePiece(\n  args: GeneratePieceArgs,\n  projectDir: string,\n) {\n  const {\n    namePositional,\n    name: nameOption,\n    id,\n    auth,\n    description,\n    dir,\n    all,\n    debug,\n  } = args;\n  if (debug) {\n    console.log({ args });\n  }\n  const project = buildTsMorphProject(projectDir);\n  const name = namePositional ?? nameOption;\n  if (all) {\n    await generateAllPieces(project);\n  } else if (dir) {\n    await generateAllPieces(project, basename(dir.replace(/\\/+$/, \"\")));\n  } else if (name) {\n    const pieceId = await resolvePieceId({\n      project,\n      projectDir,\n      pieceName: name,\n      id,\n    });\n    await generatePiece(\n      { pieceName: name, pieceId, auth, description },\n      project,\n    );\n  } else {\n    console.log(\"Please specify one of `name`, `dir`, or `all`.\");\n    return;\n  }\n  await project.save();\n  const added = await syncFeatureDependencies(\n    detectFeatures(projectDir),\n    projectDir,\n  );\n  await installAddedDependencies(added, projectDir, args.skipInstall);\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAqBA,eAAe,eAAe,GAKV;CAClB,IAAI,EAAE,IAAI,OAAO,EAAE;CACnB,MAAM,MAAM,MAAM,YAAY;EAAE,KAAK,EAAE;EAAY,WAAW;CAAM,CAAC;CACrE,MAAM,EAAE,IAAI,sBAAsB,cAAc;EAC9C,aAAa,IAAI,QAAQ;EACzB,MAAM,UAAU,EAAE,SAAS;EAC3B,gBAAgB,eAAe,EAAE,OAAO,CAAC,CAAC,SAAS;CACrD,CAAC;CACD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,MAAM,OAAO,OAAO;CACvD,MAAM,EAAE,WAAW;CAWnB,QAAO,MAVc,OAA4B,CAC/C;EACE,MAAM;EACN,MAAM;EACN,SACE;EACF,SAAS;EACT,UAAU;CACZ,CACF,CAAC,EAAA,CACa,WAAW;AAC3B;AAEA,eAAsB,mBACpB,MACA,YACA;CACA,MAAM,EACJ,gBACA,MAAM,YACN,IACA,MACA,aACA,KACA,KACA,UACE;CACJ,IAAI,OACF,QAAQ,IAAI,EAAE,KAAK,CAAC;CAEtB,MAAM,UAAU,oBAAoB,UAAU;CAC9C,MAAM,OAAO,kBAAkB;CAC/B,IAAI,KACF,MAAM,kBAAkB,OAAO;MAC1B,IAAI,KACT,MAAM,kBAAkB,SAAS,SAAS,IAAI,QAAQ,QAAQ,EAAE,CAAC,CAAC;MAC7D,IAAI,MAAM;EACf,MAAM,UAAU,MAAM,eAAe;GACnC;GACA;GACA,WAAW;GACX;EACF,CAAC;EACD,MAAM,cACJ;GAAE,WAAW;GAAM;GAAS;GAAM;EAAY,GAC9C,OACF;CACF,OAAO;EACL,QAAQ,IAAI,gDAAgD;EAC5D;CACF;CACA,MAAM,QAAQ,KAAK;CACnB,MAAM,QAAQ,MAAM,wBAClB,eAAe,UAAU,GACzB,UACF;CACA,MAAM,yBAAyB,OAAO,YAAY,KAAK,WAAW;AACpE","debug_id":"8b015725-4996-50bb-890c-e6cf4750fe5e"}