{"version":3,"file":"init-CIEMyAug.mjs","sources":["../src/utils/validate-remote-drive.ts","../src/services/init.ts"],"sourcesContent":["import {\n  createVetraDocument,\n  getVetraDocuments,\n} from \"@powerhousedao/common/utils\";\n\n/**\n * Sets up a remote drive for initialization by validating and creating\n * a Vetra document if needed.\n * Returns true if setup succeeds, false if it should stop execution.\n */\nexport async function setupRemoteDrive(\n  remoteDriveUrl: string,\n): Promise<boolean> {\n  try {\n    // Parse driveId from URL\n    const driveId = remoteDriveUrl.split(\"/\").pop();\n\n    if (!remoteDriveUrl || remoteDriveUrl.trim() === \"\") {\n      console.error(\"❌ Remote drive URL is required\");\n      return false;\n    }\n\n    // Construct GraphQL endpoint from base URL, preserving any subpath\n    // prefix (e.g. when the reactor is served behind a proxy at /api/reactor).\n    const url = new URL(remoteDriveUrl);\n    const basePath = url.pathname.replace(/\\/d\\/[^/]+\\/?$/, \"\");\n    const graphqlEndpoint = `${url.protocol}//${url.host}${basePath}/graphql`;\n\n    let documents = await getVetraDocuments(graphqlEndpoint, driveId!);\n\n    if (documents.length === 0) {\n      console.log(\n        \"No vetra package document found in the provided drive, creating one...\",\n      );\n      try {\n        await createVetraDocument(graphqlEndpoint, driveId!, \"vetra-package\");\n\n        // Re-fetch documents after creation\n        documents = await getVetraDocuments(graphqlEndpoint, driveId!);\n\n        if (documents.length === 0) {\n          console.error(\n            \"❌ Failed to create vetra package document in the remote drive\",\n          );\n          return false;\n        }\n\n        console.log(\"✅ Vetra package document created successfully\");\n      } catch (createError) {\n        console.error(\n          \"❌ Failed to create vetra package document:\",\n          createError,\n        );\n        return false;\n      }\n    }\n\n    if (documents.length > 1) {\n      console.warn(\n        \"⚠️  Multiple vetra package documents were found in the provided remote drive, this might be an error in your remote drive\",\n      );\n    }\n\n    const hasGithubUrl = documents.some((doc) => doc.githubUrl);\n\n    if (hasGithubUrl) {\n      console.error(\n        \"❌ The remote drive provided already has been configured with a github url, please use the checkout command instead: ph checkout --remote-drive <remote drive url>\",\n      );\n      return false;\n    }\n\n    return true;\n  } catch (error) {\n    console.error(\"❌ Unable to fetch remote drive info:\", error);\n    return false;\n  }\n}\n","import { createProject } from \"@powerhousedao/codegen\";\nimport {\n  handleMutuallyExclusiveOptions,\n  parsePackageManager,\n  parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport { kebabCase } from \"change-case\";\nimport enquirer from \"enquirer\";\nimport { clean, valid } from \"semver\";\nimport type { InitArgs } from \"../types.js\";\nimport { setupRemoteDrive } from \"../utils/validate-remote-drive.js\";\n\nexport async function startInit(args: InitArgs) {\n  const {\n    namePositional,\n    nameOption,\n    packageManager,\n    npm,\n    pnpm,\n    yarn,\n    bun,\n    tag,\n    version,\n    dev,\n    staging,\n    rc,\n    remoteDrive,\n    clone,\n  } = args;\n\n  let name = namePositional ?? nameOption;\n  if (!name) {\n    const { prompt } = enquirer;\n\n    const result = await prompt<{ name: string }>([\n      {\n        type: \"input\",\n        name: \"name\",\n        message: \"What is the project name?\",\n        required: true,\n        result: (value) => kebabCase(value),\n      },\n    ]);\n    name = result.name;\n  }\n  if (!name) {\n    throw new Error(\"You must provide a name for your project.\");\n  }\n\n  if (version !== undefined && !valid(clean(version))) {\n    throw new Error(`Invalid version: ${version}`);\n  }\n\n  handleMutuallyExclusiveOptions(\n    {\n      tag,\n      version,\n      dev,\n      staging,\n      rc,\n    },\n    \"versioning strategy\",\n  );\n\n  handleMutuallyExclusiveOptions(\n    {\n      npm,\n      pnpm,\n      yarn,\n      bun,\n      packageManager,\n    },\n    \"package manager\",\n  );\n\n  const parsedPackageManager =\n    parsePackageManager({\n      npm,\n      pnpm,\n      yarn,\n      bun,\n      packageManager,\n    }) ?? \"npm\";\n\n  const parsedTag = parseTag({\n    tag,\n    dev,\n    staging,\n    rc,\n  });\n\n  if (clone && (tag || version || dev || staging || rc)) {\n    console.log(\n      chalk.yellow(\n        \"⚠️  --clone is set; --version/--tag/--dev/--staging/--rc are ignored (the cloned project's dependency set is authoritative).\",\n      ),\n    );\n  }\n\n  try {\n    if (remoteDrive) {\n      console.log(chalk.blue(\"\\n⏳ Setting up remote drive...\\n\"));\n      await setupRemoteDrive(remoteDrive);\n      console.log(chalk.green(\"\\n✅ Remote drive set up.\"));\n    }\n\n    console.log(chalk.bold(\"\\n🚀 Initializing a new project...\\n\"));\n    await createProject({\n      ...args,\n      name,\n      packageManager: parsedPackageManager,\n      tag: parsedTag,\n    });\n\n    if (remoteDrive) {\n      console.log();\n      console.log(\"To link your project to GitHub:\");\n      console.log();\n      console.log(\"  1. Create a new repository on GitHub\");\n      console.log(`  2. cd ${name}`);\n      console.log(\"  3. git add . && git commit -m 'Initial commit'\");\n      console.log(\"  4. git remote add origin <your-github-url>\");\n      console.log(`  5. git push -u origin main`);\n      console.log();\n    }\n  } catch (error) {\n    console.error(\"\\n❌ Failed to initialize project: \\n\");\n    throw error;\n  }\n}\n"],"names":[],"mappings":"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","debug_id":"e721e7b0-56d6-5f1e-8748-fa042911cc0d"}