ph-cmd 0.25.0 → 0.26.0

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.js CHANGED
@@ -2,13 +2,16 @@
2
2
  import { Command } from 'commander';
3
3
  import registerCommands from './commands/index.js';
4
4
  import { forwardCommand } from './commands/forward.js';
5
+ import { PH_CLI_COMMANDS } from './utils.js';
5
6
 
6
7
  const program = new Command();
7
8
  const defaultCommand = (options) => {
8
9
  const allArgs = process.argv.slice(2);
9
10
  const filteredArgs = allArgs.filter((arg) => arg !== "--verbose");
11
+ const command = filteredArgs.at(0);
12
+ const isPackageScript = !PH_CLI_COMMANDS.includes(command ?? "");
10
13
  const args = filteredArgs.join(" ");
11
- forwardCommand(args, { debug: !!options.verbose });
14
+ forwardCommand(args, { debug: !!options.verbose, isPackageScript });
12
15
  };
13
16
  program.name("ph-cmd").description("CLI tool for Powerhouse DAO").allowUnknownOption().option("--verbose", "Enable debug mode").action(defaultCommand).version("1.0.0");
14
17
  registerCommands(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAMA,MAAM,OAAA,GAAU,IAAI,OAAQ,EAAA;AAE5B,MAAM,cAAA,GAA6D,CACjE,OACG,KAAA;AACH,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AACpC,EAAA,MAAM,eAAe,OAAQ,CAAA,MAAA,CAAO,CAAC,GAAA,KAAQ,QAAQ,WAAW,CAAA;AAChE,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,IAAA,CAAK,GAAG,CAAA;AAElC,EAAA,cAAA,CAAe,MAAM,EAAE,KAAA,EAAO,CAAC,CAAC,OAAA,CAAQ,SAAS,CAAA;AACnD,CAAA;AAEA,OAAA,CACG,KAAK,QAAQ,CAAA,CACb,WAAY,CAAA,6BAA6B,EACzC,kBAAmB,EAAA,CACnB,MAAO,CAAA,WAAA,EAAa,mBAAmB,CACvC,CAAA,MAAA,CAAO,cAAc,CAAA,CACrB,QAAQ,OAAO,CAAA;AAElB,gBAAA,CAAiB,OAAO,CAAA;AAExB,OAAQ,CAAA,KAAA,CAAM,QAAQ,IAAI,CAAA","file":"cli.js","sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport registerCommands from \"./commands/index.js\";\nimport { forwardCommand } from \"./commands/forward.js\";\nimport { CommandActionType } from \"./types.js\";\n\nconst program = new Command();\n\nconst defaultCommand: CommandActionType<[{ verbose?: boolean }]> = (\n options,\n) => {\n const allArgs = process.argv.slice(2);\n const filteredArgs = allArgs.filter((arg) => arg !== \"--verbose\");\n const args = filteredArgs.join(\" \");\n\n forwardCommand(args, { debug: !!options.verbose });\n};\n\nprogram\n .name(\"ph-cmd\")\n .description(\"CLI tool for Powerhouse DAO\")\n .allowUnknownOption()\n .option(\"--verbose\", \"Enable debug mode\")\n .action(defaultCommand)\n .version(\"1.0.0\");\n\nregisterCommands(program);\n\nprogram.parse(process.argv);\n"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAOA,MAAM,OAAA,GAAU,IAAI,OAAQ,EAAA;AAE5B,MAAM,cAAA,GAA6D,CACjE,OACG,KAAA;AACH,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AACpC,EAAA,MAAM,eAAe,OAAQ,CAAA,MAAA,CAAO,CAAC,GAAA,KAAQ,QAAQ,WAAW,CAAA;AAChE,EAAM,MAAA,OAAA,GAAU,YAAa,CAAA,EAAA,CAAG,CAAC,CAAA;AAEjC,EAAA,MAAM,eAAkB,GAAA,CAAC,eAAgB,CAAA,QAAA,CAAS,WAAW,EAAE,CAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,IAAA,CAAK,GAAG,CAAA;AAElC,EAAe,cAAA,CAAA,IAAA,EAAM,EAAE,KAAO,EAAA,CAAC,CAAC,OAAQ,CAAA,OAAA,EAAS,iBAAiB,CAAA;AACpE,CAAA;AAEA,OAAA,CACG,KAAK,QAAQ,CAAA,CACb,WAAY,CAAA,6BAA6B,EACzC,kBAAmB,EAAA,CACnB,MAAO,CAAA,WAAA,EAAa,mBAAmB,CACvC,CAAA,MAAA,CAAO,cAAc,CAAA,CACrB,QAAQ,OAAO,CAAA;AAElB,gBAAA,CAAiB,OAAO,CAAA;AAExB,OAAQ,CAAA,KAAA,CAAM,QAAQ,IAAI,CAAA","file":"cli.js","sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport registerCommands from \"./commands/index.js\";\nimport { forwardCommand } from \"./commands/forward.js\";\nimport { CommandActionType } from \"./types.js\";\nimport { PH_CLI_COMMANDS } from \"./utils.js\";\n\nconst program = new Command();\n\nconst defaultCommand: CommandActionType<[{ verbose?: boolean }]> = (\n options,\n) => {\n const allArgs = process.argv.slice(2);\n const filteredArgs = allArgs.filter((arg) => arg !== \"--verbose\");\n const command = filteredArgs.at(0);\n\n const isPackageScript = !PH_CLI_COMMANDS.includes(command ?? \"\");\n const args = filteredArgs.join(\" \");\n\n forwardCommand(args, { debug: !!options.verbose, isPackageScript });\n};\n\nprogram\n .name(\"ph-cmd\")\n .description(\"CLI tool for Powerhouse DAO\")\n .allowUnknownOption()\n .option(\"--verbose\", \"Enable debug mode\")\n .action(defaultCommand)\n .version(\"1.0.0\");\n\nregisterCommands(program);\n\nprogram.parse(process.argv);\n"]}
