{"version":3,"file":"prompts.cjs","names":["p"],"sources":["../../src/cli/prompts.ts"],"sourcesContent":["import process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport type { OverrideSection } from \"../contract\";\n\nfunction parseExtendsRef(ref: string): { account: string; gateway: string } | null {\n  const normalized = ref.startsWith(\"bos://\") ? ref : `bos://${ref}`;\n  const match = normalized.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n  if (!match) return null;\n  return { account: match[1], gateway: match[2] };\n}\n\nfunction deriveAccountFromExtends(domain: string, extendsAccount: string): string {\n  const firstSegment = domain.split(\".\")[0];\n  if (!firstSegment) return \"\";\n  const suffix = extendsAccount.includes(\".\")\n    ? extendsAccount.substring(extendsAccount.indexOf(\".\") + 1)\n    : extendsAccount;\n  return `${firstSegment}.${suffix}`;\n}\n\nconst OVERRIDE_OPTIONS: { value: OverrideSection; label: string; hint: string }[] = [\n  { value: \"ui\", label: \"ui\", hint: \"Override UI with local source\" },\n  { value: \"api\", label: \"api\", hint: \"Override API with local source\" },\n  { value: \"host\", label: \"host\", hint: \"Override host with local source\" },\n  { value: \"plugins\", label: \"plugins\", hint: \"Override selected plugins with local source\" },\n];\n\nexport async function promptInitBasic(input: {\n  domain?: string;\n  account?: string;\n  extends?: string;\n}): Promise<{\n  extendsAccount: string;\n  extendsGateway: string;\n  domain: string;\n  account?: string;\n}> {\n  p.intro(\"Let's build an app...\");\n\n  const domain =\n    input.domain ??\n    ((await p.text({\n      message: \"Starting with a domain?\",\n      placeholder: \"no\",\n    })) as string);\n\n  if (p.isCancel(domain)) process.exit(0);\n\n  let extendsAccount = \"dev.everything.near\";\n  let extendsGateway = \"everything.dev\";\n\n  const accountDefault = domain ? deriveAccountFromExtends(domain, extendsAccount) : \"\";\n  const account =\n    input.account ??\n    ((await p.text({\n      message: \"What NEAR account will you publish from?\",\n      placeholder: accountDefault || \"skip\",\n      defaultValue: accountDefault,\n    })) as string);\n\n  if (p.isCancel(account)) process.exit(0);\n\n  const resolvedAccount = account || accountDefault;\n  const extendsInput =\n    input.extends ??\n    ((await p.text({\n      message: \"Extending an existing app?\",\n      placeholder: \"bos://dev.everything.near/dev.everything.dev\",\n      defaultValue: \"bos://dev.everything.near/dev.everything.dev\",\n    })) as string);\n\n  if (p.isCancel(extendsInput)) process.exit(0);\n\n  if (extendsInput) {\n    const parsed = parseExtendsRef(extendsInput);\n    if (parsed) {\n      extendsAccount = parsed.account;\n      extendsGateway = parsed.gateway;\n    }\n  }\n\n  return {\n    extendsAccount,\n    extendsGateway,\n    domain: domain || \"\",\n    account: resolvedAccount || undefined,\n  };\n}\n\nexport async function promptInitOverrides(input: {\n  parentPluginKeys?: string[];\n  overrides?: OverrideSection[];\n  plugins?: string[];\n}): Promise<{\n  overrides: OverrideSection[];\n  plugins: string[];\n}> {\n  const overrides =\n    input.overrides ??\n    ((await p.multiselect({\n      message: \"What do you want to customize?\",\n      options: OVERRIDE_OPTIONS,\n      initialValues: [\"ui\", \"api\"] as OverrideSection[],\n      required: false,\n    })) as OverrideSection[]);\n\n  if (p.isCancel(overrides)) process.exit(0);\n\n  let plugins: string[] = [];\n  if (overrides.includes(\"plugins\")) {\n    const parentPlugins = input.parentPluginKeys ?? [];\n    const pluginOptions =\n      parentPlugins.length > 0 ? parentPlugins.map((key) => ({ value: key, label: key })) : [];\n\n    plugins =\n      input.plugins ??\n      (pluginOptions.length > 0\n        ? ((await p.multiselect({\n            message: \"Select plugins to include:\",\n            options: pluginOptions,\n            required: false,\n          })) as string[])\n        : []);\n\n    if (p.isCancel(plugins)) process.exit(0);\n  }\n\n  const go = await p.confirm({\n    message: \"GO!\",\n    initialValue: true,\n  });\n\n  if (p.isCancel(go) || !go) process.exit(0);\n\n  return { overrides, plugins };\n}\n"],"mappings":";;;;;;;AAIA,SAAS,gBAAgB,KAA0D;CAEjF,MAAM,SADa,IAAI,WAAW,QAAQ,IAAI,MAAM,SAAS,MACrC,CAAC,MAAM,yBAAyB;CACxD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO;EAAE,SAAS,MAAM;EAAI,SAAS,MAAM;CAAG;AAChD;AAEA,SAAS,yBAAyB,QAAgB,gBAAgC;CAChF,MAAM,eAAe,OAAO,MAAM,GAAG,CAAC,CAAC;CACvC,IAAI,CAAC,cAAc,OAAO;CAI1B,OAAO,GAAG,aAAa,GAHR,eAAe,SAAS,GAAG,IACtC,eAAe,UAAU,eAAe,QAAQ,GAAG,IAAI,CAAC,IACxD;AAEN;AAEA,MAAM,mBAA8E;CAClF;EAAE,OAAO;EAAM,OAAO;EAAM,MAAM;CAAgC;CAClE;EAAE,OAAO;EAAO,OAAO;EAAO,MAAM;CAAiC;CACrE;EAAE,OAAO;EAAQ,OAAO;EAAQ,MAAM;CAAkC;CACxE;EAAE,OAAO;EAAW,OAAO;EAAW,MAAM;CAA8C;AAC5F;AAEA,eAAsB,gBAAgB,OASnC;CACD,eAAE,MAAM,uBAAuB;CAE/B,MAAM,SACJ,MAAM,UACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa;CACf,CAAC;CAEH,IAAIA,eAAE,SAAS,MAAM,GAAG,qBAAQ,KAAK,CAAC;CAEtC,IAAI,iBAAiB;CACrB,IAAI,iBAAiB;CAErB,MAAM,iBAAiB,SAAS,yBAAyB,QAAQ,cAAc,IAAI;CACnF,MAAM,UACJ,MAAM,WACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa,kBAAkB;EAC/B,cAAc;CAChB,CAAC;CAEH,IAAIA,eAAE,SAAS,OAAO,GAAG,qBAAQ,KAAK,CAAC;CAEvC,MAAM,kBAAkB,WAAW;CACnC,MAAM,eACJ,MAAM,WACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa;EACb,cAAc;CAChB,CAAC;CAEH,IAAIA,eAAE,SAAS,YAAY,GAAG,qBAAQ,KAAK,CAAC;CAE5C,IAAI,cAAc;EAChB,MAAM,SAAS,gBAAgB,YAAY;EAC3C,IAAI,QAAQ;GACV,iBAAiB,OAAO;GACxB,iBAAiB,OAAO;EAC1B;CACF;CAEA,OAAO;EACL;EACA;EACA,QAAQ,UAAU;EAClB,SAAS,mBAAmB;CAC9B;AACF;AAEA,eAAsB,oBAAoB,OAOvC;CACD,MAAM,YACJ,MAAM,aACJ,MAAMA,eAAE,YAAY;EACpB,SAAS;EACT,SAAS;EACT,eAAe,CAAC,MAAM,KAAK;EAC3B,UAAU;CACZ,CAAC;CAEH,IAAIA,eAAE,SAAS,SAAS,GAAG,qBAAQ,KAAK,CAAC;CAEzC,IAAI,UAAoB,CAAC;CACzB,IAAI,UAAU,SAAS,SAAS,GAAG;EACjC,MAAM,gBAAgB,MAAM,oBAAoB,CAAC;EACjD,MAAM,gBACJ,cAAc,SAAS,IAAI,cAAc,KAAK,SAAS;GAAE,OAAO;GAAK,OAAO;EAAI,EAAE,IAAI,CAAC;EAEzF,UACE,MAAM,YACL,cAAc,SAAS,IAClB,MAAMA,eAAE,YAAY;GACpB,SAAS;GACT,SAAS;GACT,UAAU;EACZ,CAAC,IACD,CAAC;EAEP,IAAIA,eAAE,SAAS,OAAO,GAAG,qBAAQ,KAAK,CAAC;CACzC;CAEA,MAAM,KAAK,MAAMA,eAAE,QAAQ;EACzB,SAAS;EACT,cAAc;CAChB,CAAC;CAED,IAAIA,eAAE,SAAS,EAAE,KAAK,CAAC,IAAI,qBAAQ,KAAK,CAAC;CAEzC,OAAO;EAAE;EAAW;CAAQ;AAC9B"}