ph-cmd 6.1.0 → 6.2.0-dev.1

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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1b86dd82-6b93-5626-9454-0799daf0f315")}catch(e){}}();
4
- import { t as getVersion } from "./get-version-CBbqfGAa.mjs";
4
+ import { t as getVersion } from "./get-version-qBZXVnFv.mjs";
5
5
  import { phCliCommandNames } from "@powerhousedao/shared/clis/command-names";
6
6
  import { initCliTelemetry } from "@powerhousedao/shared/clis/telemetry";
7
7
  import { assertNodeVersion } from "@powerhousedao/shared/clis/utils";
@@ -17,11 +17,11 @@ function detectPackageManager() {
17
17
  * any code is parsed to avoid errors on startup due to unsupported dependencies.
18
18
  */
19
19
  async function runPhCliCommand(phCliCommand) {
20
- const { executePhCliCommand } = await import("./ph-cli-DU9EOhSU.mjs");
20
+ const { executePhCliCommand } = await import("./ph-cli-BlHvUkXJ.mjs");
21
21
  return await executePhCliCommand(phCliCommand);
22
22
  }
23
23
  async function runPhCmdCommand(args) {
24
- const { run } = await import("./run-BX9mrxqr.mjs");
24
+ const { run } = await import("./run-Yu0m7lAR.mjs");
25
25
  return await run(args);
26
26
  }
27
27
  let sentryClient = void 0;
@@ -5,12 +5,12 @@
5
5
  * `bun run scripts/generate-commands-docs.ts` or `bun run src/cli.ts`).
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8fc0973f-eed4-5d6b-9af4-007da7d997a0")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3753ab2f-e063-5248-a3a2-b6e0aa4e3862")}catch(e){}}();
9
9
  function getVersion() {
10
- return "6.1.0";
10
+ return "6.2.0-dev.1";
11
11
  }
12
12
  //#endregion
13
13
  export { getVersion as t };
14
14
 
15
- //# sourceMappingURL=get-version-CBbqfGAa.mjs.map
16
- //# debugId=8fc0973f-eed4-5d6b-9af4-007da7d997a0
15
+ //# sourceMappingURL=get-version-qBZXVnFv.mjs.map
16
+ //# debugId=3753ab2f-e063-5248-a3a2-b6e0aa4e3862
@@ -1 +1 @@
1
- {"version":3,"file":"get-version-CBbqfGAa.mjs","sources":["../src/get-version.ts"],"sourcesContent":["declare const CLI_VERSION: string | undefined;\ndeclare const CLI_GIT_SHA: string | undefined;\n\n/**\n * Returns the CLI version string. Replaced inline by tsdown's `define` at\n * build time; falls back to env vars when running un-bundled (e.g. via\n * `bun run scripts/generate-commands-docs.ts` or `bun run src/cli.ts`).\n */\nexport function getVersion() {\n if (typeof CLI_VERSION !== \"undefined\") return CLI_VERSION;\n return (\n process.env.WORKSPACE_VERSION ||\n process.env.npm_package_version ||\n \"unknown\"\n );\n}\n\nexport function getGitHash() {\n if (typeof CLI_GIT_SHA !== \"undefined\") return CLI_GIT_SHA;\n return process.env.WORKSPACE_GIT_SHA || \"unknown\";\n}\n"],"names":[],"mappings":";;;;;;;;AAQA,SAAgB,aAAa;AACa,QAAA","debug_id":"8fc0973f-eed4-5d6b-9af4-007da7d997a0"}
1
+ {"version":3,"file":"get-version-qBZXVnFv.mjs","sources":["../src/get-version.ts"],"sourcesContent":["declare const CLI_VERSION: string | undefined;\ndeclare const CLI_GIT_SHA: string | undefined;\n\n/**\n * Returns the CLI version string. Replaced inline by tsdown's `define` at\n * build time; falls back to env vars when running un-bundled (e.g. via\n * `bun run scripts/generate-commands-docs.ts` or `bun run src/cli.ts`).\n */\nexport function getVersion() {\n if (typeof CLI_VERSION !== \"undefined\") return CLI_VERSION;\n return (\n process.env.WORKSPACE_VERSION ||\n process.env.npm_package_version ||\n \"unknown\"\n );\n}\n\nexport function getGitHash() {\n if (typeof CLI_GIT_SHA !== \"undefined\") return CLI_GIT_SHA;\n return process.env.WORKSPACE_GIT_SHA || \"unknown\";\n}\n"],"names":[],"mappings":";;;;;;;;AAQA,SAAgB,aAAa;AACa,QAAA","debug_id":"3753ab2f-e063-5248-a3a2-b6e0aa4e3862"}
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c6af2577-e4bb-5bcf-a266-7216856e6c39")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d0beed68-4641-53c6-933e-4bbe29ad23bc")}catch(e){}}();
3
3
  import { getPowerhouseProjectInfo } from "@powerhousedao/shared/clis";