@@ -1,5 +1,6 @@
1
1
  type ForwardPHCommandOptions = {
2
2
  debug?: boolean;
3
+ isPackageScript?: boolean;
3
4
  };
4
5
  declare const forwardCommand: (args: string, options: ForwardPHCommandOptions) => void;
5
6
 
@@ -10,47 +10,20 @@ const forwardCommand = (args, options) => {
10
10
  }
11
11
  const packageManager = getPackageManagerFromLockfile(projectInfo.path);
12
12
  if (options.debug) {
13
- console.log("\n>>> forwardScriptCommand arguments:");
13
+ console.log("\n>>> forwardCommand arguments:");
14
14
  console.log(">>> packageManager:", packageManager);
15
15
  console.log(">>> projectPath:", projectInfo.path);
16
16
  console.log(">>> args:", args);
17
- console.log(">>> isPackageScript:", true);
17
+ console.log(">>> isPackageScript:", options.isPackageScript ?? false);
18
18
  }
19
- let packageScriptExecuted = false;
20
19
  try {
21
20
  forwardPHCommand(
22
21
  packageManager,
23
22
  projectInfo.path,
24
23
  args,
25
- true,
24
+ options.isPackageScript ?? false,
26
25
  options.debug
27
26
  );
28
- packageScriptExecuted = true;
29
- } catch (error) {
30
- if (options.debug) {
31
- console.log(
32
- ">>> failed to forward command as package script, trying as ph command...",
33
- error
34
- );
35
- }
36
- }
37
- if (options.debug) {
38
- console.log("\n>>> forwardCommand arguments:");
39
- console.log(">>> packageManager:", packageManager);
40
- console.log(">>> projectPath:", projectInfo.path);
41
- console.log(">>> args:", args);
42
- console.log(">>> isPackageScript:", false);
43
- }
44
- try {
45
- if (!packageScriptExecuted) {
46
- forwardPHCommand(
47
- packageManager,
48
- projectInfo.path,
49
- args,
50
- false,
51
- options.debug
52
- );
53
- }
54
27
  } catch (error) {
55
28
  console.error("\u274C Failed to forward command");
56
29
  throw error;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/forward.ts"],"names":[],"mappings":";;AAUa,MAAA,cAAA,GAAiB,CAC5B,IAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,CAAQ,GAAI,CAAA,wBAAA,EAA0B,EAAE,OAAA,EAAS,CAAA;AAAA;AAGnD,EAAM,MAAA,WAAA,GAAc,cAAe,CAAA,OAAA,CAAQ,KAAK,CAAA;AAEhD,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,WAAW,CAAA;AAAA;AAG/C,EAAM,MAAA,cAAA,GAAiB,6BAA8B,CAAA,WAAA,CAAY,IAAI,CAAA;AAErE,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AACnD,IAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,cAAc,CAAA;AACjD,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAoB,EAAA,WAAA,CAAY,IAAI,CAAA;AAChD,IAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AAC7B,IAAQ,OAAA,CAAA,GAAA,CAAI,wBAAwB,IAAI,CAAA;AAAA;AAG1C,EAAA,IAAI,qBAAwB,GAAA,KAAA;AAE5B,EAAI,IAAA;AACF,IAAA,gBAAA;AAAA,MACE,cAAA;AAAA,MACA,WAAY,CAAA,IAAA;AAAA,MACZ,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAQ,CAAA;AAAA,KACV;AAEA,IAAwB,qBAAA,GAAA,IAAA;AAAA,WACjB,KAAO,EAAA;AACd,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAQ,OAAA,CAAA,GAAA;AAAA,QACN,0EAAA;AAAA,QACA;AAAA,OACF;AAAA;AACF;AAGF,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,IAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,cAAc,CAAA;AACjD,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAoB,EAAA,WAAA,CAAY,IAAI,CAAA;AAChD,IAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AAC7B,IAAQ,OAAA,CAAA,GAAA,CAAI,wBAAwB,KAAK,CAAA;AAAA;AAG3C,EAAI,IAAA;AACF,IAAA,IAAI,CAAC,qBAAuB,EAAA;AAC1B,MAAA,gBAAA;AAAA,QACE,cAAA;AAAA,QACA,WAAY,CAAA,IAAA;AAAA,QACZ,IAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAQ,CAAA;AAAA,OACV;AAAA;AACF,WACO,KAAO,EAAA;AACd,IAAA,OAAA,CAAQ,MAAM,kCAA6B,CAAA;AAC3C,IAAM,MAAA,KAAA;AAAA;AAEV","file":"forward.js","sourcesContent":["import {\n getProjectInfo,\n getPackageManagerFromLockfile,\n forwardPHCommand,\n} from \"../utils.js\";\n\ntype ForwardPHCommandOptions = {\n debug?: boolean;\n};\n\nexport const forwardCommand = (\n args: string,\n options: ForwardPHCommandOptions,\n) => {\n if (options.debug) {\n console.log(\">>> command arguments:\", { options });\n }\n\n const projectInfo = getProjectInfo(options.debug);\n\n if (options.debug) {\n console.log(\"\\n>>> projectInfo:\", projectInfo);\n }\n\n const packageManager = getPackageManagerFromLockfile(projectInfo.path);\n\n if (options.debug) {\n console.log(\"\\n>>> forwardScriptCommand arguments:\");\n console.log(\">>> packageManager:\", packageManager);\n console.log(\">>> projectPath:\", projectInfo.path);\n console.log(\">>> args:\", args);\n console.log(\">>> isPackageScript:\", true);\n }\n\n let packageScriptExecuted = false;\n\n try {\n forwardPHCommand(\n packageManager,\n projectInfo.path,\n args,\n true,\n options.debug,\n );\n\n packageScriptExecuted = true;\n } catch (error) {\n if (options.debug) {\n console.log(\n \">>> failed to forward command as package script, trying as ph command...\",\n error,\n );\n }\n }\n\n if (options.debug) {\n console.log(\"\\n>>> forwardCommand arguments:\");\n console.log(\">>> packageManager:\", packageManager);\n console.log(\">>> projectPath:\", projectInfo.path);\n console.log(\">>> args:\", args);\n console.log(\">>> isPackageScript:\", false);\n }\n\n try {\n if (!packageScriptExecuted) {\n forwardPHCommand(\n packageManager,\n projectInfo.path,\n args,\n false,\n options.debug,\n );\n }\n } catch (error) {\n console.error(\"❌ Failed to forward command\");\n throw error;\n }\n};\n"]}
