ph-cmd 5.0.0-staging.9 → 5.0.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.
Files changed (73) hide show
  1. package/README.md +7 -2
  2. package/dist/src/cli.js +12 -0
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/commands/__tests__/update.test.js.map +1 -1
  5. package/dist/src/commands/__tests__/use.test.js +43 -24
  6. package/dist/src/commands/__tests__/use.test.js.map +1 -1
  7. package/dist/src/commands/forward.d.ts.map +1 -1
  8. package/dist/src/commands/forward.js +5 -2
  9. package/dist/src/commands/forward.js.map +1 -1
  10. package/dist/src/commands/help.d.ts +1 -1
  11. package/dist/src/commands/help.d.ts.map +1 -1
  12. package/dist/src/commands/index.d.ts +7 -1
  13. package/dist/src/commands/index.d.ts.map +1 -1
  14. package/dist/src/commands/index.js +1 -0
  15. package/dist/src/commands/index.js.map +1 -1
  16. package/dist/src/commands/init.d.ts +3 -2
  17. package/dist/src/commands/init.d.ts.map +1 -1
  18. package/dist/src/commands/init.js +1 -0
  19. package/dist/src/commands/init.js.map +1 -1
  20. package/dist/src/commands/setup-globals.d.ts +3 -2
  21. package/dist/src/commands/setup-globals.d.ts.map +1 -1
  22. package/dist/src/commands/setup-globals.js +1 -0
  23. package/dist/src/commands/setup-globals.js.map +1 -1
  24. package/dist/src/commands/update.d.ts +2 -2
  25. package/dist/src/commands/update.d.ts.map +1 -1
  26. package/dist/src/commands/update.js +1 -1
  27. package/dist/src/commands/update.js.map +1 -1
  28. package/dist/src/commands/use.d.ts +3 -3
  29. package/dist/src/commands/use.d.ts.map +1 -1
  30. package/dist/src/commands/use.js +2 -1
  31. package/dist/src/commands/use.js.map +1 -1
  32. package/dist/src/commands/version.d.ts +1 -1
  33. package/dist/src/commands/version.d.ts.map +1 -1
  34. package/dist/src/commands/version.js +1 -0
  35. package/dist/src/commands/version.js.map +1 -1
  36. package/dist/src/utils/constants.d.ts +53 -0
  37. package/dist/src/utils/constants.d.ts.map +1 -0
  38. package/dist/src/utils/constants.js +72 -0
  39. package/dist/src/utils/constants.js.map +1 -0
  40. package/dist/src/utils/create-global-project.d.ts +3 -0
  41. package/dist/src/utils/create-global-project.d.ts.map +1 -0
  42. package/dist/src/utils/create-global-project.js +28 -0
  43. package/dist/src/utils/create-global-project.js.map +1 -0
  44. package/dist/src/utils/dependencies.d.ts +4 -0
  45. package/dist/src/utils/dependencies.d.ts.map +1 -0
  46. package/dist/src/utils/dependencies.js +61 -0
  47. package/dist/src/utils/dependencies.js.map +1 -0
  48. package/dist/src/utils/help-formatting.d.ts +1 -1
  49. package/dist/src/utils/help-formatting.d.ts.map +1 -1
  50. package/dist/src/utils/help-formatting.js +1 -1
  51. package/dist/src/utils/help-formatting.js.map +1 -1
  52. package/dist/src/utils/help.d.ts +31 -0
  53. package/dist/src/utils/help.d.ts.map +1 -0
  54. package/dist/src/utils/help.js +72 -0
  55. package/dist/src/utils/help.js.map +1 -0
  56. package/dist/src/utils/index.d.ts +6 -130
  57. package/dist/src/utils/index.d.ts.map +1 -1
  58. package/dist/src/utils/index.js +5 -367
  59. package/dist/src/utils/index.js.map +1 -1
  60. package/dist/src/utils/package-manager.d.ts +33 -0
  61. package/dist/src/utils/package-manager.d.ts.map +1 -0
  62. package/dist/src/utils/package-manager.js +152 -0
  63. package/dist/src/utils/package-manager.js.map +1 -0
  64. package/dist/src/utils/types.d.ts +21 -0
  65. package/dist/src/utils/types.d.ts.map +1 -0
  66. package/dist/src/utils/types.js +2 -0
  67. package/dist/src/utils/types.js.map +1 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +9 -11
  70. package/dist/src/version.d.ts +0 -2
  71. package/dist/src/version.d.ts.map +0 -1
  72. package/dist/src/version.js +0 -3
  73. package/dist/src/version.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,cAAc,sBAAsB,CAAC;AACrC,eAAO,MAAM,WAAW,QAAkB,CAAC;AAC3C,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,eAAe,UAiB3B,CAAC;AACF,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,QAAQ,QAAY,CAAC;AAClC,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAC5C,eAAO,MAAM,qBAAqB,QAGjC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,sBAkBA;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ClB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,KAAK,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAE/C,wBAAgB,qBAAqB,YAEpC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,WAI9C;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,cAAsC,iBAevD;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYrE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAUzE;AAED,wBAAsB,cAAc,CAClC,KAAK,CAAC,EAAE,OAAO,EACf,qBAAqB,UAAO,GAC3B,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,EACf,aAAa,UAAQ,UAoCtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,GACjC,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,MAAM,GAAG,IAeX,CAAC;AA4BF,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,QAuCpB;AAED,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,OAAO,QAuBpB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,cAAc,MAAM,EACpB,UAAS,oBAAyB,kBA6BnC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,EACjD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC7C,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAgBtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,EAChD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS,GAC7C,OAAO,CAeT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,EAChD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS,GAC7C,OAAO,CAkBT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,mBAAmB,YAAY,CAAC"}
