ph-cmd 6.0.0-dev.2 → 6.0.0-dev.200

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.
Files changed (150) hide show
  1. package/dist/cli.d.mts +1 -0
  2. package/dist/cli.mjs +51 -0
  3. package/dist/cli.mjs.map +1 -0
  4. package/dist/generate-commands-docs.d.mts +1 -0
  5. package/dist/generate-commands-docs.mjs +41 -0
  6. package/dist/generate-commands-docs.mjs.map +1 -0
  7. package/dist/ph-CzQLX9vM.mjs +416 -0
  8. package/dist/ph-CzQLX9vM.mjs.map +1 -0
  9. package/dist/ph-cli-1NIlwpsP.mjs +23 -0
  10. package/dist/ph-cli-1NIlwpsP.mjs.map +1 -0
  11. package/dist/run-BJIj5jSO.mjs +10 -0
  12. package/dist/run-BJIj5jSO.mjs.map +1 -0
  13. package/package.json +23 -20
  14. package/dist/scripts/generate-commands-md.d.ts +0 -2
  15. package/dist/scripts/generate-commands-md.d.ts.map +0 -1
  16. package/dist/scripts/generate-commands-md.js +0 -72
  17. package/dist/scripts/generate-commands-md.js.map +0 -1
  18. package/dist/scripts/generate-version.d.ts +0 -2
  19. package/dist/scripts/generate-version.d.ts.map +0 -1
  20. package/dist/scripts/generate-version.js +0 -13
  21. package/dist/scripts/generate-version.js.map +0 -1
  22. package/dist/src/cli.d.ts +0 -3
  23. package/dist/src/cli.d.ts.map +0 -1
  24. package/dist/src/cli.js +0 -120
  25. package/dist/src/cli.js.map +0 -1
  26. package/dist/src/commands/__tests__/update.test.d.ts +0 -2
  27. package/dist/src/commands/__tests__/update.test.d.ts.map +0 -1
  28. package/dist/src/commands/__tests__/update.test.js +0 -157
  29. package/dist/src/commands/__tests__/update.test.js.map +0 -1
  30. package/dist/src/commands/__tests__/use.test.d.ts +0 -2
  31. package/dist/src/commands/__tests__/use.test.d.ts.map +0 -1
  32. package/dist/src/commands/__tests__/use.test.js +0 -496
  33. package/dist/src/commands/__tests__/use.test.js.map +0 -1
  34. package/dist/src/commands/checkout.d.ts +0 -9
  35. package/dist/src/commands/checkout.d.ts.map +0 -1
  36. package/dist/src/commands/checkout.js +0 -37
  37. package/dist/src/commands/checkout.js.map +0 -1
  38. package/dist/src/commands/forward.d.ts +0 -7
  39. package/dist/src/commands/forward.d.ts.map +0 -1
  40. package/dist/src/commands/forward.js +0 -45
  41. package/dist/src/commands/forward.js.map +0 -1
  42. package/dist/src/commands/help.d.ts +0 -7
  43. package/dist/src/commands/help.d.ts.map +0 -1
  44. package/dist/src/commands/help.js +0 -14
  45. package/dist/src/commands/help.js.map +0 -1
  46. package/dist/src/commands/index.d.ts +0 -9
  47. package/dist/src/commands/index.d.ts.map +0 -1
  48. package/dist/src/commands/index.js +0 -15
  49. package/dist/src/commands/index.js.map +0 -1
  50. package/dist/src/commands/init.d.ts +0 -2
  51. package/dist/src/commands/init.d.ts.map +0 -1
  52. package/dist/src/commands/init.js +0 -165
  53. package/dist/src/commands/init.js.map +0 -1
  54. package/dist/src/commands/setup-globals.d.ts +0 -20
  55. package/dist/src/commands/setup-globals.d.ts.map +0 -1
  56. package/dist/src/commands/setup-globals.js +0 -24
  57. package/dist/src/commands/setup-globals.js.map +0 -1
  58. package/dist/src/commands/update.d.ts +0 -2
  59. package/dist/src/commands/update.d.ts.map +0 -1
  60. package/dist/src/commands/update.js +0 -95
  61. package/dist/src/commands/update.js.map +0 -1
  62. package/dist/src/commands/update.old.d.ts +0 -13
  63. package/dist/src/commands/update.old.d.ts.map +0 -1
  64. package/dist/src/commands/update.old.js +0 -105
  65. package/dist/src/commands/update.old.js.map +0 -1
  66. package/dist/src/commands/use-local.d.ts +0 -2
  67. package/dist/src/commands/use-local.d.ts.map +0 -1
  68. package/dist/src/commands/use-local.js +0 -115
  69. package/dist/src/commands/use-local.js.map +0 -1
  70. package/dist/src/commands/use.d.ts +0 -2
  71. package/dist/src/commands/use.d.ts.map +0 -1
  72. package/dist/src/commands/use.js +0 -117
  73. package/dist/src/commands/use.js.map +0 -1
  74. package/dist/src/commands/use.old.d.ts +0 -55
  75. package/dist/src/commands/use.old.d.ts.map +0 -1
  76. package/dist/src/commands/use.old.js +0 -219
  77. package/dist/src/commands/use.old.js.map +0 -1
  78. package/dist/src/commands/version.d.ts +0 -5
  79. package/dist/src/commands/version.d.ts.map +0 -1
  80. package/dist/src/commands/version.js +0 -42
  81. package/dist/src/commands/version.js.map +0 -1
  82. package/dist/src/help.d.ts +0 -25
  83. package/dist/src/help.d.ts.map +0 -1
  84. package/dist/src/help.js +0 -230
  85. package/dist/src/help.js.map +0 -1
  86. package/dist/src/index.d.ts +0 -3
  87. package/dist/src/index.d.ts.map +0 -1
  88. package/dist/src/index.js +0 -3
  89. package/dist/src/index.js.map +0 -1
  90. package/dist/src/types.d.ts +0 -2
  91. package/dist/src/types.d.ts.map +0 -1
  92. package/dist/src/types.js +0 -2
  93. package/dist/src/types.js.map +0 -1
  94. package/dist/src/utils/constants.d.ts +0 -59
  95. package/dist/src/utils/constants.d.ts.map +0 -1
  96. package/dist/src/utils/constants.js +0 -102
  97. package/dist/src/utils/constants.js.map +0 -1
  98. package/dist/src/utils/dependencies.d.ts +0 -4
  99. package/dist/src/utils/dependencies.d.ts.map +0 -1
  100. package/dist/src/utils/dependencies.js +0 -61
  101. package/dist/src/utils/dependencies.js.map +0 -1
  102. package/dist/src/utils/file-system.d.ts +0 -2
  103. package/dist/src/utils/file-system.d.ts.map +0 -1
  104. package/dist/src/utils/file-system.js +0 -12
  105. package/dist/src/utils/file-system.js.map +0 -1
  106. package/dist/src/utils/help-formatting.d.ts +0 -35
  107. package/dist/src/utils/help-formatting.d.ts.map +0 -1
  108. package/dist/src/utils/help-formatting.js +0 -188
  109. package/dist/src/utils/help-formatting.js.map +0 -1
  110. package/dist/src/utils/help.d.ts +0 -31
  111. package/dist/src/utils/help.d.ts.map +0 -1
  112. package/dist/src/utils/help.js +0 -72
  113. package/dist/src/utils/help.js.map +0 -1
  114. package/dist/src/utils/index.d.ts +0 -8
  115. package/dist/src/utils/index.d.ts.map +0 -1
  116. package/dist/src/utils/index.js +0 -7
  117. package/dist/src/utils/index.js.map +0 -1
  118. package/dist/src/utils/package-manager.d.ts +0 -27
  119. package/dist/src/utils/package-manager.d.ts.map +0 -1
  120. package/dist/src/utils/package-manager.js +0 -177
  121. package/dist/src/utils/package-manager.js.map +0 -1
  122. package/dist/src/utils/parsing.d.ts +0 -20
  123. package/dist/src/utils/parsing.d.ts.map +0 -1
  124. package/dist/src/utils/parsing.js +0 -52
  125. package/dist/src/utils/parsing.js.map +0 -1
  126. package/dist/src/utils/run-cmd.d.ts +0 -2
  127. package/dist/src/utils/run-cmd.d.ts.map +0 -1
  128. package/dist/src/utils/run-cmd.js +0 -11
  129. package/dist/src/utils/run-cmd.js.map +0 -1
  130. package/dist/src/utils/types.d.ts +0 -21
  131. package/dist/src/utils/types.d.ts.map +0 -1
  132. package/dist/src/utils/types.js +0 -2
  133. package/dist/src/utils/types.js.map +0 -1
  134. package/dist/src/utils/validate-remote-drive-checkout.d.ts +0 -7
  135. package/dist/src/utils/validate-remote-drive-checkout.d.ts.map +0 -1
  136. package/dist/src/utils/validate-remote-drive-checkout.js +0 -45
  137. package/dist/src/utils/validate-remote-drive-checkout.js.map +0 -1
  138. package/dist/src/utils/validate-remote-drive.d.ts +0 -7
  139. package/dist/src/utils/validate-remote-drive.d.ts.map +0 -1
  140. package/dist/src/utils/validate-remote-drive.js +0 -51
  141. package/dist/src/utils/validate-remote-drive.js.map +0 -1
  142. package/dist/src/version.d.ts +0 -2
  143. package/dist/src/version.d.ts.map +0 -1
  144. package/dist/src/version.js +0 -3
  145. package/dist/src/version.js.map +0 -1
  146. package/dist/tsconfig.tsbuildinfo +0 -1
  147. package/dist/vitest.config.d.ts +0 -3
  148. package/dist/vitest.config.d.ts.map +0 -1
  149. package/dist/vitest.config.js +0 -7
  150. package/dist/vitest.config.js.map +0 -1