1
+ {"version":3,"sources":["../../src/commands/forward.ts"],"names":[],"mappings":";;AAWa,MAAA,cAAA,GAAiB,CAC5B,IAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,CAAQ,GAAI,CAAA,wBAAA,EAA0B,EAAE,OAAA,EAAS,CAAA;AAAA;AAGnD,EAAM,MAAA,WAAA,GAAc,cAAe,CAAA,OAAA,CAAQ,KAAK,CAAA;AAEhD,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,WAAW,CAAA;AAAA;AAG/C,EAAM,MAAA,cAAA,GAAiB,6BAA8B,CAAA,WAAA,CAAY,IAAI,CAAA;AAErE,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,IAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,cAAc,CAAA;AACjD,IAAQ,OAAA,CAAA,GAAA,CAAI,kBAAoB,EAAA,WAAA,CAAY,IAAI,CAAA;AAChD,IAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,IAAI,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAI,CAAA,sBAAA,EAAwB,OAAQ,CAAA,eAAA,IAAmB,KAAK,CAAA;AAAA;AAGtE,EAAI,IAAA;AACF,IAAA,gBAAA;AAAA,MACE,cAAA;AAAA,MACA,WAAY,CAAA,IAAA;AAAA,MACZ,IAAA;AAAA,MACA,QAAQ,eAAmB,IAAA,KAAA;AAAA,MAC3B,OAAQ,CAAA;AAAA,KACV;AAAA,WACO,KAAO,EAAA;AACd,IAAA,OAAA,CAAQ,MAAM,kCAA6B,CAAA;AAC3C,IAAM,MAAA,KAAA;AAAA;AAEV","file":"forward.js","sourcesContent":["import {\n getProjectInfo,\n getPackageManagerFromLockfile,\n forwardPHCommand,\n} from \"../utils.js\";\n\ntype ForwardPHCommandOptions = {\n debug?: boolean;\n isPackageScript?: boolean;\n};\n\nexport const forwardCommand = (\n args: string,\n options: ForwardPHCommandOptions,\n) => {\n if (options.debug) {\n console.log(\">>> command arguments:\", { options });\n }\n\n const projectInfo = getProjectInfo(options.debug);\n\n if (options.debug) {\n console.log(\"\\n>>> projectInfo:\", projectInfo);\n }\n\n const packageManager = getPackageManagerFromLockfile(projectInfo.path);\n\n if (options.debug) {\n console.log(\"\\n>>> forwardCommand arguments:\");\n console.log(\">>> packageManager:\", packageManager);\n console.log(\">>> projectPath:\", projectInfo.path);\n console.log(\">>> args:\", args);\n console.log(\">>> isPackageScript:\", options.isPackageScript ?? false);\n }\n\n try {\n forwardPHCommand(\n packageManager,\n projectInfo.path,\n args,\n options.isPackageScript ?? false,\n options.debug,\n );\n } catch (error) {\n console.error(\"❌ Failed to forward command\");\n throw error;\n }\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  import { Command } from 'commander';
2
- import { initCommand } from './init.js';
3
- export { init } from './init.js';
2
+ import { setupGlobalsCommand } from './setup-globals.js';
3
+ export { init } from './setup-globals.js';
4
4
  import '../types.js';
5
5
 
6
- declare const commands: (typeof initCommand)[];
6
+ declare const commands: (typeof setupGlobalsCommand)[];
7
7
  declare function registerCommands(program: Command): void;
8
8
 
9
- export { commands, registerCommands as default, initCommand };
9
+ export { commands, registerCommands as default, setupGlobalsCommand };
@@ -1,7 +1,7 @@
1
- import { initCommand } from './init.js';
2
- export * from './init.js';
1
+ import { setupGlobalsCommand } from './setup-globals.js';
2
+ export * from './setup-globals.js';
3
3
 
4
- const commands = [initCommand];
4
+ const commands = [setupGlobalsCommand];
5
5
  function registerCommands(program) {
6
6
  commands.forEach((command) => command(program));
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAGa,MAAA,QAAA,GAAW,CAAC,WAAW;AAErB,SAAR,iBAAkC,OAAkB,EAAA;AACzD,EAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,OAAY,KAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChD","file":"index.js","sourcesContent":["import { Command } from \"commander\";\nimport { initCommand } from \"./init.js\";\n\nexport const commands = [initCommand];\n\nexport default function registerCommands(program: Command) {\n commands.forEach((command) => command(program));\n}\n\nexport * from \"./init.js\";\n"]}
1
+ {"version":3,"sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAGa,MAAA,QAAA,GAAW,CAAC,mBAAmB;AAE7B,SAAR,iBAAkC,OAAkB,EAAA;AACzD,EAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,OAAY,KAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChD","file":"index.js","sourcesContent":["import { Command } from \"commander\";\nimport { setupGlobalsCommand } from \"./setup-globals.js\";\n\nexport const commands = [setupGlobalsCommand];\n\nexport default function registerCommands(program: Command) {\n commands.forEach((command) => command(program));\n}\n\nexport * from \"./setup-globals.js\";\n"]}
@@ -11,6 +11,6 @@ declare const init: CommandActionType<[
11
11
  staging?: boolean;
12
12
  }
13
13
  ]>;
