ph-cmd 6.0.0-dev.109 → 6.0.0-dev.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -10,7 +10,7 @@ async function runPhCliCommand(phCliCommand) {
10
10
  return await executePhCliCommand(phCliCommand);
11
11
  }
12
12
  async function runPhCmdCommand(args) {
13
- const { run } = await import("./run-DwNw_OJ7.mjs");
13
+ const { run } = await import("./run-D3l-rira.mjs");
14
14
  return await run(args);
15
15
  }
16
16
  async function main() {
@@ -1,4 +1,4 @@
1
- import { a as setupGlobals, i as update, n as use, o as init, r as useLocal, t as ph } from "./ph-CFRiSf9A.mjs";
1
+ import { a as setupGlobals, i as update, n as use, o as init, r as useLocal, t as ph } from "./ph-cmPuVxF1.mjs";
2
2
  import { writeCliDocsMarkdownFile } from "@powerhousedao/codegen/file-builders";
3
3
  //#region src/generate-commands-docs.ts
4
4
  const commands = [
@@ -27,7 +27,7 @@ const cliDescription = ph.description ?? "";
27
27
  async function main() {
28
28
  await writeCliDocsMarkdownFile({
29
29
  filePath: "COMMANDS.md",
30
- docsTitle: `PH-CMD CLI Commands (6.0.0-dev.109)`,
30
+ docsTitle: `PH-CMD CLI Commands (6.0.0-dev.110)`,
31
31
  docsIntroduction: "This document provides detailed information about the available commands in the PH-CMD CLI. The CLI is published as `ph-cmd` and is invoked with the `ph` command.",
32
32
  cliDescription,
33
33
  entries: commands
@@ -588,7 +588,7 @@ const use = command({
588
588
  });
589
589
  const ph = subcommands({
590
590
  name: "ph",
591
- version: await getPhCmdVersionInfo("6.0.0-dev.109"),
591
+ version: await getPhCmdVersionInfo("6.0.0-dev.110"),
592
592
  description: "The Powerhouse CLI (ph-cmd) is a command-line interface tool that provides essential commands for managing Powerhouse projects.\nThe tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.",
593
593
  cmds: {
594
594
  init,
@@ -602,4 +602,4 @@ const ph = subcommands({
602
602
  //#endregion
603
603
  export { setupGlobals as a, update as i, use as n, init as o, useLocal as r, ph as t };
604
604
 
605
- //# sourceMappingURL=ph-CFRiSf9A.mjs.map
605
+ //# sourceMappingURL=ph-cmPuVxF1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ph-CFRiSf9A.mjs","names":[],"sources":["../src/utils/validate-remote-drive.ts","../src/commands/init.ts","../src/utils/constants.ts","../src/utils/package-manager.ts","../src/utils/create-global-project.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.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\n const url = new URL(remoteDriveUrl);\n const graphqlEndpoint = `${url.protocol}//${url.host}/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 debugArgs,\n handleMutuallyExclusiveOptions,\n packageManagerArgs,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport { kebabCase } from \"change-case\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\nimport enquirer from \"enquirer\";\nimport { clean, valid } from \"semver\";\nimport { setupRemoteDrive } from \"../utils/validate-remote-drive.js\";\n\nexport const initArgs = {\n namePositional: positional({\n type: optional(string),\n displayName: \"name\",\n description:\n \"The name of your project. A new directory will be created in your current directory with this name.\",\n }),\n nameOption: option({\n type: optional(string),\n long: \"name\",\n short: \"n\",\n description:\n \"The name of your project. A new directory will be created in your current directory with this name.\",\n }),\n ...packageManagerArgs,\n tag: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n dev: flag({\n type: optional(boolean),\n long: \"dev\",\n short: \"d\",\n description: \"Use the `dev` release tag.\",\n }),\n staging: flag({\n type: optional(boolean),\n long: \"staging\",\n short: \"s\",\n description: \"Use the `staging` release tag.\",\n }),\n remoteDrive: option({\n type: optional(string),\n long: \"remote-drive\",\n short: \"r\",\n description: \"Remote drive identifier.\",\n }),\n ...debugArgs,\n};\n\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\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 remoteDrive,\n debug,\n } = args;\n if (debug) {\n console.log({ 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 },\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 });\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 process.exit(0);\n },\n});\n","import { PH_BIN } from \"@powerhousedao/shared/clis\";\n\nexport const PH_BIN_PATH = process.argv[1];\nexport const PH_CLI_COMMANDS = [\n \"init\",\n \"dev\",\n \"connect\",\n \"generate\",\n \"reactor\",\n \"switchboard\",\n \"help\",\n \"install\",\n \"add\",\n \"i\",\n \"remove\",\n \"uninstall\",\n \"service\",\n \"list\",\n \"inspect\",\n \"version\",\n \"login\",\n \"logout\",\n];\nexport const PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\nexport const packageManagers = {\n bun: {\n installCommand: \"bun add {{dependency}}\",\n execCommand: `bun ${PH_BIN} {{arguments}}`,\n execScript: `bun {{arguments}}`,\n lockfile: \"bun.lock\",\n globalPathRegexp: /[\\\\/].bun[\\\\/]/,\n updateCommand: \"bun update {{dependency}}\",\n buildAffected: \"bun run build:affected\",\n workspaceOption: \"\",\n installDepsCommand: \"bun install\",\n },\n pnpm: {\n installCommand: \"pnpm add {{dependency}}\",\n execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,\n execScript: `pnpm {{arguments}}`,\n lockfile: \"pnpm-lock.yaml\",\n globalPathRegexp: /[\\\\/]pnpm[\\\\/]/,\n updateCommand: \"pnpm update {{dependency}}\",\n buildAffected: \"pnpm run build:affected\",\n workspaceOption: \"--workspace-root\",\n installDepsCommand: \"pnpm install\",\n },\n yarn: {\n installCommand: \"yarn add {{dependency}}\",\n execCommand: `yarn ${PH_BIN} {{arguments}}`,\n execScript: `yarn {{arguments}}`,\n lockfile: \"yarn.lock\",\n globalPathRegexp: /[\\\\/]yarn[\\\\/]/,\n updateCommand: \"yarn upgrade {{dependency}}\",\n buildAffected: \"yarn run build:affected\",\n workspaceOption: \"-W\",\n installDepsCommand: \"yarn install\",\n },\n npm: {\n installCommand: \"npm install {{dependency}}\",\n execCommand: `npx ${PH_BIN} {{arguments}}`,\n execScript: `npm run {{arguments}}`,\n lockfile: \"package-lock.json\",\n updateCommand: \"npm update {{dependency}} --save\",\n buildAffected: \"npm run build:affected\",\n workspaceOption: \"\",\n installDepsCommand: \"npm install\",\n },\n} as const;\n","import {\n POWERHOUSE_CONFIG_FILE,\n POWERHOUSE_GLOBAL_DIR,\n} from \"@powerhousedao/shared/clis\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport path, { dirname } from \"node:path\";\nimport { packageManagers } from \"./constants.js\";\nimport { createGlobalProject } from \"./create-global-project.js\";\nimport type { PackageManager, PathValidation, ProjectInfo } from \"./types.js\";\n\nexport function defaultPathValidation() {\n return true;\n}\n\nexport function isPowerhouseProject(dir: string) {\n const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);\n\n return existsSync(powerhouseConfigPath);\n}\n\nexport function findNodeProjectRoot(\n dir: string,\n pathValidation: PathValidation = defaultPathValidation,\n) {\n const packageJsonPath = path.join(dir, \"package.json\");\n\n if (existsSync(packageJsonPath) && pathValidation(dir)) {\n return dir;\n }\n\n const parentDir = dirname(dir);\n\n if (parentDir === dir) {\n return null;\n }\n\n return findNodeProjectRoot(parentDir, pathValidation);\n}\n\nexport function getPackageManagerFromPath(dir: string): PackageManager {\n const lowerCasePath = dir.toLowerCase();\n\n if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {\n return \"bun\";\n } else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {\n return \"pnpm\";\n } else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {\n return \"yarn\";\n }\n\n return \"npm\";\n}\n\nexport function getPackageManagerFromLockfile(dir: string): PackageManager {\n if (existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {\n return \"pnpm\";\n } else if (existsSync(path.join(dir, packageManagers.yarn.lockfile))) {\n return \"yarn\";\n } else if (existsSync(path.join(dir, packageManagers.bun.lockfile))) {\n return \"bun\";\n }\n\n return \"npm\";\n}\n\nexport async function getProjectInfo(\n debug?: boolean,\n generateGlobalProject = true,\n): Promise<ProjectInfo> {\n const currentPath = process.cwd();\n\n if (debug) {\n console.log(\">>> currentPath:\", currentPath);\n }\n\n const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);\n\n if (!projectPath) {\n let available = existsSync(POWERHOUSE_GLOBAL_DIR);\n\n if (generateGlobalProject) {\n await createGlobalProject();\n available = true;\n }\n\n return {\n available,\n isGlobal: true,\n path: POWERHOUSE_GLOBAL_DIR,\n };\n }\n\n return {\n isGlobal: false,\n available: true,\n path: projectPath,\n };\n}\n\nexport function forwardPHCommand(\n packageManager: PackageManager,\n projectPath: string,\n args: string,\n debug?: boolean,\n captureOutput = false,\n) {\n const manager = packageManagers[packageManager];\n const command = manager.execCommand;\n const execCommand = command.replace(\"{{arguments}}\", args);\n\n const commandOptions = { cwd: projectPath };\n\n if (debug) {\n console.log(\">>> execCommand:\", execCommand);\n console.log(\">>> commandOptions:\", commandOptions);\n console.log(\">>> projectPath:\", projectPath);\n console.log(\">>> packageManager:\", packageManager);\n }\n\n if (captureOutput) {\n // Capture output and return it\n try {\n return execSync(execCommand, {\n stdio: \"pipe\",\n encoding: \"utf8\",\n ...commandOptions,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute command: ${execCommand}\\nError: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n } else {\n // Original behavior - pipe directly to stdout/stderr\n execSync(execCommand, {\n stdio: \"inherit\",\n ...commandOptions,\n });\n return \"\";\n }\n}\n\n/**\n * Recursively searches for a specific file by traversing up the directory tree.\n * Starting from the given path, it checks each parent directory until it finds\n * the target file or reaches the root directory.\n *\n * @param startPath - The absolute path of the directory to start searching from\n * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')\n * @returns The absolute path of the directory containing the target file, or null if not found\n *\n * @example\n * // Find the workspace root directory\n * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');\n *\n * // Find the nearest package.json\n * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');\n */\nexport const findContainerDirectory = (\n startPath: string,\n targetFile: string,\n): string | null => {\n const filePath = path.join(startPath, targetFile);\n\n if (existsSync(filePath)) {\n return startPath;\n }\n\n const parentDir = path.dirname(startPath);\n\n //reached the root directory and haven't found the file\n if (parentDir === startPath) {\n return null;\n }\n\n return findContainerDirectory(parentDir, targetFile);\n};\n","import { createProject } from \"@powerhousedao/codegen\";\nimport {\n HOME_DIR,\n PH_GLOBAL_DIR_NAME,\n POWERHOUSE_GLOBAL_DIR,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { PH_BIN_PATH, PH_GLOBAL_PACKAGE_NAME } from \"./constants.js\";\nimport { getPackageManagerFromPath } from \"./package-manager.js\";\nimport type { GlobalProjectOptions } from \"./types.js\";\n\nexport const createGlobalProject = async (\n projectName?: string,\n options: GlobalProjectOptions = {},\n) => {\n // check if the global project already exists\n const globalProjectExists = existsSync(POWERHOUSE_GLOBAL_DIR);\n\n if (globalProjectExists) {\n // Fix existing installations with invalid \".ph\" package name\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n console.log(\"📦 Fixing invalid package name in global project...\");\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore errors reading/writing package.json\n }\n }\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n return;\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n\n try {\n await createProject({\n name: PH_GLOBAL_DIR_NAME,\n tag: parseTag(options),\n packageManager:\n parsePackageManager(options) ?? getPackageManagerFromPath(PH_BIN_PATH),\n });\n\n // Fix the package.json name - \".ph\" is invalid for npm/vite\n // The directory name can be \".ph\" but the package name must be valid\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n name?: string;\n };\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n } catch (error) {\n console.error(\"❌ Failed to initialize the global project\", error);\n }\n};\n","import { command } from \"cmd-ts\";\nimport { createGlobalProject } from \"../utils/create-global-project.js\";\nimport { initArgs } from \"./init.js\";\n\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n const { namePositional, nameOption, debug, ...options } = args;\n if (debug) {\n console.log({ args });\n }\n const name = namePositional ?? nameOption;\n await createGlobalProject(name, options);\n process.exit(0);\n },\n});\n","import {\n debugArgs,\n getTagFromVersion,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\nimport { detect } from \"package-manager-detector/detect\";\nimport { readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\n\nexport const update = command({\n name: \"update\",\n description:\n \"Update your powerhouse dependencies to their latest tagged version\",\n args: {\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n console.log(`\\n▶️ Updating Powerhouse dependencies...\\n`);\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project updated successfully\\n`));\n\n if (skipInstall) return;\n\n const packageManager = await detect();\n\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n process.exit(0);\n },\n});\n","import {\n debugArgs,\n directoryExists,\n logVersionUpdate,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport {\n ALL_POWERHOUSE_DEPENDENCIES,\n APPS_DEPENDENCIES,\n CLIS_DEPENDENCIES,\n} from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\nimport path from \"path\";\nimport { readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\n\nexport const useLocal = command({\n name: \"use-local\",\n description:\n \"Use your local `powerhouse` monorepo dependencies the current project.\",\n args: {\n monorepoPathPositional: positional({\n type: optional(string),\n displayName: \"monorepo path\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n monorepoPathOption: option({\n type: optional(string),\n long: \"path\",\n short: \"p\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with `pnpm`\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { monorepoPathPositional, monorepoPathOption, skipInstall, debug } =\n args;\n if (debug) {\n console.log({ args });\n }\n const monorepoPath = monorepoPathPositional ?? monorepoPathOption;\n\n if (!monorepoPath) {\n throw new Error(\n \"❌ Please provide the path to your local powerhouse monorepo.\",\n );\n }\n\n const monorepoDirExists = await directoryExists(monorepoPath);\n\n if (!monorepoDirExists) {\n throw new Error(\n \"❌ No directory found at the powerhouse monorepo path you specified.\",\n );\n }\n\n console.log(\n `\\n▶️ Linking powerhouse dependencies to \"${chalk.bold(monorepoPath)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project linked successfully\\n`));\n\n if (!skipInstall) {\n console.log(`Installing linked dependencies with \\`pnpm\\`\\n`);\n runCmd(`pnpm install`);\n }\n\n process.exit(0);\n },\n});\n\nfunction buildPnpmLink(packageName: string, monorepoPath: string) {\n const isCli = CLIS_DEPENDENCIES.includes(packageName);\n const isApp = APPS_DEPENDENCIES.includes(packageName);\n const packageDir = isCli ? \"clis\" : isApp ? \"apps\" : \"packages\";\n const packageNameWithoutNamespace = packageName.replace(\n \"@powerhousedao/\",\n \"\",\n );\n const packagePath = path.join(\n monorepoPath,\n packageDir,\n packageNameWithoutNamespace,\n );\n const pnpmLink = `link:${packagePath}`;\n\n return pnpmLink;\n}\n\nexport async function runUseLocal(args: string[]) {\n await run(useLocal, args);\n}\n","import {\n debugArgs,\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\nimport { detect } from \"package-manager-detector/detect\";\nimport { readPackage } from \"read-pkg\";\nimport { clean, valid } from \"semver\";\nimport { writePackage } from \"write-package\";\n\nexport const use = command({\n name: \"use\",\n description: \"Specify the release version of Powerhouse dependencies to use.\",\n args: {\n tagPositional: positional({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n displayName: \"tag\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n tagOption: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { tagPositional, tagOption, version, skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n const tag = tagPositional ?? tagOption;\n handleMutuallyExclusiveOptions({ tag, version }, \"versioning strategy\");\n\n if (!tag && !version) {\n throw new Error(\n \"Please specify either a release tag or a version to use.\",\n );\n }\n\n if (version && !valid(clean(version))) {\n throw new Error(`❌ Invalid version: ${chalk.bold(version)}`);\n }\n\n console.log(\n `▶️ Updating project to use ${chalk.bold(version ?? tag)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.dependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(\n chalk.green(\n `\\n✅ Project updated to use ${chalk.bold(version ?? tag)}\\n`,\n ),\n );\n\n if (!skipInstall) {\n const packageManager = await detect();\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n }\n\n process.exit(0);\n },\n});\n\nexport async function runUse(args: string[]) {\n await run(use, args);\n}\n","import {\n getPhCmdVersionInfo,\n phCliHelpCommands,\n} from \"@powerhousedao/shared/clis\";\nimport { subcommands } from \"cmd-ts\";\nimport { init } from \"./init.js\";\nimport { setupGlobals } from \"./setup-globals.js\";\nimport { update } from \"./update.js\";\nimport { useLocal } from \"./use-local.js\";\nimport { use } from \"./use.js\";\n\ndeclare const CLI_VERSION: string;\nconst phCmdVersionInfo = await getPhCmdVersionInfo(CLI_VERSION);\nexport const ph = subcommands({\n name: \"ph\",\n version: phCmdVersionInfo,\n description:\n \"The Powerhouse CLI (ph-cmd) is a command-line interface tool that provides essential commands for managing Powerhouse projects.\\nThe tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.\",\n cmds: {\n init,\n use,\n update,\n \"setup-globals\": setupGlobals,\n \"use-local\": useLocal,\n ...phCliHelpCommands,\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"ph-cmPuVxF1.mjs","names":[],"sources":["../src/utils/validate-remote-drive.ts","../src/commands/init.ts","../src/utils/constants.ts","../src/utils/package-manager.ts","../src/utils/create-global-project.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.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\n const url = new URL(remoteDriveUrl);\n const graphqlEndpoint = `${url.protocol}//${url.host}/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 debugArgs,\n handleMutuallyExclusiveOptions,\n packageManagerArgs,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport { kebabCase } from \"change-case\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\nimport enquirer from \"enquirer\";\nimport { clean, valid } from \"semver\";\nimport { setupRemoteDrive } from \"../utils/validate-remote-drive.js\";\n\nexport const initArgs = {\n namePositional: positional({\n type: optional(string),\n displayName: \"name\",\n description:\n \"The name of your project. A new directory will be created in your current directory with this name.\",\n }),\n nameOption: option({\n type: optional(string),\n long: \"name\",\n short: \"n\",\n description:\n \"The name of your project. A new directory will be created in your current directory with this name.\",\n }),\n ...packageManagerArgs,\n tag: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n dev: flag({\n type: optional(boolean),\n long: \"dev\",\n short: \"d\",\n description: \"Use the `dev` release tag.\",\n }),\n staging: flag({\n type: optional(boolean),\n long: \"staging\",\n short: \"s\",\n description: \"Use the `staging` release tag.\",\n }),\n remoteDrive: option({\n type: optional(string),\n long: \"remote-drive\",\n short: \"r\",\n description: \"Remote drive identifier.\",\n }),\n ...debugArgs,\n};\n\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\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 remoteDrive,\n debug,\n } = args;\n if (debug) {\n console.log({ 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 },\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 });\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 process.exit(0);\n },\n});\n","import { PH_BIN } from \"@powerhousedao/shared/clis\";\n\nexport const PH_BIN_PATH = process.argv[1];\nexport const PH_CLI_COMMANDS = [\n \"init\",\n \"dev\",\n \"connect\",\n \"generate\",\n \"reactor\",\n \"switchboard\",\n \"help\",\n \"install\",\n \"add\",\n \"i\",\n \"remove\",\n \"uninstall\",\n \"service\",\n \"list\",\n \"inspect\",\n \"version\",\n \"login\",\n \"logout\",\n];\nexport const PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\nexport const packageManagers = {\n bun: {\n installCommand: \"bun add {{dependency}}\",\n execCommand: `bun ${PH_BIN} {{arguments}}`,\n execScript: `bun {{arguments}}`,\n lockfile: \"bun.lock\",\n globalPathRegexp: /[\\\\/].bun[\\\\/]/,\n updateCommand: \"bun update {{dependency}}\",\n buildAffected: \"bun run build:affected\",\n workspaceOption: \"\",\n installDepsCommand: \"bun install\",\n },\n pnpm: {\n installCommand: \"pnpm add {{dependency}}\",\n execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,\n execScript: `pnpm {{arguments}}`,\n lockfile: \"pnpm-lock.yaml\",\n globalPathRegexp: /[\\\\/]pnpm[\\\\/]/,\n updateCommand: \"pnpm update {{dependency}}\",\n buildAffected: \"pnpm run build:affected\",\n workspaceOption: \"--workspace-root\",\n installDepsCommand: \"pnpm install\",\n },\n yarn: {\n installCommand: \"yarn add {{dependency}}\",\n execCommand: `yarn ${PH_BIN} {{arguments}}`,\n execScript: `yarn {{arguments}}`,\n lockfile: \"yarn.lock\",\n globalPathRegexp: /[\\\\/]yarn[\\\\/]/,\n updateCommand: \"yarn upgrade {{dependency}}\",\n buildAffected: \"yarn run build:affected\",\n workspaceOption: \"-W\",\n installDepsCommand: \"yarn install\",\n },\n npm: {\n installCommand: \"npm install {{dependency}}\",\n execCommand: `npx ${PH_BIN} {{arguments}}`,\n execScript: `npm run {{arguments}}`,\n lockfile: \"package-lock.json\",\n updateCommand: \"npm update {{dependency}} --save\",\n buildAffected: \"npm run build:affected\",\n workspaceOption: \"\",\n installDepsCommand: \"npm install\",\n },\n} as const;\n","import {\n POWERHOUSE_CONFIG_FILE,\n POWERHOUSE_GLOBAL_DIR,\n} from \"@powerhousedao/shared/clis\";\nimport { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport path, { dirname } from \"node:path\";\nimport { packageManagers } from \"./constants.js\";\nimport { createGlobalProject } from \"./create-global-project.js\";\nimport type { PackageManager, PathValidation, ProjectInfo } from \"./types.js\";\n\nexport function defaultPathValidation() {\n return true;\n}\n\nexport function isPowerhouseProject(dir: string) {\n const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);\n\n return existsSync(powerhouseConfigPath);\n}\n\nexport function findNodeProjectRoot(\n dir: string,\n pathValidation: PathValidation = defaultPathValidation,\n) {\n const packageJsonPath = path.join(dir, \"package.json\");\n\n if (existsSync(packageJsonPath) && pathValidation(dir)) {\n return dir;\n }\n\n const parentDir = dirname(dir);\n\n if (parentDir === dir) {\n return null;\n }\n\n return findNodeProjectRoot(parentDir, pathValidation);\n}\n\nexport function getPackageManagerFromPath(dir: string): PackageManager {\n const lowerCasePath = dir.toLowerCase();\n\n if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {\n return \"bun\";\n } else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {\n return \"pnpm\";\n } else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {\n return \"yarn\";\n }\n\n return \"npm\";\n}\n\nexport function getPackageManagerFromLockfile(dir: string): PackageManager {\n if (existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {\n return \"pnpm\";\n } else if (existsSync(path.join(dir, packageManagers.yarn.lockfile))) {\n return \"yarn\";\n } else if (existsSync(path.join(dir, packageManagers.bun.lockfile))) {\n return \"bun\";\n }\n\n return \"npm\";\n}\n\nexport async function getProjectInfo(\n debug?: boolean,\n generateGlobalProject = true,\n): Promise<ProjectInfo> {\n const currentPath = process.cwd();\n\n if (debug) {\n console.log(\">>> currentPath:\", currentPath);\n }\n\n const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);\n\n if (!projectPath) {\n let available = existsSync(POWERHOUSE_GLOBAL_DIR);\n\n if (generateGlobalProject) {\n await createGlobalProject();\n available = true;\n }\n\n return {\n available,\n isGlobal: true,\n path: POWERHOUSE_GLOBAL_DIR,\n };\n }\n\n return {\n isGlobal: false,\n available: true,\n path: projectPath,\n };\n}\n\nexport function forwardPHCommand(\n packageManager: PackageManager,\n projectPath: string,\n args: string,\n debug?: boolean,\n captureOutput = false,\n) {\n const manager = packageManagers[packageManager];\n const command = manager.execCommand;\n const execCommand = command.replace(\"{{arguments}}\", args);\n\n const commandOptions = { cwd: projectPath };\n\n if (debug) {\n console.log(\">>> execCommand:\", execCommand);\n console.log(\">>> commandOptions:\", commandOptions);\n console.log(\">>> projectPath:\", projectPath);\n console.log(\">>> packageManager:\", packageManager);\n }\n\n if (captureOutput) {\n // Capture output and return it\n try {\n return execSync(execCommand, {\n stdio: \"pipe\",\n encoding: \"utf8\",\n ...commandOptions,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute command: ${execCommand}\\nError: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n } else {\n // Original behavior - pipe directly to stdout/stderr\n execSync(execCommand, {\n stdio: \"inherit\",\n ...commandOptions,\n });\n return \"\";\n }\n}\n\n/**\n * Recursively searches for a specific file by traversing up the directory tree.\n * Starting from the given path, it checks each parent directory until it finds\n * the target file or reaches the root directory.\n *\n * @param startPath - The absolute path of the directory to start searching from\n * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')\n * @returns The absolute path of the directory containing the target file, or null if not found\n *\n * @example\n * // Find the workspace root directory\n * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');\n *\n * // Find the nearest package.json\n * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');\n */\nexport const findContainerDirectory = (\n startPath: string,\n targetFile: string,\n): string | null => {\n const filePath = path.join(startPath, targetFile);\n\n if (existsSync(filePath)) {\n return startPath;\n }\n\n const parentDir = path.dirname(startPath);\n\n //reached the root directory and haven't found the file\n if (parentDir === startPath) {\n return null;\n }\n\n return findContainerDirectory(parentDir, targetFile);\n};\n","import { createProject } from \"@powerhousedao/codegen\";\nimport {\n HOME_DIR,\n PH_GLOBAL_DIR_NAME,\n POWERHOUSE_GLOBAL_DIR,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { PH_BIN_PATH, PH_GLOBAL_PACKAGE_NAME } from \"./constants.js\";\nimport { getPackageManagerFromPath } from \"./package-manager.js\";\nimport type { GlobalProjectOptions } from \"./types.js\";\n\nexport const createGlobalProject = async (\n projectName?: string,\n options: GlobalProjectOptions = {},\n) => {\n // check if the global project already exists\n const globalProjectExists = existsSync(POWERHOUSE_GLOBAL_DIR);\n\n if (globalProjectExists) {\n // Fix existing installations with invalid \".ph\" package name\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n console.log(\"📦 Fixing invalid package name in global project...\");\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore errors reading/writing package.json\n }\n }\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n return;\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n\n try {\n await createProject({\n name: PH_GLOBAL_DIR_NAME,\n tag: parseTag(options),\n packageManager:\n parsePackageManager(options) ?? getPackageManagerFromPath(PH_BIN_PATH),\n });\n\n // Fix the package.json name - \".ph\" is invalid for npm/vite\n // The directory name can be \".ph\" but the package name must be valid\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as {\n name?: string;\n };\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n } catch (error) {\n console.error(\"❌ Failed to initialize the global project\", error);\n }\n};\n","import { command } from \"cmd-ts\";\nimport { createGlobalProject } from \"../utils/create-global-project.js\";\nimport { initArgs } from \"./init.js\";\n\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n const { namePositional, nameOption, debug, ...options } = args;\n if (debug) {\n console.log({ args });\n }\n const name = namePositional ?? nameOption;\n await createGlobalProject(name, options);\n process.exit(0);\n },\n});\n","import {\n debugArgs,\n getTagFromVersion,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\nimport { detect } from \"package-manager-detector/detect\";\nimport { readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\n\nexport const update = command({\n name: \"update\",\n description:\n \"Update your powerhouse dependencies to their latest tagged version\",\n args: {\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n console.log(`\\n▶️ Updating Powerhouse dependencies...\\n`);\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project updated successfully\\n`));\n\n if (skipInstall) return;\n\n const packageManager = await detect();\n\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n process.exit(0);\n },\n});\n","import {\n debugArgs,\n directoryExists,\n logVersionUpdate,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport {\n ALL_POWERHOUSE_DEPENDENCIES,\n APPS_DEPENDENCIES,\n CLIS_DEPENDENCIES,\n} from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\nimport path from \"path\";\nimport { readPackage } from \"read-pkg\";\nimport { writePackage } from \"write-package\";\n\nexport const useLocal = command({\n name: \"use-local\",\n description:\n \"Use your local `powerhouse` monorepo dependencies the current project.\",\n args: {\n monorepoPathPositional: positional({\n type: optional(string),\n displayName: \"monorepo path\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n monorepoPathOption: option({\n type: optional(string),\n long: \"path\",\n short: \"p\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with `pnpm`\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { monorepoPathPositional, monorepoPathOption, skipInstall, debug } =\n args;\n if (debug) {\n console.log({ args });\n }\n const monorepoPath = monorepoPathPositional ?? monorepoPathOption;\n\n if (!monorepoPath) {\n throw new Error(\n \"❌ Please provide the path to your local powerhouse monorepo.\",\n );\n }\n\n const monorepoDirExists = await directoryExists(monorepoPath);\n\n if (!monorepoDirExists) {\n throw new Error(\n \"❌ No directory found at the powerhouse monorepo path you specified.\",\n );\n }\n\n console.log(\n `\\n▶️ Linking powerhouse dependencies to \"${chalk.bold(monorepoPath)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = buildPnpmLink(name, monorepoPath);\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project linked successfully\\n`));\n\n if (!skipInstall) {\n console.log(`Installing linked dependencies with \\`pnpm\\`\\n`);\n runCmd(`pnpm install`);\n }\n\n process.exit(0);\n },\n});\n\nfunction buildPnpmLink(packageName: string, monorepoPath: string) {\n const isCli = CLIS_DEPENDENCIES.includes(packageName);\n const isApp = APPS_DEPENDENCIES.includes(packageName);\n const packageDir = isCli ? \"clis\" : isApp ? \"apps\" : \"packages\";\n const packageNameWithoutNamespace = packageName.replace(\n \"@powerhousedao/\",\n \"\",\n );\n const packagePath = path.join(\n monorepoPath,\n packageDir,\n packageNameWithoutNamespace,\n );\n const pnpmLink = `link:${packagePath}`;\n\n return pnpmLink;\n}\n\nexport async function runUseLocal(args: string[]) {\n await run(useLocal, args);\n}\n","import {\n debugArgs,\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n} from \"@powerhousedao/shared/clis\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport chalk from \"chalk\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\nimport { detect } from \"package-manager-detector/detect\";\nimport { readPackage } from \"read-pkg\";\nimport { clean, valid } from \"semver\";\nimport { writePackage } from \"write-package\";\n\nexport const use = command({\n name: \"use\",\n description: \"Specify the release version of Powerhouse dependencies to use.\",\n args: {\n tagPositional: positional({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n displayName: \"tag\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n tagOption: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", or \"dev\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { tagPositional, tagOption, version, skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n const tag = tagPositional ?? tagOption;\n handleMutuallyExclusiveOptions({ tag, version }, \"versioning strategy\");\n\n if (!tag && !version) {\n throw new Error(\n \"Please specify either a release tag or a version to use.\",\n );\n }\n\n if (version && !valid(clean(version))) {\n throw new Error(`❌ Invalid version: ${chalk.bold(version)}`);\n }\n\n console.log(\n `▶️ Updating project to use ${chalk.bold(version ?? tag)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.dependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(\n chalk.green(\n `\\n✅ Project updated to use ${chalk.bold(version ?? tag)}\\n`,\n ),\n );\n\n if (!skipInstall) {\n const packageManager = await detect();\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n }\n\n process.exit(0);\n },\n});\n\nexport async function runUse(args: string[]) {\n await run(use, args);\n}\n","import {\n getPhCmdVersionInfo,\n phCliHelpCommands,\n} from \"@powerhousedao/shared/clis\";\nimport { subcommands } from \"cmd-ts\";\nimport { init } from \"./init.js\";\nimport { setupGlobals } from \"./setup-globals.js\";\nimport { update } from \"./update.js\";\nimport { useLocal } from \"./use-local.js\";\nimport { use } from \"./use.js\";\n\ndeclare const CLI_VERSION: string;\nconst phCmdVersionInfo = await getPhCmdVersionInfo(CLI_VERSION);\nexport const ph = subcommands({\n name: \"ph\",\n version: phCmdVersionInfo,\n description:\n \"The Powerhouse CLI (ph-cmd) is a command-line interface tool that provides essential commands for managing Powerhouse projects.\\nThe tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.\",\n cmds: {\n init,\n use,\n update,\n \"setup-globals\": setupGlobals,\n \"use-local\": useLocal,\n ...phCliHelpCommands,\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as ph } from "./ph-CFRiSf9A.mjs";
1
+ import { t as ph } from "./ph-cmPuVxF1.mjs";
2
2
  import { run as run$1 } from "cmd-ts";
3
3
  //#region src/run.ts
4
4
  async function run(args) {
@@ -7,4 +7,4 @@ async function run(args) {
7
7
  //#endregion
8
8
  export { run };
9
9
 
10
- //# sourceMappingURL=run-DwNw_OJ7.mjs.map
10
+ //# sourceMappingURL=run-D3l-rira.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-DwNw_OJ7.mjs","names":["runCmdTs"],"sources":["../src/run.ts"],"sourcesContent":["import { run as runCmdTs } from \"cmd-ts\";\nimport { ph } from \"./commands/ph.js\";\n\nexport async function run(args: string[]) {\n return await runCmdTs(ph, args);\n}\n"],"mappings":";;;AAGA,eAAsB,IAAI,MAAgB;AACxC,QAAO,MAAMA,MAAS,IAAI,KAAK"}
1
+ {"version":3,"file":"run-D3l-rira.mjs","names":["runCmdTs"],"sources":["../src/run.ts"],"sourcesContent":["import { run as runCmdTs } from \"cmd-ts\";\nimport { ph } from \"./commands/ph.js\";\n\nexport async function run(args: string[]) {\n return await runCmdTs(ph, args);\n}\n"],"mappings":";;;AAGA,eAAsB,IAAI,MAAgB;AACxC,QAAO,MAAMA,MAAS,IAAI,KAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ph-cmd",
3
- "version": "6.0.0-dev.109",
3
+ "version": "6.0.0-dev.110",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -31,9 +31,9 @@
31
31
  "read-pkg": "10.1.0",
32
32
  "write-package": "7.2.0",
33
33
  "semver": "7.7.4",
34
- "@powerhousedao/codegen": "6.0.0-dev.109",
35
- "@powerhousedao/common": "6.0.0-dev.109",
36
- "@powerhousedao/shared": "6.0.0-dev.109"
34
+ "@powerhousedao/shared": "6.0.0-dev.110",
35
+ "@powerhousedao/common": "6.0.0-dev.110",
36
+ "@powerhousedao/codegen": "6.0.0-dev.110"
37
37
  },
38
38
  "devDependencies": {
39
39
  "tsdown": "0.21.0",