package/dist/cli.d.mts ADDED
@@ -0,0 +1 @@
1
+ export { };
package/dist/cli.mjs ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import { assertNodeVersion, captureCliError, initCliTelemetry, phCliCommandNames } from "@powerhousedao/shared/clis";
3
+ //#region src/cli.ts
4
+ /**
5
+ * ph-cli and ph-cmd are loaded lazily so that the node version is checked before
6
+ * any code is parsed to avoid errors on startup due to unsupported dependencies.
7
+ */
8
+ async function runPhCliCommand(phCliCommand) {
9
+ const { executePhCliCommand } = await import("./ph-cli-1NIlwpsP.mjs");
10
+ return await executePhCliCommand(phCliCommand);
11
+ }
12
+ async function runPhCmdCommand(args) {
13
+ const { run } = await import("./run-BJIj5jSO.mjs");
14
+ return await run(args);
15
+ }
16
+ async function main() {
17
+ assertNodeVersion();
18
+ await initCliTelemetry({
19
+ cliName: "ph-cmd",
20
+ release: "6.0.0-dev.200"
21
+ });
22
+ const args = process.argv.slice(2);
23
+ const command = args[0];
24
+ if (command === "connect" && !args.some((arg) => [
25
+ "studio",
26
+ "build",
27
+ "preview"
28
+ ].includes(arg)) && !args.some((arg) => ["--help", "-h"].includes(arg))) {
29
+ await runPhCliCommand("connect");
30
+ process.exit(0);
31
+ }
32
+ if (phCliCommandNames.includes(command)) {
33
+ await runPhCliCommand(command);
34
+ process.exit(0);
35
+ }
36
+ await runPhCmdCommand(args);
37
+ process.exit(0);
38
+ }
39
+ await main().catch(async (error) => {
40
+ const isDebug = process.argv.slice(2).includes("--debug");
41
+ await captureCliError(error);
42
+ if (isDebug) throw error;
43
+ if (error instanceof Error) {
44
+ console.error(error.message);
45
+ process.exit(1);
46
+ } else throw error;
47
+ });
48
+ //#endregion
49
+ export {};
50
+
51
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport {\n assertNodeVersion,\n captureCliError,\n initCliTelemetry,\n phCliCommandNames,\n} from \"@powerhousedao/shared/clis\";\n\n// Injected at build time by tsdown (see tsdown.config.ts `define`).\ndeclare const CLI_VERSION: string;\n\n/**\n * ph-cli and ph-cmd are loaded lazily so that the node version is checked before\n * any code is parsed to avoid errors on startup due to unsupported dependencies.\n */\n\nasync function runPhCliCommand(phCliCommand: string) {\n const { executePhCliCommand } = await import(\"./ph-cli.js\");\n return await executePhCliCommand(phCliCommand);\n}\nasync function runPhCmdCommand(args: string[]) {\n const { run } = await import(\"./run.js\");\n return await run(args);\n}\n\nasync function main() {\n assertNodeVersion();\n // Opt-out telemetry; asked once on first interactive run. No-op under\n // PH_NO_TELEMETRY / DO_NOT_TRACK / CI.\n await initCliTelemetry({ cliName: \"ph-cmd\", release: CLI_VERSION });\n const args = process.argv.slice(2);\n const command = args[0];\n\n // handle the special case where running `connect` with no positional argument\n // defaults to `connect studio`\n if (\n command === \"connect\" &&\n !args.some((arg) => [\"studio\", \"build\", \"preview\"].includes(arg)) &&\n // do not default to `connect studio` when help is present, instead show general help\n // for the `connect` command\n !args.some((arg) => [\"--help\", \"-h\"].includes(arg))\n ) {\n await runPhCliCommand(\"connect\");\n process.exit(0);\n }\n\n // forward command to the local ph-cli installation if it exists\n if (phCliCommandNames.includes(command)) {\n await runPhCliCommand(command);\n process.exit(0);\n }\n\n await runPhCmdCommand(args);\n process.exit(0);\n}\n\nawait main().catch(async (error) => {\n const isDebug = process.argv.slice(2).includes(\"--debug\");\n // No-op when telemetry is disabled; flushes before we exit otherwise.\n await captureCliError(error);\n if (isDebug) {\n throw error;\n }\n if (error instanceof Error) {\n console.error(error.message);\n process.exit(1);\n } else {\n throw error;\n }\n});\n"],"mappings":";;;;;;;AAgBA,eAAe,gBAAgB,cAAsB;CACnD,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,QAAO,MAAM,oBAAoB,aAAa;;AAEhD,eAAe,gBAAgB,MAAgB;CAC7C,MAAM,EAAE,QAAQ,MAAM,OAAO;AAC7B,QAAO,MAAM,IAAI,KAAK;;AAGxB,eAAe,OAAO;AACpB,oBAAmB;AAGnB,OAAM,iBAAiB;EAAE,SAAS;EAAU,SAAA;EAAsB,CAAC;CACnE,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE;CAClC,MAAM,UAAU,KAAK;AAIrB,KACE,YAAY,aACZ,CAAC,KAAK,MAAM,QAAQ;EAAC;EAAU;EAAS;EAAU,CAAC,SAAS,IAAI,CAAC,IAGjE,CAAC,KAAK,MAAM,QAAQ,CAAC,UAAU,KAAK,CAAC,SAAS,IAAI,CAAC,EACnD;AACA,QAAM,gBAAgB,UAAU;AAChC,UAAQ,KAAK,EAAE;;AAIjB,KAAI,kBAAkB,SAAS,QAAQ,EAAE;AACvC,QAAM,gBAAgB,QAAQ;AAC9B,UAAQ,KAAK,EAAE;;AAGjB,OAAM,gBAAgB,KAAK;AAC3B,SAAQ,KAAK,EAAE;;AAGjB,MAAM,MAAM,CAAC,MAAM,OAAO,UAAU;CAClC,MAAM,UAAU,QAAQ,KAAK,MAAM,EAAE,CAAC,SAAS,UAAU;AAEzD,OAAM,gBAAgB,MAAM;AAC5B,KAAI,QACF,OAAM;AAER,KAAI,iBAAiB,OAAO;AAC1B,UAAQ,MAAM,MAAM,QAAQ;AAC5B,UAAQ,KAAK,EAAE;OAEf,OAAM;EAER"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,41 @@
1
+ import { a as setupGlobals, i as update, n as use, o as init, r as useLocal, t as ph } from "./ph-CzQLX9vM.mjs";
2
+ import { writeCliDocsMarkdownFile } from "@powerhousedao/codegen/file-builders";
3
+ //#region src/generate-commands-docs.ts
4
+ const commands = [
5
+ {
6
+ name: "init",
7
+ command: init
8
+ },
9
+ {
10
+ name: "use",
11
+ command: use
12
+ },
13
+ {
14
+ name: "update",
15
+ command: update
16
+ },
17
+ {
18
+ name: "setup-globals",
19
+ command: setupGlobals
20
+ },
21
+ {
22
+ name: "use-local",
23
+ command: useLocal
24
+ }
25
+ ];
26
+ const cliDescription = ph.description ?? "";
27
+ async function main() {
28
+ await writeCliDocsMarkdownFile({
29
+ filePath: "COMMANDS.md",
30
+ docsTitle: `PH-CMD CLI Commands (6.0.0-dev.200)`,
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
+ cliDescription,
33
+ entries: commands
34
+ });
35
+ process.exit(0);
36
+ }
37
+ await main();
38
+ //#endregion
39
+ export {};
40
+
41
+ //# sourceMappingURL=generate-commands-docs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-commands-docs.mjs","names":[],"sources":["../src/generate-commands-docs.ts"],"sourcesContent":["import { writeCliDocsMarkdownFile } from \"@powerhousedao/codegen/file-builders\";\nimport { init } from \"./commands/init.js\";\nimport { ph } from \"./commands/ph.js\";\nimport { setupGlobals } from \"./commands/setup-globals.js\";\nimport { update } from \"./commands/update.js\";\nimport { useLocal } from \"./commands/use-local.js\";\nimport { use } from \"./commands/use.js\";\n\nconst commands = [\n { name: \"init\", command: init },\n { name: \"use\", command: use },\n { name: \"update\", command: update },\n { name: \"setup-globals\", command: setupGlobals },\n { name: \"use-local\", command: useLocal },\n];\n\nconst cliDescription = ph.description ?? \"\";\ndeclare const CLI_VERSION: string;\n\nasync function main() {\n await writeCliDocsMarkdownFile({\n filePath: \"COMMANDS.md\",\n docsTitle: `PH-CMD CLI Commands (${CLI_VERSION})`,\n docsIntroduction:\n \"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.\",\n cliDescription,\n entries: commands,\n });\n process.exit(0);\n}\n\nawait main();\n"],"mappings":";;;AAQA,MAAM,WAAW;CACf;EAAE,MAAM;EAAQ,SAAS;EAAM;CAC/B;EAAE,MAAM;EAAO,SAAS;EAAK;CAC7B;EAAE,MAAM;EAAU,SAAS;EAAQ;CACnC;EAAE,MAAM;EAAiB,SAAS;EAAc;CAChD;EAAE,MAAM;EAAa,SAAS;EAAU;CACzC;AAED,MAAM,iBAAiB,GAAG,eAAe;AAGzC,eAAe,OAAO;AACpB,OAAM,yBAAyB;EAC7B,UAAU;EACV,WAAW;EACX,kBACE;EACF;EACA,SAAS;EACV,CAAC;AACF,SAAQ,KAAK,EAAE;;AAGjB,MAAM,MAAM"}
@@ -0,0 +1,416 @@
1
+ import { HOME_DIR, PH_BIN, PH_GLOBAL_DIR_NAME, POWERHOUSE_GLOBAL_DIR, debugArgs, getPhCmdVersionInfo, getTagFromVersion, handleMutuallyExclusiveOptions, initArgs, logVersionUpdate, parsePackageManager, parsePackageVersion, parseTag, phCliHelpCommands, runCmd, runUseLocal } from "@powerhousedao/shared/clis";
2
+ import { boolean, command, flag, oneOf, option, optional, positional, string, subcommands } from "cmd-ts";
3
+ import { execSync } from "node:child_process";
4
+ import { resolveCommand } from "package-manager-detector";
5
+ import { createProject } from "@powerhousedao/codegen";
6
+ import { existsSync, readFileSync, writeFileSync } from "fs";
7
+ import path from "path";
8
+ import { ALL_POWERHOUSE_DEPENDENCIES } from "@powerhousedao/shared/constants";
9
+ import chalk from "chalk";
10
+ import { detect } from "package-manager-detector/detect";
11
+ import { readPackage } from "read-pkg";
12
+ import { writePackage } from "write-package";
13
+ import { clean, valid } from "semver";
14
+ //#region src/commands/init.ts
15
+ /**
16
+ * Delegates `ph init` to the appropriate version of `@powerhousedao/ph-cli`.
17
+ * This ensures the init logic (boilerplate, codegen) always matches the
18
+ * ph-cli version being installed in the new project.
19
+ */
20
+ const init = command({
21
+ name: "init",
22
+ description: "Initialize a new project",
23
+ args: initArgs,
24
+ handler: (args) => {
25
+ if (args.debug) console.log({ args });
26
+ handleMutuallyExclusiveOptions({
27
+ tag: args.tag,
28
+ version: args.version,
29
+ dev: args.dev,
30
+ staging: args.staging
31
+ }, "versioning strategy");
32
+ handleMutuallyExclusiveOptions({
33
+ npm: args.npm,
34
+ pnpm: args.pnpm,
35
+ yarn: args.yarn,
36
+ bun: args.bun,
37
+ packageManager: args.packageManager
38
+ }, "package manager");
39
+ const phCliVersion = args.version ?? parseTag(args);
40
+ const pm = parsePackageManager(args) ?? "npm";
41
+ const forwardedArgs = process.argv.slice(3);
42
+ const resolved = resolveCommand(pm, "execute", [
43
+ `@powerhousedao/ph-cli@${phCliVersion}`,
44
+ "init",
45
+ ...forwardedArgs
46
+ ]);
47
+ if (!resolved) throw new Error(`Could not resolve execute command for package manager "${pm}".`);
48
+ const { command: cmd, args: cmdArgs } = resolved;
49
+ const fullCmd = `${cmd} ${cmdArgs.join(" ")}`;
50
+ if (args.debug) console.log(">>> Delegating to ph-cli:", fullCmd);
51
+ execSync(fullCmd, { stdio: "inherit" });
52
+ process.exit(0);
53
+ }
54
+ });
55
+ //#endregion
56
+ //#region src/utils/constants.ts
57
+ const PH_BIN_PATH = process.argv[1];
58
+ const PH_GLOBAL_PACKAGE_NAME = "ph-global";
59
+ const packageManagers = {
60
+ bun: {
61
+ installCommand: "bun add {{dependency}}",
62
+ execCommand: `bun ${PH_BIN} {{arguments}}`,
63
+ execScript: `bun {{arguments}}`,
64
+ lockfile: "bun.lock",
65
+ globalPathRegexp: /[\\/].bun[\\/]/,
66
+ updateCommand: "bun update {{dependency}}",
67
+ buildAffected: "bun run build:affected",
68
+ workspaceOption: "",
69
+ installDepsCommand: "bun install"
70
+ },
71
+ pnpm: {
72
+ installCommand: "pnpm add {{dependency}}",
73
+ execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,
74
+ execScript: `pnpm {{arguments}}`,
75
+ lockfile: "pnpm-lock.yaml",
76
+ globalPathRegexp: /[\\/]pnpm[\\/]/,
77
+ updateCommand: "pnpm update {{dependency}}",
78
+ buildAffected: "pnpm run build:affected",
79
+ workspaceOption: "--workspace-root",
80
+ installDepsCommand: "pnpm install"
81
+ },
82
+ yarn: {
83
+ installCommand: "yarn add {{dependency}}",
84
+ execCommand: `yarn ${PH_BIN} {{arguments}}`,
85
+ execScript: `yarn {{arguments}}`,
86
+ lockfile: "yarn.lock",
87
+ globalPathRegexp: /[\\/]yarn[\\/]/,
88
+ updateCommand: "yarn upgrade {{dependency}}",
89
+ buildAffected: "yarn run build:affected",
90
+ workspaceOption: "-W",
91
+ installDepsCommand: "yarn install"
92
+ },
93
+ npm: {
94
+ installCommand: "npm install {{dependency}}",
95
+ execCommand: `npx ${PH_BIN} {{arguments}}`,
96
+ execScript: `npm run {{arguments}}`,
97
+ lockfile: "package-lock.json",
98
+ updateCommand: "npm update {{dependency}} --save",
99
+ buildAffected: "npm run build:affected",
100
+ workspaceOption: "",
101
+ installDepsCommand: "npm install"
102
+ }
103
+ };
104
+ //#endregion
105
+ //#region src/utils/package-manager.ts
106
+ function getPackageManagerFromPath(dir) {
107
+ const lowerCasePath = dir.toLowerCase();
108
+ if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) return "bun";
109
+ else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) return "pnpm";
110
+ else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) return "yarn";
111
+ return "npm";
112
+ }
113
+ //#endregion
114
+ //#region src/utils/create-global-project.ts
115
+ const createGlobalProject = async (projectName, options = {}) => {
116
+ if (existsSync(POWERHOUSE_GLOBAL_DIR)) {
117
+ const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, "package.json");
118
+ if (existsSync(packageJsonPath)) try {
119
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
120
+ if (packageJson.name?.startsWith(".")) {
121
+ console.log("šŸ“¦ Fixing invalid package name in global project...");
122
+ packageJson.name = PH_GLOBAL_PACKAGE_NAME;
123
+ writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
124
+ }
125
+ } catch {}
126
+ console.log(`šŸ“¦ Using global project: ${POWERHOUSE_GLOBAL_DIR}`);
127
+ return;
128
+ }
129
+ console.log("šŸ“¦ Initializing global project...");
130
+ process.chdir(HOME_DIR);
131
+ try {
132
+ await createProject({
133
+ name: PH_GLOBAL_DIR_NAME,
134
+ tag: parseTag(options),
135
+ packageManager: parsePackageManager(options) ?? getPackageManagerFromPath(PH_BIN_PATH)
136
+ });
137
+ const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, "package.json");
138
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
139
+ packageJson.name = PH_GLOBAL_PACKAGE_NAME;
140
+ writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
141
+ console.log(`šŸš€ Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`);
142
+ } catch (error) {
143
+ console.error("āŒ Failed to initialize the global project", error);
144
+ }
145
+ };
146
+ //#endregion
147
+ //#region src/commands/setup-globals.ts
148
+ const setupGlobals = command({
149
+ name: "setup-globals",
150
+ description: "Initialize a new global project",
151
+ args: initArgs,
152
+ handler: async (args) => {
153
+ const { namePositional, nameOption, debug, ...options } = args;
154
+ if (debug) console.log({ args });
155
+ await createGlobalProject(namePositional ?? nameOption, options);
156
+ process.exit(0);
157
+ }
158
+ });
159
+ //#endregion
160
+ //#region src/commands/update.ts
161
+ const update = command({
162
+ name: "update",
163
+ description: "Update your powerhouse dependencies to their latest tagged version",
164
+ args: {
165
+ skipInstall: flag({
166
+ type: optional(boolean),
167
+ long: "skip-install",
168
+ short: "s",
169
+ description: "Skip running `install` with your package manager"
170
+ }),
171
+ ...debugArgs
172
+ },
173
+ handler: async (args) => {
174
+ const { skipInstall, debug } = args;
175
+ if (debug) console.log({ args });
176
+ console.log(`\nā–¶ļø Updating Powerhouse dependencies...\n`);
177
+ const packageJson = await readPackage();
178
+ if (packageJson.dependencies) {
179
+ for (const [name, version] of Object.entries(packageJson.dependencies)) if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
180
+ const newVersion = await parsePackageVersion({
181
+ name,
182
+ tag: getTagFromVersion(version)
183
+ });
184
+ packageJson.dependencies[name] = newVersion;
185
+ logVersionUpdate({
186
+ name,
187
+ version,
188
+ newVersion
189
+ });
190
+ }
191
+ }
192
+ if (packageJson.devDependencies) {
193
+ for (const [name, version] of Object.entries(packageJson.devDependencies)) if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
194
+ const newVersion = await parsePackageVersion({
195
+ name,
196
+ tag: getTagFromVersion(version)
197
+ });
198
+ packageJson.devDependencies[name] = newVersion;
199
+ logVersionUpdate({
200
+ name,
201
+ version,
202
+ newVersion
203
+ });
204
+ }
205
+ }
206
+ if (packageJson.optionalDependencies) {
207
+ for (const [name, version] of Object.entries(packageJson.optionalDependencies)) if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
208
+ const newVersion = await parsePackageVersion({
209
+ name,
210
+ tag: getTagFromVersion(version)
211
+ });
212
+ packageJson.optionalDependencies[name] = newVersion;
213
+ logVersionUpdate({
214
+ name,
215
+ version,
216
+ newVersion
217
+ });
218
+ }
219
+ }
220
+ if (packageJson.peerDependencies) {
221
+ for (const [name, version] of Object.entries(packageJson.peerDependencies)) if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
222
+ const newVersion = await parsePackageVersion({
223
+ name,
224
+ tag: getTagFromVersion(version)
225
+ });
226
+ packageJson.peerDependencies[name] = newVersion;
227
+ logVersionUpdate({
228
+ name,
229
+ version,
230
+ newVersion
231
+ });
232
+ }
233
+ }
234
+ await writePackage(packageJson);
235
+ console.log(chalk.green(`\nāœ… Project updated successfully\n`));
236
+ if (skipInstall) return;
237
+ const packageManager = await detect();
238
+ if (!packageManager) throw new Error(`āŒ Failed to detect your package manager. Run install manually.`);
239
+ console.log(`ā–¶ļø Installing updated dependencies with \`${packageManager.agent}\`\n`);
240
+ runCmd(`${packageManager.agent} install`);
241
+ process.exit(0);
242
+ }
243
+ });
244
+ //#endregion
245
+ //#region src/commands/use-local.ts
246
+ const useLocal = command({
247
+ name: "use-local",
248
+ description: "Use your local `powerhouse` monorepo dependencies the current project.",
249
+ args: {
250
+ monorepoPathPositional: positional({
251
+ type: optional(string),
252
+ displayName: "monorepo path",
253
+ description: "Path to your local powerhouse monorepo relative to this project"
254
+ }),
255
+ monorepoPathOption: option({
256
+ type: optional(string),
257
+ long: "path",
258
+ short: "p",
259
+ description: "Path to your local powerhouse monorepo relative to this project"
260
+ }),
261
+ skipInstall: flag({
262
+ type: optional(boolean),
263
+ long: "skip-install",
264
+ short: "s",
265
+ description: "Skip running `install` with `pnpm`"
266
+ }),
267
+ ...debugArgs
268
+ },
269
+ handler: async (args) => {
270
+ const { monorepoPathPositional, monorepoPathOption, skipInstall, debug } = args;
271
+ if (debug) console.log({ args });
272
+ const monorepoPath = monorepoPathPositional ?? monorepoPathOption;
273
+ if (!monorepoPath) throw new Error("āŒ Please provide the path to your local powerhouse monorepo.");
274
+ await runUseLocal(monorepoPath, skipInstall);
275
+ process.exit(0);
276
+ }
277
+ });
278
+ //#endregion
279
+ //#region src/commands/use.ts
280
+ const use = command({
281
+ name: "use",
282
+ description: "Specify the release version of Powerhouse dependencies to use.",
283
+ args: {
284
+ tagPositional: positional({
285
+ type: optional(oneOf([
286
+ "latest",
287
+ "staging",
288
+ "dev"
289
+ ])),
290
+ displayName: "tag",
291
+ description: `Specify the release tag to use for your project. Can be one of: "latest", "staging", or "dev".`
292
+ }),
293
+ tagOption: option({
294
+ type: optional(oneOf([
295
+ "latest",
296
+ "staging",
297
+ "dev"
298
+ ])),
299
+ long: "tag",
300
+ short: "t",
301
+ description: `Specify the release tag to use for your project. Can be one of: "latest", "staging", or "dev".`
302
+ }),
303
+ version: option({
304
+ type: optional(string),
305
+ long: "version",
306
+ short: "v",
307
+ description: "Specify the exact semver release version to use for your project."
308
+ }),
309
+ skipInstall: flag({
310
+ type: optional(boolean),
311
+ long: "skip-install",
312
+ short: "s",
313
+ description: "Skip running `install` with your package manager"
314
+ }),
315
+ ...debugArgs
316
+ },
317
+ handler: async (args) => {
318
+ const { tagPositional, tagOption, version, skipInstall, debug } = args;
319
+ if (debug) console.log({ args });
320
+ const tag = tagPositional ?? tagOption;
321
+ handleMutuallyExclusiveOptions({
322
+ tag,
323
+ version
324
+ }, "versioning strategy");
325
+ if (!tag && !version) throw new Error("Please specify either a release tag or a version to use.");
326
+ if (version && !valid(clean(version))) throw new Error(`āŒ Invalid version: ${chalk.bold(version)}`);
327
+ console.log(`ā–¶ļø Updating project to use ${chalk.bold(version ?? tag)}...\n`);
328
+ const packageJson = await readPackage();
329
+ if (packageJson.dependencies) {
330
+ for (const [name, existingVersion] of Object.entries(packageJson.dependencies)) if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
331
+ const newVersion = await parsePackageVersion({
332
+ name,
333
+ tag,
334
+ version
335
+ });
336
+ packageJson.dependencies[name] = newVersion;
337
+ logVersionUpdate({
338
+ name,
339
+ version: existingVersion,
340
+ newVersion
341
+ });
342
+ }
343
+ }
344
+ if (packageJson.devDependencies) {
345
+ for (const [name, existingVersion] of Object.entries(packageJson.devDependencies)) if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
346
+ const newVersion = await parsePackageVersion({
347
+ name,
348
+ tag,
349
+ version
350
+ });
351
+ packageJson.devDependencies[name] = newVersion;
352
+ logVersionUpdate({
353
+ name,
354
+ version: existingVersion,
355
+ newVersion
356
+ });
357
+ }
358
+ }
359
+ if (packageJson.optionalDependencies) {
360
+ for (const [name, existingVersion] of Object.entries(packageJson.optionalDependencies)) if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
361
+ const newVersion = await parsePackageVersion({
362
+ name,
363
+ tag,
364
+ version
365
+ });
366
+ packageJson.optionalDependencies[name] = newVersion;
367
+ logVersionUpdate({
368
+ name,
369
+ version: existingVersion,
370
+ newVersion
371
+ });
372
+ }
373
+ }
374
+ if (packageJson.peerDependencies) {
375
+ for (const [name, existingVersion] of Object.entries(packageJson.peerDependencies)) if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
376
+ const newVersion = await parsePackageVersion({
377
+ name,
378
+ tag,
379
+ version
380
+ });
381
+ packageJson.peerDependencies[name] = newVersion;
382
+ logVersionUpdate({
383
+ name,
384
+ version: existingVersion,
385
+ newVersion
386
+ });
387
+ }
388
+ }
389
+ await writePackage(packageJson);
390
+ console.log(chalk.green(`\nāœ… Project updated to use ${chalk.bold(version ?? tag)}\n`));
391
+ if (!skipInstall) {
392
+ const packageManager = await detect();
393
+ if (!packageManager) throw new Error(`āŒ Failed to detect your package manager. Run install manually.`);
394
+ console.log(`ā–¶ļø Installing updated dependencies with \`${packageManager.agent}\`\n`);
395
+ runCmd(`${packageManager.agent} install`);
396
+ }
397
+ process.exit(0);
398
+ }
399
+ });
400
+ const ph = subcommands({
401
+ name: "ph",
402
+ version: await getPhCmdVersionInfo("6.0.0-dev.200"),
403
+ 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.",
404
+ cmds: {
405
+ init,
406
+ use,
407
+ update,
408
+ "setup-globals": setupGlobals,
409
+ "use-local": useLocal,
410
+ ...phCliHelpCommands
411
+ }
412
+ });
413
+ //#endregion
414
+ export { setupGlobals as a, update as i, use as n, init as o, useLocal as r, ph as t };
415
+
416
+ //# sourceMappingURL=ph-CzQLX9vM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ph-CzQLX9vM.mjs","names":[],"sources":["../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 handleMutuallyExclusiveOptions,\n initArgs,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport { command } from \"cmd-ts\";\nimport { execSync } from \"node:child_process\";\nimport { resolveCommand } from \"package-manager-detector\";\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: (args) => {\n if (args.debug) {\n console.log({ args });\n }\n\n handleMutuallyExclusiveOptions(\n {\n tag: args.tag,\n version: args.version,\n dev: args.dev,\n staging: args.staging,\n },\n \"versioning strategy\",\n );\n\n handleMutuallyExclusiveOptions(\n {\n npm: args.npm,\n pnpm: args.pnpm,\n yarn: args.yarn,\n bun: args.bun,\n packageManager: args.packageManager,\n },\n \"package manager\",\n );\n\n const phCliVersion = args.version ?? parseTag(args);\n const pm = parsePackageManager(args) ?? \"npm\";\n\n // Forward original args as-is to ph-cli\n const forwardedArgs = process.argv.slice(3);\n const phCliPackage = `@powerhousedao/ph-cli@${phCliVersion}`;\n const resolved = resolveCommand(pm, \"execute\", [\n phCliPackage,\n \"init\",\n ...forwardedArgs,\n ]);\n\n if (!resolved) {\n throw new Error(\n `Could not resolve execute command for package manager \"${pm}\".`,\n );\n }\n\n const { command: cmd, args: cmdArgs } = resolved;\n const fullCmd = `${cmd} ${cmdArgs.join(\" \")}`;\n\n if (args.debug) {\n console.log(\">>> Delegating to ph-cli:\", fullCmd);\n }\n\n execSync(fullCmd, { stdio: \"inherit\" });\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 { initArgs } from \"@powerhousedao/shared/clis\";\nimport { command } from \"cmd-ts\";\nimport { createGlobalProject } from \"../utils/create-global-project.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 { debugArgs, runUseLocal } from \"@powerhousedao/shared/clis\";\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 await runUseLocal(monorepoPath, skipInstall);\n process.exit(0);\n },\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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"}
@@ -0,0 +1,23 @@
1
+ import { getPowerhouseProjectInfo } from "@powerhousedao/shared/clis";
2
+ import { execSync } from "node:child_process";
3
+ import { resolveCommand } from "package-manager-detector";
4
+ //#region src/ph-cli.ts
5
+ async function executePhCliCommand(phCliCommand) {
6
+ const forwardedArgs = process.argv.slice(3);
7
+ const { projectPath, packageManager } = await getPowerhouseProjectInfo();
8
+ const resolveExecuteLocalCommandResult = resolveCommand(packageManager, "execute-local", [
9
+ "ph-cli",
10
+ phCliCommand,
11
+ ...forwardedArgs
12
+ ]);
13
+ 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.`);
14
+ const { command, args } = resolveExecuteLocalCommandResult;
15
+ execSync(`${command} ${args.join(" ")}`, {
16
+ stdio: "inherit",
17
+ cwd: projectPath
18
+ });
19
+ }
20
+ //#endregion
21
+ export { executePhCliCommand };
22
+
23
+ //# sourceMappingURL=ph-cli-1NIlwpsP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ph-cli-1NIlwpsP.mjs","names":[],"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 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 execSync(cmd, { stdio: \"inherit\", cwd: projectPath });\n}\n"],"mappings":";;;;AAKA,eAAsB,oBAAoB,cAAsB;CAC9D,MAAM,gBAAgB,QAAQ,KAAK,MAAM,EAAE;CAC3C,MAAM,EAAE,aAAa,mBAAmB,MAAM,0BAA0B;CACxE,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;AAE1B,UADY,GAAG,QAAQ,GAAG,KAAK,KAAK,IAAI,IAC1B;EAAE,OAAO;EAAW,KAAK;EAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { t as ph } from "./ph-CzQLX9vM.mjs";
2
+ import { run as run$1 } from "cmd-ts";
3
+ //#region src/run.ts
4
+ async function run(args) {
5
+ return await run$1(ph, args);
6
+ }
7
+ //#endregion
8
+ export { run };
9
+
10
+ //# sourceMappingURL=run-BJIj5jSO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-BJIj5jSO.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"}