4
- import { execSync } from "node:child_process";
4
+ import { spawnSync } from "node:child_process";
5
5
  import { resolveCommand } from "package-manager-detector";
6
6
  //#region src/ph-cli.ts
7
7
  async function executePhCliCommand(phCliCommand) {
@@ -15,20 +15,17 @@ async function executePhCliCommand(phCliCommand) {
15
15
  ]);
16
16
  if (!resolveExecuteLocalCommandResult) throw new Error(`Command ${phCliCommand} is not executable by package manager ${packageManager}. Either install "@powerhousedao/ph-cli" in your local package, or run \`ph setup-globals\` to globally install the "@powerhousedao/ph-cli" package.`);
17
17
  const { command, args } = resolveExecuteLocalCommandResult;
18
- const cmd = `${command} ${args.join(" ")}`;
19
- try {
20
- execSync(cmd, {
21
- stdio: "inherit",
22
- cwd: projectPath
23
- });
24
- } catch (err) {
25
- const e = err;
26
- if (typeof e.status === "number" && !e.signal) process.exit(e.status);
27
- throw err;
28
- }
18
+ const result = spawnSync(command, args, {
19
+ stdio: "inherit",
20
+ cwd: projectPath,
21
+ shell: false
22
+ });
23
+ if (result.error) throw result.error;
24
+ if (result.signal) throw new Error(`${command} terminated by signal ${result.signal}`);
25
+ if (typeof result.status === "number" && result.status !== 0) process.exit(result.status);
29
26
  }
30
27
  //#endregion
31
28
  export { executePhCliCommand };
32
29
 
