ph-cmd 0.29.0 → 0.31.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.
@@ -26,6 +26,9 @@ const forwardCommand = (args, options) => {
26
26
  );
27
27
  } catch (error) {
28
28
  console.error("\u274C Failed to forward command");
29
+ if (error.code === "ENOENT") {
30
+ console.error("Have you run `ph setup-globals` or `ph init`?");
31
+ }
29
32
  throw error;
30
33
  }
31
34
  };
@@ -1 +1 @@
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
+ {"version":3,"sources":["../../src/commands/forward.ts"],"names":[],"mappings":";;AAea,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,IAAK,IAAA,KAAA,CAAkB,SAAS,QAAU,EAAA;AACxC,MAAA,OAAA,CAAQ,MAAM,+CAA+C,CAAA;AAAA;AAG/D,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\ntype FSError = {\n code: string;\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 if ((error as FSError).code === \"ENOENT\") {\n console.error(\"Have you run `ph setup-globals` or `ph init`?\");\n }\n\n throw error;\n }\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { createProject, parseVersion } from '@powerhousedao/codegen';
2
- import { HOME_DIR, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_GLOBAL_DIR } from '../utils.js';
2
+ import { HOME_DIR, PH_GLOBAL_PROJECT_NAME, getPackageManagerFromPath, PH_BIN_PATH, POWERHOUSE_GLOBAL_DIR } from '../utils.js';
3
3
 
4
4
  const init = async (projectName, options) => {
5
5
  console.log("\u{1F4E6} Initializing global project...");
@@ -9,7 +9,7 @@ const init = async (projectName, options) => {
9
9
  name: PH_GLOBAL_PROJECT_NAME,
10
10
  interactive: false,
11
11
  version: parseVersion(options),
12
- packageManager: options.packageManager
12
+ packageManager: options.packageManager ?? getPackageManagerFromPath(PH_BIN_PATH)
13
13
  });
14
14
  console.log(
15
15
  `\u{1F680} Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/setup-globals.ts"],"names":[],"mappings":";;;AASa,MAAA,IAAA,GAYT,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,CAAA;AAAA,MAC7B,gBAAgB,OAAQ,CAAA;AAAA,KACzB,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,OAAO,OAAS,EAAA,8CAA8C,EAC9D,MAAO,CAAA,WAAA,EAAa,8CAA8C,CAClE,CAAA,MAAA;AAAA,IACC,oCAAA;AAAA,IACA;AAAA,GACF,CACC,OAAO,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 packageManager?: string;\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 packageManager: options.packageManager,\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 .option(\n \"--package-manager <packageManager>\",\n \"force package manager to use\",\n )\n .action(init);\n}\n"]}
1
+ {"version":3,"sources":["../../src/commands/setup-globals.ts"],"names":[],"mappings":";;;AAWa,MAAA,IAAA,GAYT,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,CAAA;AAAA,MAC7B,cACE,EAAA,OAAA,CAAQ,cAAkB,IAAA,yBAAA,CAA0B,WAAW;AAAA,KAClE,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,OAAO,OAAS,EAAA,8CAA8C,EAC9D,MAAO,CAAA,WAAA,EAAa,8CAA8C,CAClE,CAAA,MAAA;AAAA,IACC,oCAAA;AAAA,IACA;AAAA,GACF,CACC,OAAO,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 getPackageManagerFromPath,\n PH_BIN_PATH,\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 packageManager?: string;\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 packageManager:\n options.packageManager ?? getPackageManagerFromPath(PH_BIN_PATH),\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 .option(\n \"--package-manager <packageManager>\",\n \"force package manager to use\",\n )\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_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, PackageManager, ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getProjectInfo, isPowerhouseProject, packageManagers } from './utils.js';
2
+ export { HOME_DIR, PH_BIN, PH_BIN_PATH, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, PackageManager, ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getPackageManagerFromPath, getProjectInfo, isPowerhouseProject, packageManagers } from './utils.js';
3
3
  export { init, setupGlobalsCommand } from './commands/setup-globals.js';
4
4
  import 'commander';
5
5
  import './types.js';
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,8 @@
1
+ import { init } from './commands/setup-globals.js';
2
+
3
+ const createGlobalProject = async () => {
4
+ await init(void 0, {});
5
+ };
6
+ createGlobalProject().catch((err) => console.error(err));
7
+ //# sourceMappingURL=postinstall.js.map
8
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/postinstall.ts"],"names":[],"mappings":";;AAEA,MAAM,sBAAsB,YAAY;AACtC,EAAM,MAAA,IAAA,CAAK,KAAW,CAAA,EAAA,EAAE,CAAA;AAC1B,CAAA;AAEA,mBAAA,GAAsB,KAAM,CAAA,CAAC,QAAiB,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA","file":"postinstall.js","sourcesContent":["import { init } from \"./commands/setup-globals.js\";\n\nconst createGlobalProject = async () => {\n await init(undefined, {});\n};\n\ncreateGlobalProject().catch((err: unknown) => console.error(err));\n"]}
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ declare const PH_BIN_PATH: string;
1
2
  declare const PH_BIN = "ph-cli";
2
3
  declare const PH_CLI_COMMANDS: string[];
3
4
  declare const POWERHOUSE_CONFIG_FILE = "powerhouse.config.json";
@@ -5,25 +6,28 @@ declare const HOME_DIR: string;
5
6
  declare const PH_GLOBAL_PROJECT_NAME = ".ph";
6
7
  declare const POWERHOUSE_GLOBAL_DIR: string;
7
8
  declare const packageManagers: {
8
- bun: {
9
- execCommand: string;
10
- execScript: string;
11
- lockfile: string;
9
+ readonly bun: {
10
+ readonly execCommand: "bun ph-cli {{arguments}}";
11
+ readonly execScript: "bun {{arguments}}";
12
+ readonly lockfile: "bun.lock";
13
+ readonly globalPathRegexp: RegExp;
12
14
  };
13
- pnpm: {
14
- execCommand: string;
15
- execScript: string;
16
- lockfile: string;
15
+ readonly pnpm: {
16
+ readonly execCommand: "pnpm exec ph-cli {{arguments}}";
17
+ readonly execScript: "pnpm {{arguments}}";
18
+ readonly lockfile: "pnpm-lock.yaml";
19
+ readonly globalPathRegexp: RegExp;
17
20
  };
18
- yarn: {
19
- execCommand: string;
20
- execScript: string;
21
- lockfile: string;
21
+ readonly yarn: {
22
+ readonly execCommand: "yarn ph-cli {{arguments}}";
23
+ readonly execScript: "yarn {{arguments}}";
24
+ readonly lockfile: "yarn.lock";
25
+ readonly globalPathRegexp: RegExp;
22
26
  };
23
- npm: {
24
- execCommand: string;
25
- execScript: string;
26
- lockfile: string;
27
+ readonly npm: {
28
+ readonly execCommand: "npx ph-cli {{arguments}}";
29
+ readonly execScript: "npm run {{arguments}}";
30
+ readonly lockfile: "package-lock.json";
27
31
  };
28
32
  };
29
33
  type ProjectInfo = {
@@ -35,8 +39,9 @@ type PathValidation = (dir: string) => boolean;
35
39
  declare function defaultPathValidation(): boolean;
36
40
  declare function isPowerhouseProject(dir: string): boolean;
37
41
  declare function findNodeProjectRoot(dir: string, pathValidation?: PathValidation): string | null;
42
+ declare function getPackageManagerFromPath(dir: string): PackageManager;
38
43
  declare function getPackageManagerFromLockfile(dir: string): PackageManager;
39
44
  declare function getProjectInfo(debug?: boolean): ProjectInfo;
40
45
  declare function forwardPHCommand(packageManager: PackageManager, projectPath: string, args: string, isPackageScript: boolean, debug?: boolean): void;
41
46
 
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 };
47
+ export { HOME_DIR, PH_BIN, PH_BIN_PATH, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, type PackageManager, type ProjectInfo, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getPackageManagerFromPath, getProjectInfo, isPowerhouseProject, packageManagers };
package/dist/utils.js CHANGED
@@ -3,6 +3,7 @@ import fs from 'node:fs';
3
3
  import { execSync } from 'node:child_process';
4
4
  import { homedir } from 'node:os';
5
5
 
6
+ const PH_BIN_PATH = process.argv[1];
6
7
  const PH_BIN = "ph-cli";
7
8
  const PH_CLI_COMMANDS = [
8
9
  "init",
@@ -25,17 +26,20 @@ const packageManagers = {
25
26
  bun: {
26
27
  execCommand: `bun ${PH_BIN} {{arguments}}`,
27
28
  execScript: `bun {{arguments}}`,
28
- lockfile: "bun.lock"
29
+ lockfile: "bun.lock",
30
+ globalPathRegexp: /[\\/].bun[\\/]/
29
31
  },
30
32
  pnpm: {
31
33
  execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,
32
34
  execScript: `pnpm {{arguments}}`,
33
- lockfile: "pnpm-lock.yaml"
35
+ lockfile: "pnpm-lock.yaml",
36
+ globalPathRegexp: /[\\/]pnpm[\\/]/
34
37
  },
35
38
  yarn: {
36
39
  execCommand: `yarn ${PH_BIN} {{arguments}}`,
37
40
  execScript: `yarn {{arguments}}`,
38
- lockfile: "yarn.lock"
41
+ lockfile: "yarn.lock",
42
+ globalPathRegexp: /[\\/]yarn[\\/]/
39
43
  },
40
44
  npm: {
41
45
  execCommand: `npx ${PH_BIN} {{arguments}}`,
@@ -61,6 +65,17 @@ function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
61
65
  }
62
66
  return findNodeProjectRoot(parentDir, pathValidation);
63
67
  }
68
+ function getPackageManagerFromPath(dir) {
69
+ const lowerCasePath = dir.toLowerCase();
70
+ if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {
71
+ return "bun";
72
+ } else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {
73
+ return "pnpm";
74
+ } else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {
75
+ return "yarn";
76
+ }
77
+ return "npm";
78
+ }
64
79
  function getPackageManagerFromLockfile(dir) {
65
80
  if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {
66
81
  return "pnpm";
@@ -105,6 +120,6 @@ function forwardPHCommand(packageManager, projectPath, args, isPackageScript, de
105
120
  });
106
121
  }
107
122
 
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 };
123
+ export { HOME_DIR, PH_BIN, PH_BIN_PATH, PH_CLI_COMMANDS, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, defaultPathValidation, findNodeProjectRoot, forwardPHCommand, getPackageManagerFromLockfile, getPackageManagerFromPath, getProjectInfo, isPowerhouseProject, packageManagers };
109
124
  //# sourceMappingURL=utils.js.map
110
125
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
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"]}
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_PATH = process.argv[1];\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 globalPathRegexp: /[\\\\/].bun[\\\\/]/,\n },\n pnpm: {\n execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,\n execScript: `pnpm {{arguments}}`,\n lockfile: \"pnpm-lock.yaml\",\n globalPathRegexp: /[\\\\/]pnpm[\\\\/]/,\n },\n yarn: {\n execCommand: `yarn ${PH_BIN} {{arguments}}`,\n execScript: `yarn {{arguments}}`,\n lockfile: \"yarn.lock\",\n globalPathRegexp: /[\\\\/]yarn[\\\\/]/,\n },\n npm: {\n execCommand: `npx ${PH_BIN} {{arguments}}`,\n execScript: `npm run {{arguments}}`,\n lockfile: \"package-lock.json\",\n },\n} as const;\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 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 (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.29.0",
3
+ "version": "0.31.0",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -33,6 +33,7 @@
33
33
  "dev": "tsx src/cli.ts",
34
34
  "lint": "eslint .",
35
35
  "lint:nx": "eslint . --fix --quiet",
36
- "lint:fix": "eslint --fix"
36
+ "lint:fix": "eslint --fix",
37
+ "postinstall": "node -e \"if (process.env.npm_config_global === 'true') import('./dist/postinstall.js');\""
37
38
  }
38
39
  }