@@ -1,369 +1,7 @@
1
- import { createProject, parseVersion } from "@powerhousedao/codegen";
2
- import { execSync } from "node:child_process";
3
- import fs from "node:fs";
4
- import { homedir } from "node:os";
5
- import path, { dirname } from "node:path";
1
+ export * from "./constants.js";
2
+ export * from "./create-global-project.js";
3
+ export * from "./dependencies.js";
6
4
  export * from "./help-formatting.js";
7
- export const PH_BIN_PATH = process.argv[1];
8
- export const PH_BIN = "ph-cli";
9
- export const PH_CLI_COMMANDS = [
10
- "init",
11
- "dev",
12
- "connect",
13
- "generate",
14
- "reactor",
15
- "switchboard",
16
- "help",
17
- "install",
18
- "add",
19
- "i",
20
- "remove",
21
- "uninstall",
22
- "service",
23
- "list",
24
- "inspect",
25
- "version",
26
- ];
27
- export const POWERHOUSE_CONFIG_FILE = "powerhouse.config.json";
28
- export const HOME_DIR = homedir();
29
- export const PH_GLOBAL_PROJECT_NAME = ".ph";
30
- export const POWERHOUSE_GLOBAL_DIR = path.join(HOME_DIR, PH_GLOBAL_PROJECT_NAME);
31
- export function resolvePackageManagerOptions(options) {
32
- if (options.packageManager) {
33
- return options.packageManager;
34
- }
35
- if (options.pnpm) {
36
- return "pnpm";
37
- }
38
- if (options.yarn) {
39
- return "yarn";
40
- }
41
- if (options.bun) {
42
- return "bun";
43
- }
44
- return undefined;
45
- }
46
- export const packageManagers = {
47
- bun: {
48
- installCommand: "bun add {{dependency}}",
49
- execCommand: `bun ${PH_BIN} {{arguments}}`,
50
- execScript: `bun {{arguments}}`,
51
- lockfile: "bun.lock",
52
- globalPathRegexp: /[\\/].bun[\\/]/,
53
- updateCommand: "bun update {{dependency}}",
54
- buildAffected: "bun run build:affected",
55
- workspaceOption: "",
56
- installDepsCommand: "bun install",
57
- },
58
- pnpm: {
59
- installCommand: "pnpm add {{dependency}}",
60
- execCommand: `pnpm exec ${PH_BIN} {{arguments}}`,
61
- execScript: `pnpm {{arguments}}`,
62
- lockfile: "pnpm-lock.yaml",
63
- globalPathRegexp: /[\\/]pnpm[\\/]/,
64
- updateCommand: "pnpm update {{dependency}}",
65
- buildAffected: "pnpm run build:affected",
66
- workspaceOption: "--workspace-root",
67
- installDepsCommand: "pnpm install",
68
- },
69
- yarn: {
70
- installCommand: "yarn add {{dependency}}",
71
- execCommand: `yarn ${PH_BIN} {{arguments}}`,
72
- execScript: `yarn {{arguments}}`,
73
- lockfile: "yarn.lock",
74
- globalPathRegexp: /[\\/]yarn[\\/]/,
75
- updateCommand: "yarn upgrade {{dependency}}",
76
- buildAffected: "yarn run build:affected",
77
- workspaceOption: "-W",
78
- installDepsCommand: "yarn install",
79
- },
80
- npm: {
81
- installCommand: "npm install {{dependency}}",
82
- execCommand: `npx ${PH_BIN} {{arguments}}`,
83
- execScript: `npm run {{arguments}}`,
84
- lockfile: "package-lock.json",
85
- updateCommand: "npm update {{dependency}} --save",
86
- buildAffected: "npm run build:affected",
87
- workspaceOption: "",
88
- installDepsCommand: "npm install",
89
- },
90
- };
91
- export function defaultPathValidation() {
92
- return true;
93
- }
94
- export function isPowerhouseProject(dir) {
95
- const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);
96
- return fs.existsSync(powerhouseConfigPath);
97
- }
98
- export function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
99
- const packageJsonPath = path.join(dir, "package.json");
100
- if (fs.existsSync(packageJsonPath) && pathValidation(dir)) {
101
- return dir;
102
- }
103
- const parentDir = dirname(dir);
104
- if (parentDir === dir) {
105
- return null;
106
- }
107
- return findNodeProjectRoot(parentDir, pathValidation);
108
- }
109
- export function getPackageManagerFromPath(dir) {
110
- const lowerCasePath = dir.toLowerCase();
111
- if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {
112
- return "bun";
113
- }
114
- else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {
115
- return "pnpm";
116
- }
117
- else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {
118
- return "yarn";
119
- }
120
- return "npm";
121
- }
122
- export function getPackageManagerFromLockfile(dir) {
123
- if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {
124
- return "pnpm";
125
- }
126
- else if (fs.existsSync(path.join(dir, packageManagers.yarn.lockfile))) {
127
- return "yarn";
128
- }
129
- else if (fs.existsSync(path.join(dir, packageManagers.bun.lockfile))) {
130
- return "bun";
131
- }
132
- return "npm";
133
- }
134
- export async function getProjectInfo(debug, generateGlobalProject = true) {
135
- const currentPath = process.cwd();
136
- if (debug) {
137
- console.log(">>> currentPath:", currentPath);
138
- }
139
- const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);
140
- if (!projectPath) {
141
- let available = fs.existsSync(POWERHOUSE_GLOBAL_DIR);
142
- if (generateGlobalProject) {
143
- await createGlobalProject();
144
- available = true;
145
- }
146
- return {
147
- available,
148
- isGlobal: true,
149
- path: POWERHOUSE_GLOBAL_DIR,
150
- };
151
- }
152
- return {
153
- isGlobal: false,
154
- available: true,
155
- path: projectPath,
156
- };
157
- }
158
- export function forwardPHCommand(packageManager, projectPath, args, debug, captureOutput = false) {
159
- const manager = packageManagers[packageManager];
160
- const command = manager.execCommand;
161
- const execCommand = command.replace("{{arguments}}", args);
162
- const commandOptions = { cwd: projectPath };
163
- if (debug) {
164
- console.log(">>> execCommand:", execCommand);
165
- console.log(">>> commandOptions:", commandOptions);
166
- console.log(">>> projectPath:", projectPath);
167
- console.log(">>> packageManager:", packageManager);
168
- }
169
- if (captureOutput) {
170
- // Capture output and return it
171
- try {
172
- return execSync(execCommand, {
173
- stdio: "pipe",
174
- encoding: "utf8",
175
- ...commandOptions,
176
- });
177
- }
178
- catch (error) {
179
- throw new Error(`Failed to execute command: ${execCommand}\nError: ${error instanceof Error ? error.message : String(error)}`);
180
- }
181
- }
182
- else {
183
- // Original behavior - pipe directly to stdout/stderr
184
- execSync(execCommand, {
185
- stdio: "inherit",
186
- ...commandOptions,
187
- });
188
- return "";
189
- }
190
- }
191
- /**
192
- * Recursively searches for a specific file by traversing up the directory tree.
193
- * Starting from the given path, it checks each parent directory until it finds
194
- * the target file or reaches the root directory.
195
- *
196
- * @param startPath - The absolute path of the directory to start searching from
197
- * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')
198
- * @returns The absolute path of the directory containing the target file, or null if not found
199
- *
200
- * @example
201
- * // Find the workspace root directory
202
- * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');
203
- *
204
- * // Find the nearest package.json
205
- * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');
206
- */
207
- export const findContainerDirectory = (startPath, targetFile) => {
208
- const filePath = path.join(startPath, targetFile);
209
- if (fs.existsSync(filePath)) {
210
- return startPath;
211
- }
212
- const parentDir = path.dirname(startPath);
213
- //reached the root directory and haven't found the file
214
- if (parentDir === startPath) {
215
- return null;
216
- }
217
- return findContainerDirectory(parentDir, targetFile);
218
- };
219
- function parseDependencyString(dependency) {
220
- // Handle scoped packages (e.g. @org/package@version)
221
- const lastAtIndex = dependency.lastIndexOf("@");
222
- if (lastAtIndex === 0) {
223
- // This is a scoped package without version
224
- return { name: dependency, version: "latest" };
225
- }
226
- const name = dependency.slice(0, lastAtIndex);
227
- const version = dependency.slice(lastAtIndex + 1);
228
- return {
229
- name,
230
- version: version || "latest",
231
- };
232
- }
233
- export function updateDependencyVersionString(packageManager, dependencies, projectPath) {
234
- const manager = packageManagers[packageManager];
235
- const packageJsonPath = path.join(projectPath, "package.json");
236
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
237
- // Initialize dependencies and devDependencies if they don't exist
238
- packageJson.dependencies = packageJson.dependencies || {};
239
- packageJson.devDependencies = packageJson.devDependencies || {};
240
- // Process each dependency string
241
- for (const dependency of dependencies) {
242
- const { name, version } = parseDependencyString(dependency);
243
- // Check if the package exists in either dependencies or devDependencies
244
- if (name in packageJson.dependencies) {
245
- packageJson.dependencies[name] = version;
246
- }
247
- else if (name in packageJson.devDependencies) {
248
- packageJson.devDependencies[name] = version;
249
- }
250
- }
251
- // Write the updated package.json back to the file
252
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf8");
253
- const installDepsCommand = manager.installDepsCommand;
254
- const commandOptions = { cwd: projectPath };
255
- execSync(installDepsCommand, {
256
- stdio: "inherit",
257
- ...commandOptions,
258
- });
259
- }
260
- export function installDependency(packageManager, dependencies, projectPath, workspace) {
261
- if (!fs.existsSync(projectPath)) {
262
- throw new Error(`Project path not found: ${projectPath}`);
263
- }
264
- const manager = packageManagers[packageManager];
265
- let installCommand = manager.installCommand.replace("{{dependency}}", dependencies.join(" "));
266
- if (workspace) {
267
- installCommand += ` ${manager.workspaceOption}`;
268
- }
269
- const commandOptions = { cwd: projectPath };
270
- execSync(installCommand, {
271
- stdio: "inherit",
272
- ...commandOptions,
273
- });
274
- }
275
- export const createGlobalProject = async (projectName, options = {}) => {
276
- // check if the global project already exists
277
- const globalProjectExists = fs.existsSync(POWERHOUSE_GLOBAL_DIR);
278
- if (globalProjectExists) {
279
- console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);
280
- return;
281
- }
282
- console.log("📦 Initializing global project...");
283
- process.chdir(HOME_DIR);
284
- try {
285
- await createProject({
286
- name: PH_GLOBAL_PROJECT_NAME,
287
- interactive: false,
288
- version: parseVersion(options),
289
- packageManager: resolvePackageManagerOptions(options) ??
290
- getPackageManagerFromPath(PH_BIN_PATH),
291
- });
292
- console.log(`🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`);
293
- }
294
- catch (error) {
295
- console.error("❌ Failed to initialize the global project", error);
296
- }
297
- };
298
- /**
299
- * Helper to handle help flag detection for commands
300
- * This centralizes the pattern of checking for help flags and showing command-specific help
301
- *
302
- * @param command - The Command instance
303
- * @param actionFn - The original action function to call if help is not requested
304
- * @returns A wrapped action function
305
- */
306
- export function withHelpHandler(command, actionFn) {
307
- return (...args) => {
308
- // Check if help was requested
309
- const rawArgs = process.argv;
310
- const isHelpRequested = rawArgs.includes("--help") || rawArgs.includes("-h");
311
- // If help was explicitly requested, show the help and exit
312
- if (isHelpRequested) {
313
- command.outputHelp();
314
- process.exit(0);
315
- }
316
- // Otherwise, run the original action
317
- return actionFn(...args);
318
- };
319
- }
320
- /**
321
- * Simplified utility to connect a command with an action function that includes help handling
322
- * This reduces boilerplate in command files by automatically setting up the action with help handling
323
- *
324
- * @param command - The Command instance
325
- * @param actionFn - The action function to call when the command is executed
326
- * @param preCheck - Optional validation function that runs before the action
327
- * @returns The command for chaining
328
- */
329
- export function withHelpAction(command, actionFn, preCheck) {
330
- command.action(withHelpHandler(command, (...args) => {
331
- // If there's a pre-check function, run it before the action
332
- if (preCheck) {
333
- const result = preCheck(...args);
334
- // If the pre-check returns false explicitly, don't run the action
335
- if (result === false)
336
- return;
337
- }
338
- return actionFn(...args);
339
- }));
340
- return command;
341
- }
342
- /**
343
- * Enhanced version of withHelpAction that allows custom help text without duplication
344
- *
345
- * @param command - The Command instance
346
- * @param actionFn - The action function to call when the command is executed
347
- * @param helpText - The custom help text to display (replacing the auto-generated help)
348
- * @param preCheck - Optional validation function that runs before the action
349
- * @returns The command for chaining
350
- */
351
- export function withCustomHelp(command, actionFn, helpText, preCheck) {
352
- // Clear any existing help text
353
- command.helpInformation = function () {
354
- const name = command.name();
355
- const args = command.usage();
356
- const description = command.description();
357
- // Create a minimal header
358
- let header = `\nUsage: ph ${name}`;
359
- if (args)
360
- header += ` ${args}`;
361
- if (description)
362
- header += `\n\n${description}\n`;
363
- // Return the custom help text
364
- return header + "\n" + helpText;
365
- };
366
- // Add help action handler
367
- return withHelpAction(command, actionFn, preCheck);
368
- }
5
+ export * from "./help.js";
6
+ export * from "./package-manager.js";
369
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM;IACN,KAAK;IACL,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,MAAM;IACN,SAAS;IACT,KAAK;IACL,GAAG;IACH,QAAQ;IACR,WAAW;IACX,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAC5C,QAAQ,EACR,sBAAsB,CACvB,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,OAK5C;IACC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE;QACH,cAAc,EAAE,wBAAwB;QACxC,WAAW,EAAE,OAAO,MAAM,gBAAgB;QAC1C,UAAU,EAAE,mBAAmB;QAC/B,QAAQ,EAAE,UAAU;QACpB,gBAAgB,EAAE,gBAAgB;QAClC,aAAa,EAAE,2BAA2B;QAC1C,aAAa,EAAE,wBAAwB;QACvC,eAAe,EAAE,EAAE;QACnB,kBAAkB,EAAE,aAAa;KAClC;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,aAAa,MAAM,gBAAgB;QAChD,UAAU,EAAE,oBAAoB;QAChC,QAAQ,EAAE,gBAAgB;QAC1B,gBAAgB,EAAE,gBAAgB;QAClC,aAAa,EAAE,4BAA4B;QAC3C,aAAa,EAAE,yBAAyB;QACxC,eAAe,EAAE,kBAAkB;QACnC,kBAAkB,EAAE,cAAc;KACnC;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,QAAQ,MAAM,gBAAgB;QAC3C,UAAU,EAAE,oBAAoB;QAChC,QAAQ,EAAE,WAAW;QACrB,gBAAgB,EAAE,gBAAgB;QAClC,aAAa,EAAE,6BAA6B;QAC5C,aAAa,EAAE,yBAAyB;QACxC,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,cAAc;KACnC;IACD,GAAG,EAAE;QACH,cAAc,EAAE,4BAA4B;QAC5C,WAAW,EAAE,OAAO,MAAM,gBAAgB;QAC1C,UAAU,EAAE,uBAAuB;QACnC,QAAQ,EAAE,mBAAmB;QAC7B,aAAa,EAAE,kCAAkC;QACjD,aAAa,EAAE,wBAAwB;QACvC,eAAe,EAAE,EAAE;QACnB,kBAAkB,EAAE,aAAa;KAClC;CACO,CAAC;AAYX,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAEpE,OAAO,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,iBAAiC,qBAAqB;IAEtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEvD,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAExC,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAe,EACf,qBAAqB,GAAG,IAAI;IAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAErD,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,mBAAmB,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,OAAO;YACL,SAAS;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,qBAAqB;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,cAA8B,EAC9B,WAAmB,EACnB,IAAY,EACZ,KAAe,EACf,aAAa,GAAG,KAAK;IAErB,MAAM,OAAO,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,+BAA+B;QAC/B,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,WAAW,EAAE;gBAC3B,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,MAAM;gBAChB,GAAG,cAAc;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,WAAW,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,QAAQ,CAAC,WAAW,EAAE;YACpB,KAAK,EAAE,SAAS;YAChB,GAAG,cAAc;SAClB,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,SAAiB,EACjB,UAAkB,EACH,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,uDAAuD;IACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC,CAAC;AAQF,SAAS,qBAAqB,CAAC,UAAkB;IAI/C,qDAAqD;IACrD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,2CAA2C;QAC3C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAElD,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,OAAO,IAAI,QAAQ;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,cAA8B,EAC9B,YAAsB,EACtB,WAAmB;IAEnB,MAAM,OAAO,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEhD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAC1B,CAAC;IAEjB,kEAAkE;IAClE,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;IAC1D,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;IAEhE,iCAAiC;IACjC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAE5D,wEAAwE;QACxE,IAAI,IAAI,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YACrC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAC/C,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,EAAE,CAAC,aAAa,CACd,eAAe,EACf,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,MAAM,CACP,CAAC;IAEF,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACtD,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAE5C,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,KAAK,EAAE,SAAS;QAChB,GAAG,cAAc;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,cAA8B,EAC9B,YAAsB,EACtB,WAAmB,EACnB,SAAmB;IAEnB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEhD,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CACjD,gBAAgB,EAChB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CACvB,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAE5C,QAAQ,CAAC,cAAc,EAAE;QACvB,KAAK,EAAE,SAAS;QAChB,GAAG,cAAc;KAClB,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,WAAoB,EACpB,UAAgC,EAAE,EAClC,EAAE;IACF,6CAA6C;IAC7C,MAAM,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAEjE,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,4BAA4B,qBAAqB,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAExB,IAAI,CAAC;QACH,MAAM,aAAa,CAAC;YAClB,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;YAC9B,cAAc,EACZ,4BAA4B,CAAC,OAAO,CAAC;gBACrC,yBAAyB,CAAC,WAAW,CAAC;SACzC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,+CAA+C,qBAAqB,EAAE,CACvE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,QAA8C;IAE9C,OAAO,CAAC,GAAG,IAAO,EAAE,EAAE;QACpB,8BAA8B;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,MAAM,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvD,2DAA2D;QAC3D,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qCAAqC;QACrC,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,QAA8C,EAC9C,QAA8C;IAE9C,OAAO,CAAC,MAAM,CACZ,eAAe,CAAI,OAAO,EAAE,CAAC,GAAG,IAAO,EAAE,EAAE;QACzC,4DAA4D;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,kEAAkE;YAClE,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO;QAC/B,CAAC;QAED,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,QAA8C,EAC9C,QAAgB,EAChB,QAA8C;IAE9C,+BAA+B;IAC/B,OAAO,CAAC,eAAe,GAAG;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE1C,0BAA0B;QAC1B,IAAI,MAAM,GAAG,eAAe,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI;YAAE,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,WAAW;YAAE,MAAM,IAAI,OAAO,WAAW,IAAI,CAAC;QAElD,8BAA8B;QAC9B,OAAO,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IAClC,CAAC,CAAC;IAEF,0BAA0B;IAC1B,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { PackageManager, PathValidation, ProjectInfo } from "./types.js";
2
+ export declare function resolvePackageManagerOptions(options: {
3
+ packageManager?: string;
4
+ npm?: boolean;
5
+ pnpm?: boolean;
6
+ yarn?: boolean;
7
+ bun?: boolean;
8
+ }): string | undefined;
9
+ export declare function defaultPathValidation(): boolean;
10
+ export declare function isPowerhouseProject(dir: string): boolean;
11
+ export declare function findNodeProjectRoot(dir: string, pathValidation?: PathValidation): string | null;
12
+ export declare function getPackageManagerFromPath(dir: string): PackageManager;
13
+ export declare function getPackageManagerFromLockfile(dir: string): PackageManager;
14
+ export declare function getProjectInfo(debug?: boolean, generateGlobalProject?: boolean): Promise<ProjectInfo>;
15
+ export declare function forwardPHCommand(packageManager: PackageManager, projectPath: string, args: string, debug?: boolean, captureOutput?: boolean): string;
16
+ /**
17
+ * Recursively searches for a specific file by traversing up the directory tree.
18
+ * Starting from the given path, it checks each parent directory until it finds
19
+ * the target file or reaches the root directory.
20
+ *
21
+ * @param startPath - The absolute path of the directory to start searching from
22
+ * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')
23
+ * @returns The absolute path of the directory containing the target file, or null if not found
24
+ *
25
+ * @example
26
+ * // Find the workspace root directory
27
+ * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');
28
+ *
29
+ * // Find the nearest package.json
30
+ * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');
31
+ */
32
+ export declare const findContainerDirectory: (startPath: string, targetFile: string) => string | null;
33
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,sBAsBA;AAED,wBAAgB,qBAAqB,YAEpC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,WAI9C;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,cAAsC,iBAevD;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYrE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAUzE;AAED,wBAAsB,cAAc,CAClC,KAAK,CAAC,EAAE,OAAO,EACf,qBAAqB,UAAO,GAC3B,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,EACf,aAAa,UAAQ,UAoCtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,GACjC,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,MAAM,GAAG,IAeX,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import path, { dirname } from "node:path";
4
+ import { POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, packageManagers, } from "./constants.js";
5
+ import { createGlobalProject } from "./create-global-project.js";
6
+ export function resolvePackageManagerOptions(options) {
7
+ if (options.packageManager) {
8
+ return options.packageManager;
9
+ }
10
+ if (options.npm) {
11
+ return "npm";
12
+ }
13
+ if (options.pnpm) {
14
+ return "pnpm";
15
+ }
16
+ if (options.yarn) {
17
+ return "yarn";
18
+ }
19
+ if (options.bun) {
20
+ return "bun";
21
+ }
22
+ return undefined;
23
+ }
24
+ export function defaultPathValidation() {
25
+ return true;
26
+ }
27
+ export function isPowerhouseProject(dir) {
28
+ const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);
29
+ return existsSync(powerhouseConfigPath);
30
+ }
31
+ export function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
32
+ const packageJsonPath = path.join(dir, "package.json");
33
+ if (existsSync(packageJsonPath) && pathValidation(dir)) {
34
+ return dir;
35
+ }
36
+ const parentDir = dirname(dir);
37
+ if (parentDir === dir) {
38
+ return null;
39
+ }
40
+ return findNodeProjectRoot(parentDir, pathValidation);
41
+ }
42
+ export function getPackageManagerFromPath(dir) {
43
+ const lowerCasePath = dir.toLowerCase();
44
+ if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {
45
+ return "bun";
46
+ }
47
+ else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {
48
+ return "pnpm";
49
+ }
50
+ else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {
51
+ return "yarn";
52
+ }
53
+ return "npm";
54
+ }
55
+ export function getPackageManagerFromLockfile(dir) {
56
+ if (existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {
57
+ return "pnpm";
58
+ }
59
+ else if (existsSync(path.join(dir, packageManagers.yarn.lockfile))) {
60
+ return "yarn";
61
+ }
62
+ else if (existsSync(path.join(dir, packageManagers.bun.lockfile))) {
63
+ return "bun";
64
+ }
65
+ return "npm";
66
+ }
67
+ export async function getProjectInfo(debug, generateGlobalProject = true) {
68
+ const currentPath = process.cwd();
69
+ if (debug) {
70
+ console.log(">>> currentPath:", currentPath);
71
+ }
72
+ const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);
73
+ if (!projectPath) {
74
+ let available = existsSync(POWERHOUSE_GLOBAL_DIR);
75
+ if (generateGlobalProject) {
76
+ await createGlobalProject();
77
+ available = true;
78
+ }
79
+ return {
80
+ available,
81
+ isGlobal: true,
82
+ path: POWERHOUSE_GLOBAL_DIR,
83
+ };
84
+ }
85
+ return {
86
+ isGlobal: false,
87
+ available: true,
88
+ path: projectPath,
89
+ };
90
+ }
91
+ export function forwardPHCommand(packageManager, projectPath, args, debug, captureOutput = false) {
92
+ const manager = packageManagers[packageManager];
93
+ const command = manager.execCommand;
94
+ const execCommand = command.replace("{{arguments}}", args);
95
+ const commandOptions = { cwd: projectPath };
96
+ if (debug) {
97
+ console.log(">>> execCommand:", execCommand);
98
+ console.log(">>> commandOptions:", commandOptions);
99
+ console.log(">>> projectPath:", projectPath);
100
+ console.log(">>> packageManager:", packageManager);
101
+ }
102
+ if (captureOutput) {
103
+ // Capture output and return it
104
+ try {
105
+ return execSync(execCommand, {
106
+ stdio: "pipe",
107
+ encoding: "utf8",
108
+ ...commandOptions,
109
+ });
110
+ }
111
+ catch (error) {
112
+ throw new Error(`Failed to execute command: ${execCommand}\nError: ${error instanceof Error ? error.message : String(error)}`);
113
+ }
114
+ }
115
+ else {
116
+ // Original behavior - pipe directly to stdout/stderr
117
+ execSync(execCommand, {
118
+ stdio: "inherit",
119
+ ...commandOptions,
120
+ });
121
+ return "";
122
+ }
123
+ }
124
+ /**
125
+ * Recursively searches for a specific file by traversing up the directory tree.
126
+ * Starting from the given path, it checks each parent directory until it finds
127
+ * the target file or reaches the root directory.
128
+ *
129
+ * @param startPath - The absolute path of the directory to start searching from
130
+ * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')
131
+ * @returns The absolute path of the directory containing the target file, or null if not found
132
+ *
133
+ * @example
134
+ * // Find the workspace root directory
135
+ * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');
136
+ *
137
+ * // Find the nearest package.json
138
+ * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');
139
+ */
140
+ export const findContainerDirectory = (startPath, targetFile) => {
141
+ const filePath = path.join(startPath, targetFile);
142
+ if (existsSync(filePath)) {
143
+ return startPath;
144
+ }
145
+ const parentDir = path.dirname(startPath);
146
+ //reached the root directory and haven't found the file
147
+ if (parentDir === startPath) {
148
+ return null;
149
+ }
150
+ return findContainerDirectory(parentDir, targetFile);
151
+ };
152
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type ProjectInfo = {
2
+ isGlobal: boolean;
3
+ available: boolean;
4
+ path: string;
5
+ };
6
+ export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
7
+ export type PathValidation = (dir: string) => boolean;
8
+ export interface PackageJson {
9
+ dependencies?: Record<string, string>;
10
+ devDependencies?: Record<string, string>;
11
+ [key: string]: unknown;
12
+ }
13
+ export type GlobalProjectOptions = {
14
+ project?: string;
15
+ interactive?: boolean;
16
+ version?: string;
17
+ dev?: boolean;
18
+ staging?: boolean;
19
+ packageManager?: string;
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":""}