33
- //# sourceMappingURL=ph-cli-DU9EOhSU.mjs.map
34
- //# debugId=c6af2577-e4bb-5bcf-a266-7216856e6c39
30
+ //# sourceMappingURL=ph-cli-BlHvUkXJ.mjs.map
31
+ //# debugId=d0beed68-4641-53c6-933e-4bbe29ad23bc
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ph-cli-BlHvUkXJ.mjs","sources":["../src/ph-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { getPowerhouseProjectInfo } from \"@powerhousedao/shared/clis\";\nimport { spawnSync } from \"node:child_process\";\nimport { resolveCommand } from \"package-manager-detector\";\n\nexport async function executePhCliCommand(phCliCommand: string) {\n const forwardedArgs = process.argv.slice(3);\n const { projectPath, packageManager } = await getPowerhouseProjectInfo(\n undefined,\n { silent: true },\n );\n if (!projectPath) {\n throw new Error(\n `No Powerhouse project directory found, cannot run \\`ph ${phCliCommand}\\`.\\nTo create a local project, run \\`ph init\\`.\\nTo create a global project, run \\`ph setup-globals\\`.`,\n );\n }\n const resolveExecuteLocalCommandResult = resolveCommand(\n packageManager,\n \"execute-local\",\n [\"ph-cli\", phCliCommand, ...forwardedArgs],\n );\n if (!resolveExecuteLocalCommandResult) {\n throw new Error(\n `Command ${phCliCommand} is not executable by package manager ${packageManager}. Either install \"@powerhousedao/ph-cli\" in your local package, or run \\`ph setup-globals\\` to globally install the \"@powerhousedao/ph-cli\" package.`,\n );\n }\n const { command, args } = resolveExecuteLocalCommandResult;\n // spawn (not execSync via a shell-joined string) so args containing shell\n // metacharacters survive intact — e.g. `ph connect build --json '{\"a\":\"b\"}'`\n // would otherwise lose its quotes when re-parsed by the shell.\n const result = spawnSync(command, args, {\n stdio: \"inherit\",\n cwd: projectPath,\n shell: false,\n });\n if (result.error) throw result.error;\n if (result.signal) {\n throw new Error(`${command} terminated by signal ${result.signal}`);\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n process.exit(result.status);\n }\n}\n"],"names":[],"mappings":";;;;;;AAKA,eAAsB,oBAAoB,cAAsB;CAC9D,MAAM,gBAAgB,QAAQ,KAAK,MAAM,EAAE;CAC3C,MAAM,EAAE,aAAa,mBAAmB,MAAM,yBAC5C,KAAA,GACA,EAAE,QAAQ,MAAM,CACjB;AACD,KAAI,CAAC,YACH,OAAM,IAAI,MACR,0DAA0D,aAAa,yGACxE;CAEH,MAAM,mCAAmC,eACvC,gBACA,iBACA;EAAC;EAAU;EAAc,GAAG;EAAc,CAC3C;AACD,KAAI,CAAC,iCACH,OAAM,IAAI,MACR,WAAW,aAAa,wCAAwC,eAAe,sJAChF;CAEH,MAAM,EAAE,SAAS,SAAS;CAI1B,MAAM,SAAS,UAAU,SAAS,MAAM;EACtC,OAAO;EACP,KAAK;EACL,OAAO;EACR,CAAC;AACF,KAAI,OAAO,MAAO,OAAM,OAAO;AAC/B,KAAI,OAAO,OACT,OAAM,IAAI,MAAM,GAAG,QAAQ,wBAAwB,OAAO,SAAS;AAErE,KAAI,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW,EACzD,SAAQ,KAAK,OAAO,OAAO","debug_id":"d0beed68-4641-53c6-933e-4bbe29ad23bc"}
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6cd2817b-b361-545a-9536-d5e854d5697d")}catch(e){}}();
3
- import { t as getVersion } from "./get-version-CBbqfGAa.mjs";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a091bd73-dc68-5f73-b5f8-529ec56049b7")}catch(e){}}();
3
+ import { t as getVersion } from "./get-version-qBZXVnFv.mjs";
4
4
  import { t as delegateInit } from "./delegate-init-CdcC0A3h.mjs";
5
5
  import { boolean, command, flag, oneOf, option, optional, positional, run as run$1, string, subcommands } from "cmd-ts";
6
6
  import { debugArgs, initArgs, phCliHelpCommands } from "@powerhousedao/shared/clis/args";
