{"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/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,SAAS,GAAG,MAAM,SAAS,OACpC,MAAM,0BAA0B;AACzD,KAAI,CAAC,MAAO,QAAO;AACnB,QAAO;EAAE,SAAS,MAAM;EAAI,SAAS,MAAM;EAAI;;AAGjD,SAAS,yBAAyB,QAAgB,gBAAgC;CAChF,MAAM,eAAe,OAAO,MAAM,IAAI,CAAC;AACvC,KAAI,CAAC,aAAc,QAAO;AAI1B,QAAO,GAAG,aAAa,GAHR,eAAe,SAAS,IAAI,GACvC,eAAe,UAAU,eAAe,QAAQ,IAAI,GAAG,EAAE,GACzD;;AAIN,MAAM,mBAA8E;CAClF;EAAE,OAAO;EAAM,OAAO;EAAM,MAAM;EAAiC;CACnE;EAAE,OAAO;EAAO,OAAO;EAAO,MAAM;EAAkC;CACtE;EAAE,OAAO;EAAQ,OAAO;EAAQ,MAAM;EAAmC;CACzE;EAAE,OAAO;EAAW,OAAO;EAAW,MAAM;EAA+C;CAC5F;AAED,eAAsB,gBAAgB,OASnC;AACD,gBAAE,MAAM,wBAAwB;CAEhC,MAAM,SACJ,MAAM,UACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa;EACd,CAAC;AAEJ,KAAIA,eAAE,SAAS,OAAO,CAAE,sBAAQ,KAAK,EAAE;CAEvC,IAAI,iBAAiB;CACrB,IAAI,iBAAiB;CAErB,MAAM,iBAAiB,SAAS,yBAAyB,QAAQ,eAAe,GAAG;CACnF,MAAM,UACJ,MAAM,WACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa,kBAAkB;EAC/B,cAAc;EACf,CAAC;AAEJ,KAAIA,eAAE,SAAS,QAAQ,CAAE,sBAAQ,KAAK,EAAE;CAExC,MAAM,kBAAkB,WAAW;CACnC,MAAM,eACJ,MAAM,WACJ,MAAMA,eAAE,KAAK;EACb,SAAS;EACT,aAAa;EACd,CAAC;AAEJ,KAAIA,eAAE,SAAS,aAAa,CAAE,sBAAQ,KAAK,EAAE;AAE7C,KAAI,cAAc;EAChB,MAAM,SAAS,gBAAgB,aAAa;AAC5C,MAAI,QAAQ;AACV,oBAAiB,OAAO;AACxB,oBAAiB,OAAO;;;AAI5B,QAAO;EACL;EACA;EACA,QAAQ,UAAU;EAClB,SAAS,mBAAmB;EAC7B;;AAGH,eAAsB,oBAAoB,OAOvC;CACD,MAAM,YACJ,MAAM,aACJ,MAAMA,eAAE,YAAY;EACpB,SAAS;EACT,SAAS;EACT,eAAe,CAAC,MAAM,MAAM;EAC5B,UAAU;EACX,CAAC;AAEJ,KAAIA,eAAE,SAAS,UAAU,CAAE,sBAAQ,KAAK,EAAE;CAE1C,IAAI,UAAoB,EAAE;AAC1B,KAAI,UAAU,SAAS,UAAU,EAAE;EACjC,MAAM,gBAAgB,MAAM,oBAAoB,EAAE;EAClD,MAAM,gBACJ,cAAc,SAAS,IAAI,cAAc,KAAK,SAAS;GAAE,OAAO;GAAK,OAAO;GAAK,EAAE,GAAG,EAAE;AAE1F,YACE,MAAM,YACL,cAAc,SAAS,IAClB,MAAMA,eAAE,YAAY;GACpB,SAAS;GACT,SAAS;GACT,UAAU;GACX,CAAC,GACF,EAAE;AAER,MAAIA,eAAE,SAAS,QAAQ,CAAE,sBAAQ,KAAK,EAAE;;CAG1C,MAAM,KAAK,MAAMA,eAAE,QAAQ;EACzB,SAAS;EACT,cAAc;EACf,CAAC;AAEF,KAAIA,eAAE,SAAS,GAAG,IAAI,CAAC,GAAI,sBAAQ,KAAK,EAAE;AAE1C,QAAO;EAAE;EAAW;EAAS"}