14
- declare function initCommand(program: Command): void;
14
+ declare function setupGlobalsCommand(program: Command): void;
15
15
 
16
- export { init, initCommand };
16
+ export { init, setupGlobalsCommand };
@@ -17,13 +17,13 @@ const init = async (projectName, options) => {
17
17
  console.error("\u274C Failed to initialize the global project", error);
18
18
  }
19
19
  };
20
- function initCommand(program) {
21
- program.command("init").description("Initialize a new project").argument("[project-name]", "Name of the project").option("-p, --project", "Name of the project").option("-i, --interactive", "Run the command in interactive mode").option(
20
+ function setupGlobalsCommand(program) {
21
+ program.command("setup-globals").description("Initialize a new project").argument("[project-name]", "Name of the project").option("-p, --project", "Name of the project").option("-i, --interactive", "Run the command in interactive mode").option(
22
22
  "-v, --version",
23
23
  'Specify development version to use. Defaults to "main"'
24
24
  ).option("--dev", 'Use "development" version of the boilerplate').option("--staging", 'Use "development" version of the boilerplate').action(init);
25
25
  }
26
26
 
27
- export { init, initCommand };
28
- //# sourceMappingURL=init.js.map
29
- //# sourceMappingURL=init.js.map
27
+ export { init, setupGlobalsCommand };
28
+ //# sourceMappingURL=setup-globals.js.map
29
+ //# sourceMappingURL=setup-globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/setup-globals.ts"],"names":[],"mappings":";;;AASa,MAAA,IAAA,GAWT,OAAO,WAAA,EAAa,OAAY,KAAA;AAClC,EAAA,OAAA,CAAQ,IAAI,0CAAmC,CAAA;AAE/C,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAEtB,EAAI,IAAA;AACF,IAAA,MAAM,aAAc,CAAA;AAAA,MAClB,IAAM,EAAA,sBAAA;AAAA,MACN,WAAa,EAAA,KAAA;AAAA,MACb,OAAA,EAAS,aAAa,OAAO;AAAA,KAC9B,CAAA;AAED,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,sDAA+C,qBAAqB,CAAA;AAAA,KACtE;AAAA,WACO,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,kDAA6C,KAAK,CAAA;AAAA;AAEpE;AAEO,SAAS,oBAAoB,OAAkB,EAAA;AACpD,EAAA,OAAA,CACG,QAAQ,eAAe,CAAA,CACvB,WAAY,CAAA,0BAA0B,EACtC,QAAS,CAAA,gBAAA,EAAkB,qBAAqB,CAAA,CAChD,OAAO,eAAiB,EAAA,qBAAqB,EAC7C,MAAO,CAAA,mBAAA,EAAqB,qCAAqC,CACjE,CAAA,MAAA;AAAA,IACC,eAAA;AAAA,IACA;AAAA,GACF,CACC,MAAO,CAAA,OAAA,EAAS,8CAA8C,CAAA,CAC9D,OAAO,WAAa,EAAA,8CAA8C,CAClE,CAAA,MAAA,CAAO,IAAI,CAAA;AAChB","file":"setup-globals.js","sourcesContent":["import { Command } from \"commander\";\nimport { createProject, parseVersion } from \"@powerhousedao/codegen\";\nimport { CommandActionType } from \"../types.js\";\nimport {\n HOME_DIR,\n POWERHOUSE_GLOBAL_DIR,\n PH_GLOBAL_PROJECT_NAME,\n} from \"../utils.js\";\n\nexport const init: CommandActionType<\n [\n string | undefined,\n {\n project?: string;\n interactive?: boolean;\n version?: string;\n dev?: boolean;\n staging?: boolean;\n },\n ]\n> = async (projectName, options) => {\n console.log(\"📦 Initializing global project...\");\n\n process.chdir(HOME_DIR);\n\n try {\n await createProject({\n name: PH_GLOBAL_PROJECT_NAME,\n interactive: false,\n version: parseVersion(options),\n });\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\nexport function setupGlobalsCommand(program: Command) {\n program\n .command(\"setup-globals\")\n .description(\"Initialize a new project\")\n .argument(\"[project-name]\", \"Name of the project\")\n .option(\"-p, --project\", \"Name of the project\")\n .option(\"-i, --interactive\", \"Run the command in interactive mode\")\n .option(\n \"-v, --version\",\n 'Specify development version to use. Defaults to \"main\"',\n )\n .option(\"--dev\", 'Use \"development\" version of the boilerplate')\n .option(\"--staging\", 'Use \"development\" version of the boilerplate')\n .action(init);\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { commands } from './commands/index.js';
2
- export { HOME_DIR, PH_BIN, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, PackageManager, ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers } from './utils.js';
3
- export { init, initCommand } from './commands/init.js';
2
+ export { HOME_DIR, PH_BIN, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, PackageManager, ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers } from './utils.js';
3
+ export { init, setupGlobalsCommand } from './commands/setup-globals.js';
4
4
  import 'commander';
5
5
  import './types.js';
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  declare const PH_BIN = "ph-cli";
2
+ declare const PH_CLI_COMMANDS: string[];
2
3
  declare const POWERHOUSE_CONFIG_FILE = "powerhouse.config.json";
3
4
  declare const HOME_DIR: string;
4
5
  declare const PH_GLOBAL_PROJECT_NAME = ".ph";
@@ -38,4 +39,4 @@ declare function getPackageManagerFromLockfile(dir: string): PackageManager;
38
39
  declare function getProjectInfo(debug?: boolean): ProjectInfo;
39
40
  declare function forwardPHCommand(packageManager: PackageManager, projectPath: string, args: string, isPackageScript: boolean, debug?: boolean): void;
40
41
 
41
- export { HOME_DIR, PH_BIN, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, type PackageManager, type ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers };
42
+ export { HOME_DIR, PH_BIN, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, type PackageManager, type ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers };
package/dist/utils.js CHANGED
@@ -4,6 +4,16 @@ import { execSync } from 'node:child_process';
4
4
  import { homedir } from 'node:os';
5
5
 
6
6
  const PH_BIN = "ph-cli";
7
+ const PH_CLI_COMMANDS = [
8
+ "init",
9
+ "dev",
10
+ "connect",
11
+ "generate",
12
+ "reactor",
13
+ "help",
14
+ "install",
15
+ "service"
16
+ ];
7
17
  const POWERHOUSE_CONFIG_FILE = "powerhouse.config.json";
8
18
  const HOME_DIR = homedir();
9
19
  const PH_GLOBAL_PROJECT_NAME = ".ph";
@@ -90,11 +100,11 @@ function forwardPHCommand(packageManager, projectPath, args, isPackageScript, de
90
100
  console.log(">>> packageManager:", packageManager);
91
101
  }
92
102
  execSync(execCommand, {
93
- stdio: ["ignore", "inherit", "ignore"],
103
+ stdio: "inherit",
94
104
  ...commandOptions
95
105
  });
96
106
  }
97
107
 
98
- export { HOME_DIR, PH_BIN, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers };
108
+ export { HOME_DIR, PH_BIN, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers };
99
109
  //# sourceMappingURL=utils.js.map
100
110
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":";;;;;AAKO,MAAM,MAAS,GAAA;AACf,MAAM,sBAAyB,GAAA;AAC/B,MAAM,WAAW,OAAQ;AACzB,MAAM,sBAAyB,GAAA;AAC/B,MAAM,wBAAwB,IAAK,CAAA,IAAA;AAAA,EACxC,QAAA;AAAA,EACA;AACF;AAEO,MAAM,eAAkB,GAAA;AAAA,EAC7B,GAAK,EAAA;AAAA,IACH,WAAA,EAAa,OAAO,MAAM,CAAA,cAAA,CAAA;AAAA,IAC1B,UAAY,EAAA,CAAA,iBAAA,CAAA;AAAA,IACZ,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,WAAA,EAAa,aAAa,MAAM,CAAA,cAAA,CAAA;AAAA,IAChC,UAAY,EAAA,CAAA,kBAAA,CAAA;AAAA,IACZ,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,WAAA,EAAa,QAAQ,MAAM,CAAA,cAAA,CAAA;AAAA,IAC3B,UAAY,EAAA,CAAA,kBAAA,CAAA;AAAA,IACZ,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,GAAK,EAAA;AAAA,IACH,WAAA,EAAa,OAAO,MAAM,CAAA,cAAA,CAAA;AAAA,IAC1B,UAAY,EAAA,CAAA,qBAAA,CAAA;AAAA,IACZ,QAAU,EAAA;AAAA;AAEd;AAWO,SAAS,qBAAwB,GAAA;AACtC,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,oBAAoB,GAAa,EAAA;AAC/C,EAAA,MAAM,oBAAuB,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,EAAK,sBAAsB,CAAA;AAElE,EAAO,OAAA,EAAA,CAAG,WAAW,oBAAoB,CAAA;AAC3C;AAEO,SAAS,mBAAA,CACd,GACA,EAAA,cAAA,GAAiC,qBACjC,EAAA;AACA,EAAA,MAAM,eAAkB,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,EAAK,cAAc,CAAA;AAErD,EAAA,IAAI,GAAG,UAAW,CAAA,eAAe,CAAK,IAAA,cAAA,CAAe,GAAG,CAAG,EAAA;AACzD,IAAO,OAAA,GAAA;AAAA;AAGT,EAAM,MAAA,SAAA,GAAY,QAAQ,GAAG,CAAA;AAE7B,EAAA,IAAI,cAAc,GAAK,EAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,mBAAA,CAAoB,WAAW,cAAc,CAAA;AACtD;AAEO,SAAS,8BAA8B,GAA6B,EAAA;AACzE,EAAI,IAAA,EAAA,CAAG,WAAW,IAAK,CAAA,IAAA,CAAK,KAAK,eAAgB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAG,EAAA;AAChE,IAAO,OAAA,MAAA;AAAA,GACT,MAAA,IAAW,EAAG,CAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAK,KAAK,eAAgB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAG,EAAA;AACvE,IAAO,OAAA,MAAA;AAAA,GACT,MAAA,IAAW,EAAG,CAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAK,KAAK,eAAgB,CAAA,GAAA,CAAI,QAAQ,CAAC,CAAG,EAAA;AACtE,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,eAAe,KAA8B,EAAA;AAC3D,EAAM,MAAA,WAAA,GAAc,QAAQ,GAAI,EAAA;AAEhC,EAAA,IAAI,KAAO,EAAA;AACT,IAAQ,OAAA,CAAA,GAAA,CAAI,oBAAoB,WAAW,CAAA;AAAA;AAG7C,EAAM,MAAA,WAAA,GAAc,mBAAoB,CAAA,WAAA,EAAa,mBAAmB,CAAA;AAExE,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,IAAA;AAAA,MACV,IAAM,EAAA;AAAA,KACR;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,KAAA;AAAA,IACV,IAAM,EAAA;AAAA,GACR;AACF;AAEO,SAAS,gBACd,CAAA,cAAA,EACA,WACA,EAAA,IAAA,EACA,iBACA,KACA,EAAA;AACA,EAAM,MAAA,OAAA,GAAU,gBAAgB,cAAc,CAAA;AAC9C,EAAA,MAAM,OAAU,GAAA,eAAA,GAAkB,OAAQ,CAAA,UAAA,GAAa,OAAQ,CAAA,WAAA;AAE/D,EAAA,MAAM,WAAc,GAAA,OAAA,CAAQ,OAAQ,CAAA,eAAA,EAAiB,IAAI,CAAA;AAEzD,EAAM,MAAA,cAAA,GAAiB,EAAE,GAAA,EAAK,WAAY,EAAA;AAE1C,EAAA,IAAI,KAAO,EAAA;AACT,IAAQ,OAAA,CAAA,GAAA,CAAI,oBAAoB,WAAW,CAAA;AAC3C,IAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,cAAc,CAAA;AACjD,IAAQ,OAAA,CAAA,GAAA,CAAI,oBAAoB,WAAW,CAAA;AAC3C,IAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,cAAc,CAAA;AAAA;AAGnD,EAAA,QAAA,CAAS,WAAa,EAAA;AAAA,IACpB,KAAO,EAAA,CAAC,QAAU,EAAA,SAAA,EAAW,QAAQ,CAAA;AAAA,IACrC,GAAG;AAAA,GACJ,CAAA;AACH","file":"utils.js","sourcesContent":["import path, { dirname } from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { homedir } from \"node:os\";\n\nexport const PH_BIN = \"ph-cli\";\nexport const POWERHOUSE_CONFIG_FILE = \"powerhouse.config.json\";\nexport const HOME_DIR = homedir();\nexport const PH_GLOBAL_PROJECT_NAME = \".ph\";\nexport const POWERHOUSE_GLOBAL_DIR = path.join(\n HOME_DIR,\n PH_GLOBAL_PROJECT_NAME,\n);\n\nexport const packageManagers = {\n bun: {\n execCommand: `bun ${PH_BIN} {{arguments}}`,\n execScript: `bun {{arguments}}`,\n lockfile: \"bun.lock\",\n },\n pnpm: {\n execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,\n execScript: `pnpm {{arguments}}`,\n lockfile: \"pnpm-lock.yaml\",\n },\n yarn: {\n execCommand: `yarn ${PH_BIN} {{arguments}}`,\n execScript: `yarn {{arguments}}`,\n lockfile: \"yarn.lock\",\n },\n npm: {\n execCommand: `npx ${PH_BIN} {{arguments}}`,\n execScript: `npm run {{arguments}}`,\n lockfile: \"package-lock.json\",\n },\n};\n\nexport type ProjectInfo = {\n isGlobal: boolean;\n path: string;\n};\n\nexport type PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\ntype PathValidation = (dir: string) => boolean;\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 fs.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 (fs.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 getPackageManagerFromLockfile(dir: string): PackageManager {\n if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {\n return \"pnpm\";\n } else if (fs.existsSync(path.join(dir, packageManagers.yarn.lockfile))) {\n return \"yarn\";\n } else if (fs.existsSync(path.join(dir, packageManagers.bun.lockfile))) {\n return \"bun\";\n }\n\n return \"npm\";\n}\n\nexport function getProjectInfo(debug?: boolean): 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 return {\n isGlobal: true,\n path: POWERHOUSE_GLOBAL_DIR,\n };\n }\n\n return {\n isGlobal: false,\n path: projectPath,\n };\n}\n\nexport function forwardPHCommand(\n packageManager: PackageManager,\n projectPath: string,\n args: string,\n isPackageScript: boolean,\n debug?: boolean,\n) {\n const manager = packageManagers[packageManager];\n const command = isPackageScript ? manager.execScript : manager.execCommand;\n\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 execSync(execCommand, {\n stdio: [\"ignore\", \"inherit\", \"ignore\"],\n ...commandOptions,\n });\n}"]}
1
+ {"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import path, { dirname } from \"node:path\";\nimport fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { homedir } from \"node:os\";\n\nexport const PH_BIN = \"ph-cli\";\nexport const PH_CLI_COMMANDS = [\n \"init\",\n \"dev\",\n \"connect\",\n \"generate\",\n \"reactor\",\n \"help\",\n \"install\",\n \"service\",\n];\nexport const POWERHOUSE_CONFIG_FILE = \"powerhouse.config.json\";\nexport const HOME_DIR = homedir();\nexport const PH_GLOBAL_PROJECT_NAME = \".ph\";\nexport const POWERHOUSE_GLOBAL_DIR = path.join(\n HOME_DIR,\n PH_GLOBAL_PROJECT_NAME,\n);\n\nexport const packageManagers = {\n bun: {\n execCommand: `bun ${PH_BIN} {{arguments}}`,\n execScript: `bun {{arguments}}`,\n lockfile: \"bun.lock\",\n },\n pnpm: {\n execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,\n execScript: `pnpm {{arguments}}`,\n lockfile: \"pnpm-lock.yaml\",\n },\n yarn: {\n execCommand: `yarn ${PH_BIN} {{arguments}}`,\n execScript: `yarn {{arguments}}`,\n lockfile: \"yarn.lock\",\n },\n npm: {\n execCommand: `npx ${PH_BIN} {{arguments}}`,\n execScript: `npm run {{arguments}}`,\n lockfile: \"package-lock.json\",\n },\n};\n\nexport type ProjectInfo = {\n isGlobal: boolean;\n path: string;\n};\n\nexport type PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\ntype PathValidation = (dir: string) => boolean;\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 fs.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 (fs.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 getPackageManagerFromLockfile(dir: string): PackageManager {\n if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {\n return \"pnpm\";\n } else if (fs.existsSync(path.join(dir, packageManagers.yarn.lockfile))) {\n return \"yarn\";\n } else if (fs.existsSync(path.join(dir, packageManagers.bun.lockfile))) {\n return \"bun\";\n }\n\n return \"npm\";\n}\n\nexport function getProjectInfo(debug?: boolean): 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 return {\n isGlobal: true,\n path: POWERHOUSE_GLOBAL_DIR,\n };\n }\n\n return {\n isGlobal: false,\n path: projectPath,\n };\n}\n\nexport function forwardPHCommand(\n packageManager: PackageManager,\n projectPath: string,\n args: string,\n isPackageScript: boolean,\n debug?: boolean,\n) {\n const manager = packageManagers[packageManager];\n const command = isPackageScript ? manager.execScript : manager.execCommand;\n\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 execSync(execCommand, {\n stdio: \"inherit\",\n ...commandOptions,\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ph-cmd",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;AASa,MAAA,IAAA,GAWT,OAAO,WAAA,EAAa,OAAY,KAAA;AAClC,EAAA,OAAA,CAAQ,IAAI,0CAAmC,CAAA;AAE/C,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAEtB,EAAI,IAAA;AACF,IAAA,MAAM,aAAc,CAAA;AAAA,MAClB,IAAM,EAAA,sBAAA;AAAA,MACN,WAAa,EAAA,KAAA;AAAA,MACb,OAAA,EAAS,aAAa,OAAO;AAAA,KAC9B,CAAA;AAED,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,sDAA+C,qBAAqB,CAAA;AAAA,KACtE;AAAA,WACO,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,kDAA6C,KAAK,CAAA;AAAA;AAEpE;AAEO,SAAS,YAAY,OAAkB,EAAA;AAC5C,EAAA,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAY,CAAA,0BAA0B,EACtC,QAAS,CAAA,gBAAA,EAAkB,qBAAqB,CAAA,CAChD,OAAO,eAAiB,EAAA,qBAAqB,EAC7C,MAAO,CAAA,mBAAA,EAAqB,qCAAqC,CACjE,CAAA,MAAA;AAAA,IACC,eAAA;AAAA,IACA;AAAA,GACF,CACC,MAAO,CAAA,OAAA,EAAS,8CAA8C,CAAA,CAC9D,OAAO,WAAa,EAAA,8CAA8C,CAClE,CAAA,MAAA,CAAO,IAAI,CAAA;AAChB","file":"init.js","sourcesContent":["import { Command } from \"commander\";\nimport { createProject, parseVersion } from \"@powerhousedao/codegen\";\nimport { CommandActionType } from \"../types.js\";\nimport {\n HOME_DIR,\n POWERHOUSE_GLOBAL_DIR,\n PH_GLOBAL_PROJECT_NAME,\n} from \"../utils.js\";\n\nexport const init: CommandActionType<\n [\n string | undefined,\n {\n project?: string;\n interactive?: boolean;\n version?: string;\n dev?: boolean;\n staging?: boolean;\n },\n ]\n> = async (projectName, options) => {\n console.log(\"📦 Initializing global project...\");\n\n process.chdir(HOME_DIR);\n\n try {\n await createProject({\n name: PH_GLOBAL_PROJECT_NAME,\n interactive: false,\n version: parseVersion(options),\n });\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\nexport function initCommand(program: Command) {\n program\n .command(\"init\")\n .description(\"Initialize a new project\")\n .argument(\"[project-name]\", \"Name of the project\")\n .option(\"-p, --project\", \"Name of the project\")\n .option(\"-i, --interactive\", \"Run the command in interactive mode\")\n .option(\n \"-v, --version\",\n 'Specify development version to use. Defaults to \"main\"',\n )\n .option(\"--dev\", 'Use \"development\" version of the boilerplate')\n .option(\"--staging\", 'Use \"development\" version of the boilerplate')\n .action(init);\n}\n"]}