@@ -350,5 +350,5 @@ async function run(args) {
350
350
  //#endregion
351
351
  export { run };
352
352
 
353
- //# sourceMappingURL=run-BX9mrxqr.mjs.map
354
- //# debugId=6cd2817b-b361-545a-9536-d5e854d5697d
353
+ //# sourceMappingURL=run-Yu0m7lAR.mjs.map
354
+ //# debugId=a091bd73-dc68-5f73-b5f8-529ec56049b7
@@ -1 +1 @@
1
- {"version":3,"file":"run-BX9mrxqr.mjs","sources":["../src/commands/init.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.ts","../src/run.ts"],"sourcesContent":["import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { delegateInit } from \"../utils/delegate-init.js\";\n\n/**\n * Delegates `ph init` to the appropriate version of `@powerhousedao/ph-cli`.\n * This ensures the init logic (boilerplate, codegen) always matches the\n * ph-cli version being installed in the new project.\n */\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n await delegateInit(args);\n process.exit(0);\n },\n});\n","import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\n/**\n * `ph setup-globals` bootstraps the `~/.ph` project. It's the same flow as\n * `ph init` with `--name .ph` from the user's home directory, plus a\n * post-step that renames the package.json to `ph-global` (since `.ph` is\n * an invalid npm name).\n */\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n\n const { HOME_DIR, PH_GLOBAL_DIR_NAME, POWERHOUSE_GLOBAL_DIR } =\n await import(\"@powerhousedao/shared/clis\");\n\n /**\n * Fix the package.json `name` field for the global project — `.ph` is a\n * valid directory name but not a valid npm package name (vite + npm\n * reject names starting with a dot). We let `ph init` create the project\n * as `.ph` and then rename it here to `ph-global`.\n */\n const fixGlobalPackageName = (): void => {\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (!existsSync(packageJsonPath)) return;\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore parse/write failures — leaves the file untouched.\n }\n };\n\n // The directory itself can exist without the project being bootstrapped —\n // telemetry writes `~/.ph/telemetry.json` early on. Use the presence of\n // `package.json` as the real \"is initialized\" signal.\n const globalPackageJson = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(globalPackageJson)) {\n // Repair-in-place: an older bootstrap may have left `name: \".ph\"` in\n // package.json, which breaks vite/npm. Fix it on every invocation.\n fixGlobalPackageName();\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n process.exit(0);\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n const { delegateInit } = await import(\"../utils/delegate-init.js\");\n await delegateInit(args, [\"--name\", PH_GLOBAL_DIR_NAME]);\n fixGlobalPackageName();\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\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 [\n { default: chalk },\n { readPackage },\n { writePackage },\n { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"@powerhousedao/shared/clis\"),\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 { detect } = await import(\"package-manager-detector/detect\");\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 { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\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 { runUseLocal } = await import(\"@powerhousedao/shared/clis\");\n await runUseLocal(monorepoPath, skipInstall);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\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 const {\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n } = await import(\"@powerhousedao/shared/clis\");\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 const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { clean, valid },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"semver\"),\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 { detect } = await import(\"package-manager-detector/detect\");\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 { phCliHelpCommands } from \"@powerhousedao/shared/clis/args\";\nimport { subcommands } from \"cmd-ts\";\nimport { getVersion } from \"../get-version.js\";\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\n// `--version` is intercepted in cli.ts before the subcommand tree is\n// constructed, so cmd-ts only needs the bare version string here. The\n// rich version output (with project info, package manager, etc.) is\n// produced by `getPhCmdVersionInfo` along that short-circuit path.\nexport const ph = subcommands({\n name: \"ph\",\n version: getVersion(),\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","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"],"names":["runCmdTs"],"mappings":"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","debug_id":"6cd2817b-b361-545a-9536-d5e854d5697d"}
1
+ {"version":3,"file":"run-Yu0m7lAR.mjs","sources":["../src/commands/init.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.ts","../src/run.ts"],"sourcesContent":["import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { delegateInit } from \"../utils/delegate-init.js\";\n\n/**\n * Delegates `ph init` to the appropriate version of `@powerhousedao/ph-cli`.\n * This ensures the init logic (boilerplate, codegen) always matches the\n * ph-cli version being installed in the new project.\n */\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n await delegateInit(args);\n process.exit(0);\n },\n});\n","import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\n/**\n * `ph setup-globals` bootstraps the `~/.ph` project. It's the same flow as\n * `ph init` with `--name .ph` from the user's home directory, plus a\n * post-step that renames the package.json to `ph-global` (since `.ph` is\n * an invalid npm name).\n */\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n\n const { HOME_DIR, PH_GLOBAL_DIR_NAME, POWERHOUSE_GLOBAL_DIR } =\n await import(\"@powerhousedao/shared/clis\");\n\n /**\n * Fix the package.json `name` field for the global project — `.ph` is a\n * valid directory name but not a valid npm package name (vite + npm\n * reject names starting with a dot). We let `ph init` create the project\n * as `.ph` and then rename it here to `ph-global`.\n */\n const fixGlobalPackageName = (): void => {\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (!existsSync(packageJsonPath)) return;\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore parse/write failures — leaves the file untouched.\n }\n };\n\n // The directory itself can exist without the project being bootstrapped —\n // telemetry writes `~/.ph/telemetry.json` early on. Use the presence of\n // `package.json` as the real \"is initialized\" signal.\n const globalPackageJson = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(globalPackageJson)) {\n // Repair-in-place: an older bootstrap may have left `name: \".ph\"` in\n // package.json, which breaks vite/npm. Fix it on every invocation.\n fixGlobalPackageName();\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n process.exit(0);\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n const { delegateInit } = await import(\"../utils/delegate-init.js\");\n await delegateInit(args, [\"--name\", PH_GLOBAL_DIR_NAME]);\n fixGlobalPackageName();\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\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 [\n { default: chalk },\n { readPackage },\n { writePackage },\n { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"@powerhousedao/shared/clis\"),\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 { detect } = await import(\"package-manager-detector/detect\");\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 { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\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 { runUseLocal } = await import(\"@powerhousedao/shared/clis\");\n await runUseLocal(monorepoPath, skipInstall);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\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 const {\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n } = await import(\"@powerhousedao/shared/clis\");\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 const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { clean, valid },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"semver\"),\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 { detect } = await import(\"package-manager-detector/detect\");\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 { phCliHelpCommands } from \"@powerhousedao/shared/clis/args\";\nimport { subcommands } from \"cmd-ts\";\nimport { getVersion } from \"../get-version.js\";\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\n// `--version` is intercepted in cli.ts before the subcommand tree is\n// constructed, so cmd-ts only needs the bare version string here. The\n// rich version output (with project info, package manager, etc.) is\n// produced by `getPhCmdVersionInfo` along that short-circuit path.\nexport const ph = subcommands({\n name: \"ph\",\n version: getVersion(),\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","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"],"names":["runCmdTs"],"mappings":";;;;;;;;;;;;;;;AASA,MAAa,OAAO,QAAQ;CAC1B,MAAM;CACN,aAAa;CACb,MAAM;CACN,SAAS,OAAO,SAAS;AACvB,MAAI,KAAK,MACP,SAAQ,IAAI,EAAE,MAAM,CAAC;AAEvB,QAAM,aAAa,KAAK;AACxB,UAAQ,KAAK,EAAE;;CAElB,CAAC;;;ACfF,MAAM,yBAAyB;;;;;;;AAQ/B,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,aAAa;CACb,MAAM;CACN,SAAS,OAAO,SAAS;AACvB,MAAI,KAAK,MACP,SAAQ,IAAI,EAAE,MAAM,CAAC;EAGvB,MAAM,EAAE,UAAU,oBAAoB,0BACpC,MAAM,OAAO;;;;;;;EAQf,MAAM,6BAAmC;GACvC,MAAM,kBAAkB,KAAK,KAAK,uBAAuB,eAAe;AACxE,OAAI,CAAC,WAAW,gBAAgB,CAAE;AAClC,OAAI;IACF,MAAM,cAAc,KAAK,MACvB,aAAa,iBAAiB,QAAQ,CACvC;AACD,QAAI,YAAY,MAAM,WAAW,IAAI,EAAE;AACrC,iBAAY,OAAO;AACnB,mBAAc,iBAAiB,KAAK,UAAU,aAAa,MAAM,EAAE,CAAC;;WAEhE;;AASV,MAAI,WADsB,KAAK,KAAK,uBAAuB,eAAe,CACzC,EAAE;AAGjC,yBAAsB;AACtB,WAAQ,IAAI,4BAA4B,wBAAwB;AAChE,WAAQ,KAAK,EAAE;;AAGjB,UAAQ,IAAI,oCAAoC;AAChD,UAAQ,MAAM,SAAS;EACvB,MAAM,EAAE,iBAAiB,MAAM,OAAO;AACtC,QAAM,aAAa,MAAM,CAAC,UAAU,mBAAmB,CAAC;AACxD,wBAAsB;AACtB,UAAQ,IACN,+CAA+C,wBAChD;AACD,UAAQ,KAAK,EAAE;;CAElB,CAAC;;;ACjEF,MAAa,SAAS,QAAQ;CAC5B,MAAM;CACN,aACE;CACF,MAAM;EACJ,aAAa,KAAK;GAChB,MAAM,SAAS,QAAQ;GACvB,MAAM;GACN,OAAO;GACP,aAAa;GACd,CAAC;EACF,GAAG;EACJ;CACD,SAAS,OAAO,SAAS;EACvB,MAAM,EAAE,aAAa,UAAU;AAC/B,MAAI,MACF,SAAQ,IAAI,EAAE,MAAM,CAAC;AAEvB,UAAQ,IAAI,6CAA6C;EACzD,MAAM,CACJ,EAAE,SAAS,SACX,EAAE,eACF,EAAE,gBACF,EAAE,mBAAmB,kBAAkB,qBAAqB,YAC1D,MAAM,QAAQ,IAAI;GACpB,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACR,CAAC;EACF,MAAM,cAAc,MAAM,aAAa;AAEvC,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,YAAY,aAAa,CACpE,KAAI,WAAW,4BAA4B,SAAS,KAAK,EAAE;IAEzD,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM,KADzC,kBAAkB,QAAQ;KACoB,CAAC;AAC3D,gBAAY,aAAa,QAAQ;AACjC,qBAAiB;KACf;KACA;KACA;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,YAAY,OAAO,QACnC,YAAY,gBACb,CACC,KAAI,WAAW,4BAA4B,SAAS,KAAK,EAAE;IAEzD,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM,KADzC,kBAAkB,QAAQ;KACoB,CAAC;AAC3D,gBAAY,gBAAgB,QAAQ;AACpC,qBAAiB;KACf;KACA;KACA;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,YAAY,OAAO,QACnC,YAAY,qBACb,CACC,KAAI,WAAW,4BAA4B,SAAS,KAAK,EAAE;IAEzD,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM,KADzC,kBAAkB,QAAQ;KACoB,CAAC;AAC3D,gBAAY,qBAAqB,QAAQ;AACzC,qBAAiB;KACf;KACA;KACA;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,YAAY,OAAO,QACnC,YAAY,iBACb,CACC,KAAI,WAAW,4BAA4B,SAAS,KAAK,EAAE;IAEzD,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM,KADzC,kBAAkB,QAAQ;KACoB,CAAC;AAC3D,gBAAY,iBAAiB,QAAQ;AACrC,qBAAiB;KACf;KACA;KACA;KACD,CAAC;;;AAKR,QAAM,aAAa,YAAY;AAE/B,UAAQ,IAAI,MAAM,MAAM,qCAAqC,CAAC;AAE9D,MAAI,YAAa;EAEjB,MAAM,EAAE,WAAW,MAAM,OAAO;EAChC,MAAM,iBAAiB,MAAM,QAAQ;AAErC,MAAI,CAAC,eACH,OAAM,IAAI,MACR,iEACD;AAEH,UAAQ,IACN,6CAA6C,eAAe,MAAM,MACnE;AACD,SAAO,GAAG,eAAe,MAAM,UAAU;AACzC,UAAQ,KAAK,EAAE;;CAElB,CAAC;;;AC/GF,MAAa,WAAW,QAAQ;CAC9B,MAAM;CACN,aACE;CACF,MAAM;EACJ,wBAAwB,WAAW;GACjC,MAAM,SAAS,OAAO;GACtB,aAAa;GACb,aACE;GACH,CAAC;EACF,oBAAoB,OAAO;GACzB,MAAM,SAAS,OAAO;GACtB,MAAM;GACN,OAAO;GACP,aACE;GACH,CAAC;EACF,aAAa,KAAK;GAChB,MAAM,SAAS,QAAQ;GACvB,MAAM;GACN,OAAO;GACP,aAAa;GACd,CAAC;EACF,GAAG;EACJ;CACD,SAAS,OAAO,SAAS;EACvB,MAAM,EAAE,wBAAwB,oBAAoB,aAAa,UAC/D;AACF,MAAI,MACF,SAAQ,IAAI,EAAE,MAAM,CAAC;EAEvB,MAAM,eAAe,0BAA0B;AAE/C,MAAI,CAAC,aACH,OAAM,IAAI,MACR,+DACD;EAGH,MAAM,EAAE,gBAAgB,MAAM,OAAO;AACrC,QAAM,YAAY,cAAc,YAAY;AAC5C,UAAQ,KAAK,EAAE;;CAElB,CAAC;;;ACzCF,MAAa,MAAM,QAAQ;CACzB,MAAM;CACN,aAAa;CACb,MAAM;EACJ,eAAe,WAAW;GACxB,MAAM,SAAS,MAAM;IAAC;IAAU;IAAW;IAAM,CAAC,CAAC;GACnD,aAAa;GACb,aAAa;GACd,CAAC;EACF,WAAW,OAAO;GAChB,MAAM,SAAS,MAAM;IAAC;IAAU;IAAW;IAAM,CAAC,CAAC;GACnD,MAAM;GACN,OAAO;GACP,aAAa;GACd,CAAC;EACF,SAAS,OAAO;GACd,MAAM,SAAS,OAAO;GACtB,MAAM;GACN,OAAO;GACP,aACE;GACH,CAAC;EACF,aAAa,KAAK;GAChB,MAAM,SAAS,QAAQ;GACvB,MAAM;GACN,OAAO;GACP,aAAa;GACd,CAAC;EACF,GAAG;EACJ;CACD,SAAS,OAAO,SAAS;EACvB,MAAM,EAAE,eAAe,WAAW,SAAS,aAAa,UAAU;AAClE,MAAI,MACF,SAAQ,IAAI,EAAE,MAAM,CAAC;EAEvB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EACJ,gCACA,kBACA,qBACA,WACE,MAAM,OAAO;AACjB,iCAA+B;GAAE;GAAK;GAAS,EAAE,sBAAsB;AAEvE,MAAI,CAAC,OAAO,CAAC,QACX,OAAM,IAAI,MACR,2DACD;EAGH,MAAM,CACJ,EAAE,SAAS,SACX,EAAE,eACF,EAAE,gBACF,EAAE,OAAO,WACP,MAAM,QAAQ,IAAI;GACpB,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACR,CAAC;AAEF,MAAI,WAAW,CAAC,MAAM,MAAM,QAAQ,CAAC,CACnC,OAAM,IAAI,MAAM,sBAAsB,MAAM,KAAK,QAAQ,GAAG;AAG9D,UAAQ,IACN,8BAA8B,MAAM,KAAK,WAAW,IAAI,CAAC,OAC1D;EAED,MAAM,cAAc,MAAM,aAAa;AAEvC,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,oBAAoB,OAAO,QAC3C,YAAY,aACb,CACC,KAAI,mBAAmB,4BAA4B,SAAS,KAAK,EAAE;IACjE,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM;KAAK;KAAS,CAAC;AACpE,gBAAY,aAAa,QAAQ;AACjC,qBAAiB;KACf;KACA,SAAS;KACT;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,oBAAoB,OAAO,QAC3C,YAAY,gBACb,CACC,KAAI,mBAAmB,4BAA4B,SAAS,KAAK,EAAE;IACjE,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM;KAAK;KAAS,CAAC;AACpE,gBAAY,gBAAgB,QAAQ;AACpC,qBAAiB;KACf;KACA,SAAS;KACT;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,oBAAoB,OAAO,QAC3C,YAAY,qBACb,CACC,KAAI,mBAAmB,4BAA4B,SAAS,KAAK,EAAE;IACjE,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM;KAAK;KAAS,CAAC;AACpE,gBAAY,qBAAqB,QAAQ;AACzC,qBAAiB;KACf;KACA,SAAS;KACT;KACD,CAAC;;;AAKR,MAAI,YAAY;QACT,MAAM,CAAC,MAAM,oBAAoB,OAAO,QAC3C,YAAY,iBACb,CACC,KAAI,mBAAmB,4BAA4B,SAAS,KAAK,EAAE;IACjE,MAAM,aAAa,MAAM,oBAAoB;KAAE;KAAM;KAAK;KAAS,CAAC;AACpE,gBAAY,iBAAiB,QAAQ;AACrC,qBAAiB;KACf;KACA,SAAS;KACT;KACD,CAAC;;;AAKR,QAAM,aAAa,YAAY;AAE/B,UAAQ,IACN,MAAM,MACJ,8BAA8B,MAAM,KAAK,WAAW,IAAI,CAAC,IAC1D,CACF;AAED,MAAI,CAAC,aAAa;GAChB,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,iBAAiB,MAAM,QAAQ;AACrC,OAAI,CAAC,eACH,OAAM,IAAI,MACR,iEACD;AAEH,WAAQ,IACN,6CAA6C,eAAe,MAAM,MACnE;AACD,UAAO,GAAG,eAAe,MAAM,UAAU;;AAG3C,UAAQ,KAAK,EAAE;;CAElB,CAAC;;;ACjKF,MAAa,KAAK,YAAY;CAC5B,MAAM;CACN,SAAS,YAAY;CACrB,aACE;CACF,MAAM;EACJ;EACA;EACA;EACA,iBAAiB;EACjB,aAAa;EACb,GAAG;EACJ;CACF,CAAC;;;ACvBF,eAAsB,IAAI,MAAgB;AACxC,QAAO,MAAMA,MAAS,IAAI,KAAK","debug_id":"a091bd73-dc68-5f73-b5f8-529ec56049b7"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ph-cmd",
3
- "version": "6.1.0",
3
+ "version": "6.2.0-dev.1",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -30,12 +30,12 @@
30
30
  "read-pkg": "10.1.0",
31
31
  "semver": "7.7.4",
32
32
  "write-package": "7.2.0",
33
- "@powerhousedao/shared": "6.1.0"
33
+ "@powerhousedao/shared": "6.2.0-dev.1"
34
34
  },
35
35
  "devDependencies": {
36
36
  "tsdown": "0.21.1",
37
37
  "vitest": "4.1.1",
38
- "@powerhousedao/codegen": "6.1.0"
38
+ "@powerhousedao/codegen": "6.2.0-dev.1"
39
39
  },
40
40
  "scripts": {
41
41
  "tsc": "tsc",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ph-cli-DU9EOhSU.mjs","sources":["../src/ph-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { getPowerhouseProjectInfo } from \"@powerhousedao/shared/clis\";\nimport { execSync } from \"node:child_process\";\nimport { resolveCommand } from \"package-manager-detector\";\n\nexport async function executePhCliCommand(phCliCommand: string) {\n const forwardedArgs = process.argv.slice(3);\n const { projectPath, packageManager } = await getPowerhouseProjectInfo(\n undefined,\n { silent: true },\n );\n if (!projectPath) {\n throw new Error(\n `No Powerhouse project directory found, cannot run \\`ph ${phCliCommand}\\`.\\nTo create a local project, run \\`ph init\\`.\\nTo create a global project, run \\`ph setup-globals\\`.`,\n );\n }\n const resolveExecuteLocalCommandResult = resolveCommand(\n packageManager,\n \"execute-local\",\n [\"ph-cli\", phCliCommand, ...forwardedArgs],\n );\n if (!resolveExecuteLocalCommandResult) {\n throw new Error(\n `Command ${phCliCommand} is not executable by package manager ${packageManager}. Either install \"@powerhousedao/ph-cli\" in your local package, or run \\`ph setup-globals\\` to globally install the \"@powerhousedao/ph-cli\" package.`,\n );\n }\n const { command, args } = resolveExecuteLocalCommandResult;\n const cmd = `${command} ${args.join(\" \")}`;\n try {\n execSync(cmd, { stdio: \"inherit\", cwd: projectPath });\n } catch (err) {\n // propagate normal non-zero exits but throw on abnormal exits to ensure the error is reported\n const e = err as { status?: number | null; signal?: NodeJS.Signals | null };\n if (typeof e.status === \"number\" && !e.signal) {\n process.exit(e.status);\n }\n throw err;\n }\n}\n"],"names":[],"mappings":";;;;;;AAKA,eAAsB,oBAAoB,cAAsB;CAC9D,MAAM,gBAAgB,QAAQ,KAAK,MAAM,EAAE;CAC3C,MAAM,EAAE,aAAa,mBAAmB,MAAM,yBAC5C,KAAA,GACA,EAAE,QAAQ,MAAM,CACjB;AACD,KAAI,CAAC,YACH,OAAM,IAAI,MACR,0DAA0D,aAAa,yGACxE;CAEH,MAAM,mCAAmC,eACvC,gBACA,iBACA;EAAC;EAAU;EAAc,GAAG;EAAc,CAC3C;AACD,KAAI,CAAC,iCACH,OAAM,IAAI,MACR,WAAW,aAAa,wCAAwC,eAAe,sJAChF;CAEH,MAAM,EAAE,SAAS,SAAS;CAC1B,MAAM,MAAM,GAAG,QAAQ,GAAG,KAAK,KAAK,IAAI;AACxC,KAAI;AACF,WAAS,KAAK;GAAE,OAAO;GAAW,KAAK;GAAa,CAAC;UAC9C,KAAK;EAEZ,MAAM,IAAI;AACV,MAAI,OAAO,EAAE,WAAW,YAAY,CAAC,EAAE,OACrC,SAAQ,KAAK,EAAE,OAAO;AAExB,QAAM","debug_id":"c6af2577-e4bb-5bcf-a266-7216856e6c39"}