ph-cmd 6.2.2 → 6.2.3-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +3 -3
- package/dist/{delegate-init-B3_b7484.mjs → delegate-init-CGpBcDwe.mjs} +3 -3
- package/dist/{delegate-init-B3_b7484.mjs.map → delegate-init-CGpBcDwe.mjs.map} +1 -1
- package/dist/delegate-init-DPz_LBCQ.mjs +4 -0
- package/dist/{get-version-RELqNmaI.mjs → get-version-Bxtapiq5.mjs} +4 -4
- package/dist/{get-version-RELqNmaI.mjs.map → get-version-Bxtapiq5.mjs.map} +1 -1
- package/dist/{ph-cli-DPCUrxg1.mjs → ph-cli-DwyaWW70.mjs} +4 -4
- package/dist/{ph-cli-DPCUrxg1.mjs.map → ph-cli-DwyaWW70.mjs.map} +1 -1
- package/dist/{run-BTuue8EB.mjs → run-C0dHDeMT.mjs} +27 -13
- package/dist/run-C0dHDeMT.mjs.map +1 -0
- package/dist/update-packages-C5uE2aoa.mjs +141 -0
- package/dist/update-packages-C5uE2aoa.mjs.map +1 -0
- package/package.json +3 -3
- package/dist/delegate-init-4NaG2HDm.mjs +0 -4
- package/dist/run-BTuue8EB.mjs.map +0 -1
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1b86dd82-6b93-5626-9454-0799daf0f315")}catch(e){}}();
|
|
4
|
-
import { t as getVersion } from "./get-version-
|
|
4
|
+
import { t as getVersion } from "./get-version-Bxtapiq5.mjs";
|
|
5
5
|
import { phCliCommandNames } from "@powerhousedao/shared/clis/command-names";
|
|
6
6
|
import { initCliTelemetry } from "@powerhousedao/shared/clis/telemetry";
|
|
7
7
|
import { assertNodeVersion } from "@powerhousedao/shared/clis/utils";
|
|
@@ -17,11 +17,11 @@ function detectPackageManager() {
|
|
|
17
17
|
* any code is parsed to avoid errors on startup due to unsupported dependencies.
|
|
18
18
|
*/
|
|
19
19
|
async function runPhCliCommand(phCliCommand) {
|
|
20
|
-
const { executePhCliCommand } = await import("./ph-cli-
|
|
20
|
+
const { executePhCliCommand } = await import("./ph-cli-DwyaWW70.mjs");
|
|
21
21
|
return await executePhCliCommand(phCliCommand);
|
|
22
22
|
}
|
|
23
23
|
async function runPhCmdCommand(args) {
|
|
24
|
-
const { run } = await import("./run-
|
|
24
|
+
const { run } = await import("./run-C0dHDeMT.mjs");
|
|
25
25
|
return await run(args);
|
|
26
26
|
}
|
|
27
27
|
let sentryClient = void 0;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="120e0aef-6971-562c-b6fa-d356930e55f7")}catch(e){}}();
|
|
3
3
|
import { execSync } from "node:child_process";
|
|
4
4
|
//#region src/utils/delegate-init.ts
|
|
5
5
|
const PH_CLI_PACKAGE = "@powerhousedao/ph-cli";
|
|
@@ -69,5 +69,5 @@ async function delegateInit(args, extraForwardedArgs = []) {
|
|
|
69
69
|
//#endregion
|
|
70
70
|
export { delegateInit as t };
|
|
71
71
|
|
|
72
|
-
//# sourceMappingURL=delegate-init-
|
|
73
|
-
//# debugId=
|
|
72
|
+
//# sourceMappingURL=delegate-init-CGpBcDwe.mjs.map
|
|
73
|
+
//# debugId=120e0aef-6971-562c-b6fa-d356930e55f7
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate-init-
|
|
1
|
+
{"version":3,"file":"delegate-init-CGpBcDwe.mjs","sources":["../src/utils/delegate-init.ts"],"sourcesContent":["import type { Agent } from \"package-manager-detector\";\nimport { execSync } from \"node:child_process\";\n\nconst PH_CLI_PACKAGE = \"@powerhousedao/ph-cli\";\n// `init` was added to ph-cli in the 6.x rewrite. Older versions (still on\n// the `latest` tag at time of writing) shell out via commander and bail with\n// a confusing \"unknown command 'init'\" error after a 90-second dlx install.\n// This floor lets us fail fast with an actionable message instead.\nconst MIN_PH_CLI_MAJOR = 6;\n\n/**\n * Subset of `initArgs` the delegator actually inspects. Keeping this loose\n * lets `setup-globals` reuse the helper without an extra type import dance.\n */\nexport interface DelegateInitArgs {\n packageManager?: Agent;\n npm?: boolean;\n pnpm?: boolean;\n yarn?: boolean;\n bun?: boolean;\n tag?: string;\n version?: string;\n dev?: boolean;\n staging?: boolean;\n rc?: boolean;\n debug?: boolean;\n}\n\n/**\n * Resolves a concrete `@powerhousedao/ph-cli` version, verifies it's >= 6.x,\n * and shells out via the user's package manager (npx / pnpm dlx / etc.) to\n * run `ph-cli init`. Used by both `ph init` (forwards verbatim) and\n * `ph setup-globals` (forwards with `--name .ph` injected after chdir to ~).\n *\n * Does NOT call `process.exit`: callers are responsible for any post-init\n * fix-up + exit.\n */\nexport async function delegateInit(\n args: DelegateInitArgs,\n extraForwardedArgs: string[] = [],\n): Promise<void> {\n const {\n fetchNpmVersionFromRegistryForTag,\n handleMutuallyExclusiveOptions,\n parsePackageManager,\n parseTag,\n } = await import(\"@powerhousedao/shared/clis\");\n\n handleMutuallyExclusiveOptions(\n {\n tag: args.tag,\n version: args.version,\n dev: args.dev,\n staging: args.staging,\n rc: args.rc,\n },\n \"versioning strategy\",\n );\n\n handleMutuallyExclusiveOptions(\n {\n npm: args.npm,\n pnpm: args.pnpm,\n yarn: args.yarn,\n bun: args.bun,\n packageManager: args.packageManager,\n },\n \"package manager\",\n );\n\n const tag = parseTag(args);\n const phCliVersionOrTag = args.version ?? tag;\n const pm = parsePackageManager(args) ?? \"npm\";\n // `process.argv` here is `[node, ph-cmd-bin, <subcommand>, ...userArgs]`.\n // Forward everything from the user, prepending caller-supplied flags.\n const forwardedArgs = [...extraForwardedArgs, ...process.argv.slice(3)];\n\n // Resolve the tag to a concrete version up front and verify it's >= 6.x.\n // `--version` is user-supplied so we trust it and only resolve when a tag\n // (latest/staging/dev) is in play.\n let resolvedVersion = args.version;\n try {\n if (!resolvedVersion) {\n resolvedVersion = await fetchNpmVersionFromRegistryForTag(\n PH_CLI_PACKAGE,\n tag,\n );\n }\n } catch (err) {\n // Network/registry hiccup — fall through to the dlx so a flaky\n // connection doesn't block the user. The dlx will surface its own\n // error if the version genuinely can't be installed.\n if (args.debug) {\n console.error(\">>> ph-cli version resolution skipped:\", err);\n }\n }\n const { coerce } = await import(\"semver\");\n const parsed = resolvedVersion ? coerce(resolvedVersion) : null;\n if (parsed && parsed.major < MIN_PH_CLI_MAJOR) {\n // Print + exit (rather than throw) to avoid the cli.ts catch handler\n // shipping this expected user-input error to Sentry.\n console.error(\n `${PH_CLI_PACKAGE}@${phCliVersionOrTag} resolves to ${resolvedVersion}, ` +\n `which doesn't support 'init' (requires >= ${MIN_PH_CLI_MAJOR}.0.0).\\n` +\n `Try: ph init --dev <args> or ph init --version <${MIN_PH_CLI_MAJOR}.x.x> <args>`,\n );\n process.exit(1);\n }\n\n const phCliPackage = `${PH_CLI_PACKAGE}@${resolvedVersion ?? phCliVersionOrTag}`;\n const { resolveCommand } = await import(\"package-manager-detector\");\n const resolved = resolveCommand(pm, \"execute\", [\n phCliPackage,\n \"init\",\n ...forwardedArgs,\n ]);\n\n if (!resolved) {\n throw new Error(\n `Could not resolve execute command for package manager \"${pm}\".`,\n );\n }\n\n const { injectPnpmAllowBuilds } = await import(\"@powerhousedao/shared/clis\");\n injectPnpmAllowBuilds(pm, resolved);\n\n const { command: cmd, args: cmdArgs } = resolved;\n const fullCmd = `${cmd} ${cmdArgs.join(\" \")}`;\n\n if (args.debug) {\n console.log(\">>> Delegating to ph-cli:\", fullCmd);\n }\n\n try {\n execSync(fullCmd, { stdio: \"inherit\" });\n } catch (err) {\n // Propagate normal non-zero exits but throw on abnormal exits to ensure\n // the error is reported.\n const e = err as {\n status?: number | null;\n signal?: NodeJS.Signals | null;\n };\n if (typeof e.status === \"number\" && !e.signal) {\n process.exit(e.status);\n }\n throw err;\n }\n}\n"],"names":[],"mappings":";;;;AAGA,MAAM,iBAAiB;AAKvB,MAAM,mBAAmB;;;;;;;;;;AA6BzB,eAAsB,aACpB,MACA,qBAA+B,EAAE,EAClB;CACf,MAAM,EACJ,mCACA,gCACA,qBACA,aACE,MAAM,OAAO;AAEjB,gCACE;EACE,KAAK,KAAK;EACV,SAAS,KAAK;EACd,KAAK,KAAK;EACV,SAAS,KAAK;EACd,IAAI,KAAK;EACV,EACD,sBACD;AAED,gCACE;EACE,KAAK,KAAK;EACV,MAAM,KAAK;EACX,MAAM,KAAK;EACX,KAAK,KAAK;EACV,gBAAgB,KAAK;EACtB,EACD,kBACD;CAED,MAAM,MAAM,SAAS,KAAK;CAC1B,MAAM,oBAAoB,KAAK,WAAW;CAC1C,MAAM,KAAK,oBAAoB,KAAK,IAAI;CAGxC,MAAM,gBAAgB,CAAC,GAAG,oBAAoB,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC;CAKvE,IAAI,kBAAkB,KAAK;AAC3B,KAAI;AACF,MAAI,CAAC,gBACH,mBAAkB,MAAM,kCACtB,gBACA,IACD;UAEI,KAAK;AAIZ,MAAI,KAAK,MACP,SAAQ,MAAM,0CAA0C,IAAI;;CAGhE,MAAM,EAAE,WAAW,MAAM,OAAO;CAChC,MAAM,SAAS,kBAAkB,OAAO,gBAAgB,GAAG;AAC3D,KAAI,UAAU,OAAO,QAAQ,kBAAkB;AAG7C,UAAQ,MACN,GAAG,eAAe,GAAG,kBAAkB,eAAe,gBAAgB,8CACvB,iBAAiB,+DACN,iBAAiB,cAC5E;AACD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,eAAe,GAAG,eAAe,GAAG,mBAAmB;CAC7D,MAAM,EAAE,mBAAmB,MAAM,OAAO;CACxC,MAAM,WAAW,eAAe,IAAI,WAAW;EAC7C;EACA;EACA,GAAG;EACJ,CAAC;AAEF,KAAI,CAAC,SACH,OAAM,IAAI,MACR,0DAA0D,GAAG,IAC9D;CAGH,MAAM,EAAE,0BAA0B,MAAM,OAAO;AAC/C,uBAAsB,IAAI,SAAS;CAEnC,MAAM,EAAE,SAAS,KAAK,MAAM,YAAY;CACxC,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,KAAK,IAAI;AAE3C,KAAI,KAAK,MACP,SAAQ,IAAI,6BAA6B,QAAQ;AAGnD,KAAI;AACF,WAAS,SAAS,EAAE,OAAO,WAAW,CAAC;UAChC,KAAK;EAGZ,MAAM,IAAI;AAIV,MAAI,OAAO,EAAE,WAAW,YAAY,CAAC,EAAE,OACrC,SAAQ,KAAK,EAAE,OAAO;AAExB,QAAM","debug_id":"120e0aef-6971-562c-b6fa-d356930e55f7"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { t as delegateInit } from "./delegate-init-CGpBcDwe.mjs";
|
|
2
|
+
export { delegateInit };
|
|
3
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f8902dca-8224-54b1-953d-5ab70d2effbf")}catch(e){}}();
|
|
4
|
+
//# debugId=f8902dca-8224-54b1-953d-5ab70d2effbf
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* `bun run scripts/generate-commands-docs.ts` or `bun run src/cli.ts`).
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
8
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="10d34da2-17c1-5183-8a87-3b50289477a4")}catch(e){}}();
|
|
9
9
|
function getVersion() {
|
|
10
|
-
return "6.2.
|
|
10
|
+
return "6.2.3-dev.1";
|
|
11
11
|
}
|
|
12
12
|
//#endregion
|
|
13
13
|
export { getVersion as t };
|
|
14
14
|
|
|
15
|
-
//# sourceMappingURL=get-version-
|
|
16
|
-
//# debugId=
|
|
15
|
+
//# sourceMappingURL=get-version-Bxtapiq5.mjs.map
|
|
16
|
+
//# debugId=10d34da2-17c1-5183-8a87-3b50289477a4
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-version-
|
|
1
|
+
{"version":3,"file":"get-version-Bxtapiq5.mjs","sources":["../src/get-version.ts"],"sourcesContent":["declare const CLI_VERSION: string | undefined;\ndeclare const CLI_GIT_SHA: string | undefined;\n\n/**\n * Returns the CLI version string. Replaced inline by tsdown's `define` at\n * build time; falls back to env vars when running un-bundled (e.g. via\n * `bun run scripts/generate-commands-docs.ts` or `bun run src/cli.ts`).\n */\nexport function getVersion() {\n if (typeof CLI_VERSION !== \"undefined\") return CLI_VERSION;\n return (\n process.env.WORKSPACE_VERSION ||\n process.env.npm_package_version ||\n \"unknown\"\n );\n}\n\nexport function getGitHash() {\n if (typeof CLI_GIT_SHA !== \"undefined\") return CLI_GIT_SHA;\n return process.env.WORKSPACE_GIT_SHA || \"unknown\";\n}\n"],"names":[],"mappings":";;;;;;;;AAQA,SAAgB,aAAa;AACa,QAAA","debug_id":"10d34da2-17c1-5183-8a87-3b50289477a4"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
-
import { t as getVersion } from "./get-version-
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bc46ed3a-b503-5340-8e80-afe267d10d18")}catch(e){}}();
|
|
3
|
+
import { t as getVersion } from "./get-version-Bxtapiq5.mjs";
|
|
4
4
|
import { getPowerhouseProjectInfo } from "@powerhousedao/shared/clis";
|
|
5
5
|
import spawn from "cross-spawn";
|
|
6
6
|
import { resolveCommand } from "package-manager-detector";
|
|
@@ -40,5 +40,5 @@ async function executePhCliCommand(phCliCommand) {
|
|
|
40
40
|
//#endregion
|
|
41
41
|
export { executePhCliCommand };
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=ph-cli-
|
|
44
|
-
//# debugId=
|
|
43
|
+
//# sourceMappingURL=ph-cli-DwyaWW70.mjs.map
|
|
44
|
+
//# debugId=bc46ed3a-b503-5340-8e80-afe267d10d18
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ph-cli-
|
|
1
|
+
{"version":3,"file":"ph-cli-DwyaWW70.mjs","sources":["../src/ph-cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { getPowerhouseProjectInfo } from \"@powerhousedao/shared/clis\";\nimport spawn from \"cross-spawn\";\nimport { resolveCommand } from \"package-manager-detector\";\nimport { getVersion } from \"./get-version.js\";\n\nconst PH_CLI_PACKAGE = \"@powerhousedao/ph-cli\";\n\n// Auth/identity commands write global state (~/.renown.json, ~/.npmrc), not a\n// project, so they run outside a project via dlx when no ph-cli is installed.\nconst PROJECT_OPTIONAL_COMMANDS = new Set([\n \"login\",\n \"logout\",\n \"registry-login\",\n]);\n\nexport async function executePhCliCommand(phCliCommand: string) {\n const forwardedArgs = process.argv.slice(3);\n const { projectPath, packageManager } = await getPowerhouseProjectInfo(\n undefined,\n { silent: true },\n );\n\n if (!projectPath && !PROJECT_OPTIONAL_COMMANDS.has(phCliCommand)) {\n throw new Error(\n `No Powerhouse project directory found, cannot run \\`ph ${phCliCommand}\\`.\\nTo create a local project, run \\`ph init\\`.\\nTo create a global project, run \\`ph setup-globals\\`.`,\n );\n }\n\n // In a project run the installed binary; otherwise dlx ph-cli pinned to this\n // ph-cmd version, falling back to `latest` when the version is unknown.\n const version = getVersion();\n const phCliTarget = projectPath\n ? \"ph-cli\"\n : `${PH_CLI_PACKAGE}@${version === \"unknown\" ? \"latest\" : version}`;\n const action = projectPath ? \"execute-local\" : \"execute\";\n\n const resolved = resolveCommand(packageManager, action, [\n phCliTarget,\n phCliCommand,\n ...forwardedArgs,\n ]);\n if (!resolved) {\n throw new Error(\n `Could not resolve a \"${action}\" command for package manager \"${packageManager}\" to run ph-cli. Supported package managers: npm, pnpm, yarn, bun.`,\n );\n }\n\n if (!projectPath) {\n const { injectPnpmAllowBuilds } =\n await import(\"@powerhousedao/shared/clis\");\n injectPnpmAllowBuilds(packageManager, resolved);\n }\n\n const { command, args } = resolved;\n // spawn (not a shell-joined string) so args with shell metacharacters — e.g.\n // `connect build --json '{\"a\":\"b\"}'` — survive intact. cross-spawn keeps that\n // guarantee on Windows too: `command` here is an npx/pnpm/yarn `.cmd` shim,\n // which node:child_process refuses to run without `shell: true` (spawn\n // EINVAL), and `shell: true` is exactly what would break those arguments.\n const result = spawn.sync(command, args, {\n stdio: \"inherit\",\n cwd: projectPath ?? process.cwd(),\n });\n if (result.error) throw result.error;\n if (result.signal) {\n throw new Error(`${command} terminated by signal ${result.signal}`);\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n process.exit(result.status);\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,MAAM,iBAAiB;AAIvB,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;CACD,CAAC;AAEF,eAAsB,oBAAoB,cAAsB;CAC9D,MAAM,gBAAgB,QAAQ,KAAK,MAAM,EAAE;CAC3C,MAAM,EAAE,aAAa,mBAAmB,MAAM,yBAC5C,KAAA,GACA,EAAE,QAAQ,MAAM,CACjB;AAED,KAAI,CAAC,eAAe,CAAC,0BAA0B,IAAI,aAAa,CAC9D,OAAM,IAAI,MACR,0DAA0D,aAAa,yGACxE;CAKH,MAAM,UAAU,YAAY;CAC5B,MAAM,cAAc,cAChB,WACA,GAAG,eAAe,GAAG,YAAY,YAAY,WAAW;CAC5D,MAAM,SAAS,cAAc,kBAAkB;CAE/C,MAAM,WAAW,eAAe,gBAAgB,QAAQ;EACtD;EACA;EACA,GAAG;EACJ,CAAC;AACF,KAAI,CAAC,SACH,OAAM,IAAI,MACR,wBAAwB,OAAO,iCAAiC,eAAe,oEAChF;AAGH,KAAI,CAAC,aAAa;EAChB,MAAM,EAAE,0BACN,MAAM,OAAO;AACf,wBAAsB,gBAAgB,SAAS;;CAGjD,MAAM,EAAE,SAAS,SAAS;CAM1B,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM;EACvC,OAAO;EACP,KAAK,eAAe,QAAQ,KAAK;EAClC,CAAC;AACF,KAAI,OAAO,MAAO,OAAM,OAAO;AAC/B,KAAI,OAAO,OACT,OAAM,IAAI,MAAM,GAAG,QAAQ,wBAAwB,OAAO,SAAS;AAErE,KAAI,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW,EACzD,SAAQ,KAAK,OAAO,OAAO","debug_id":"bc46ed3a-b503-5340-8e80-afe267d10d18"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
-
import { t as getVersion } from "./get-version-
|
|
4
|
-
import { t as delegateInit } from "./delegate-init-
|
|
5
|
-
import { boolean, command, flag, oneOf, option, optional, positional, run as run$1, string, subcommands } from "cmd-ts";
|
|
6
|
-
import { debugArgs, initArgs, phCliHelpCommands } from "@powerhousedao/shared/clis/args";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4e867ab2-f396-59cf-b416-30847523c980")}catch(e){}}();
|
|
3
|
+
import { t as getVersion } from "./get-version-Bxtapiq5.mjs";
|
|
4
|
+
import { t as delegateInit } from "./delegate-init-CGpBcDwe.mjs";
|
|
7
5
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
8
6
|
import path from "node:path";
|
|
7
|
+
import { boolean, command, flag, oneOf, option, optional, positional, run as run$1, string, subcommands } from "cmd-ts";
|
|
8
|
+
import { debugArgs, initArgs, phCliHelpCommands } from "@powerhousedao/shared/clis/args";
|
|
9
9
|
import { ALL_POWERHOUSE_DEPENDENCIES } from "@powerhousedao/shared/constants";
|
|
10
10
|
//#region src/commands/init.ts
|
|
11
11
|
/**
|
|
@@ -63,7 +63,7 @@ const setupGlobals = command({
|
|
|
63
63
|
}
|
|
64
64
|
console.log("📦 Initializing global project...");
|
|
65
65
|
process.chdir(HOME_DIR);
|
|
66
|
-
const { delegateInit } = await import("./delegate-init-
|
|
66
|
+
const { delegateInit } = await import("./delegate-init-DPz_LBCQ.mjs");
|
|
67
67
|
await delegateInit(args, ["--name", PH_GLOBAL_DIR_NAME]);
|
|
68
68
|
fixGlobalPackageName();
|
|
69
69
|
console.log(`🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`);
|
|
@@ -74,7 +74,7 @@ const setupGlobals = command({
|
|
|
74
74
|
//#region src/commands/update.ts
|
|
75
75
|
const update = command({
|
|
76
76
|
name: "update",
|
|
77
|
-
description: "Update your
|
|
77
|
+
description: "Update your Powerhouse dependencies and installed packages to their latest versions",
|
|
78
78
|
args: {
|
|
79
79
|
skipInstall: flag({
|
|
80
80
|
type: optional(boolean),
|
|
@@ -82,18 +82,26 @@ const update = command({
|
|
|
82
82
|
short: "s",
|
|
83
83
|
description: "Skip running `install` with your package manager"
|
|
84
84
|
}),
|
|
85
|
+
updatePackages: flag({
|
|
86
|
+
type: optional(boolean),
|
|
87
|
+
long: "update-packages",
|
|
88
|
+
description: "Auto-update installed packages (powerhouse.config.json) to their newest same-major version"
|
|
89
|
+
}),
|
|
85
90
|
...debugArgs
|
|
86
91
|
},
|
|
87
92
|
handler: async (args) => {
|
|
88
|
-
const { skipInstall, debug } = args;
|
|
93
|
+
const { skipInstall, updatePackages, debug } = args;
|
|
89
94
|
if (debug) console.log({ args });
|
|
90
95
|
console.log(`\n▶️ Updating Powerhouse dependencies...\n`);
|
|
91
|
-
const [{ default: chalk }, { readPackage }, { writePackage }, { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd }] = await Promise.all([
|
|
96
|
+
const [{ default: chalk }, { readPackage }, { writePackage }, { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd }, { resolveRegistryUrl }, { updateInstalledPackages }] = await Promise.all([
|
|
92
97
|
import("chalk"),
|
|
93
98
|
import("read-pkg"),
|
|
94
99
|
import("write-package"),
|
|
95
|
-
import("@powerhousedao/shared/clis")
|
|
100
|
+
import("@powerhousedao/shared/clis"),
|
|
101
|
+
import("@powerhousedao/shared/registry"),
|
|
102
|
+
import("./update-packages-C5uE2aoa.mjs")
|
|
96
103
|
]);
|
|
104
|
+
const registryUrl = resolveRegistryUrl({ projectPath: process.cwd() });
|
|
97
105
|
const packageJson = await readPackage();
|
|
98
106
|
if (packageJson.dependencies) {
|
|
99
107
|
for (const [name, version] of Object.entries(packageJson.dependencies)) if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {
|
|
@@ -153,9 +161,15 @@ const update = command({
|
|
|
153
161
|
}
|
|
154
162
|
await writePackage(packageJson);
|
|
155
163
|
console.log(chalk.green(`\n✅ Project updated successfully\n`));
|
|
156
|
-
if (skipInstall) return;
|
|
157
164
|
const { detect } = await import("package-manager-detector/detect");
|
|
158
165
|
const packageManager = await detect();
|
|
166
|
+
await updateInstalledPackages({
|
|
167
|
+
registryUrl,
|
|
168
|
+
auto: updatePackages ?? false,
|
|
169
|
+
skipInstall: skipInstall ?? false,
|
|
170
|
+
packageManager
|
|
171
|
+
});
|
|
172
|
+
if (skipInstall) return;
|
|
159
173
|
if (!packageManager) throw new Error(`❌ Failed to detect your package manager. Run install manually.`);
|
|
160
174
|
console.log(`▶️ Installing updated dependencies with \`${packageManager.agent}\`\n`);
|
|
161
175
|
runCmd(`${packageManager.agent} install`);
|
|
@@ -352,5 +366,5 @@ async function run(args) {
|
|
|
352
366
|
//#endregion
|
|
353
367
|
export { run };
|
|
354
368
|
|
|
355
|
-
//# sourceMappingURL=run-
|
|
356
|
-
//# debugId=
|
|
369
|
+
//# sourceMappingURL=run-C0dHDeMT.mjs.map
|
|
370
|
+
//# debugId=4e867ab2-f396-59cf-b416-30847523c980
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-C0dHDeMT.mjs","sources":["../src/commands/init.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.ts","../src/run.ts"],"sourcesContent":["import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { delegateInit } from \"../utils/delegate-init.js\";\n\n/**\n * Delegates `ph init` to the appropriate version of `@powerhousedao/ph-cli`.\n * This ensures the init logic (boilerplate, codegen) always matches the\n * ph-cli version being installed in the new project.\n */\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n await delegateInit(args);\n process.exit(0);\n },\n});\n","import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\n/**\n * `ph setup-globals` bootstraps the `~/.ph` project. It's the same flow as\n * `ph init` with `--name .ph` from the user's home directory, plus a\n * post-step that renames the package.json to `ph-global` (since `.ph` is\n * an invalid npm name).\n */\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n\n const { HOME_DIR, PH_GLOBAL_DIR_NAME, POWERHOUSE_GLOBAL_DIR } =\n await import(\"@powerhousedao/shared/clis\");\n\n /**\n * Fix the package.json `name` field for the global project — `.ph` is a\n * valid directory name but not a valid npm package name (vite + npm\n * reject names starting with a dot). We let `ph init` create the project\n * as `.ph` and then rename it here to `ph-global`.\n */\n const fixGlobalPackageName = (): void => {\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (!existsSync(packageJsonPath)) return;\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore parse/write failures — leaves the file untouched.\n }\n };\n\n // The directory itself can exist without the project being bootstrapped —\n // telemetry writes `~/.ph/telemetry.json` early on. Use the presence of\n // `package.json` as the real \"is initialized\" signal.\n const globalPackageJson = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(globalPackageJson)) {\n // Repair-in-place: an older bootstrap may have left `name: \".ph\"` in\n // package.json, which breaks vite/npm. Fix it on every invocation.\n fixGlobalPackageName();\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n process.exit(0);\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n const { delegateInit } = await import(\"../utils/delegate-init.js\");\n await delegateInit(args, [\"--name\", PH_GLOBAL_DIR_NAME]);\n fixGlobalPackageName();\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\n\nexport const update = command({\n name: \"update\",\n description:\n \"Update your Powerhouse dependencies and installed packages to their latest versions\",\n args: {\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n updatePackages: flag({\n type: optional(boolean),\n long: \"update-packages\",\n description:\n \"Auto-update installed packages (powerhouse.config.json) to their newest same-major version\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { skipInstall, updatePackages, debug } = args;\n if (debug) {\n console.log({ args });\n }\n console.log(`\\n▶️ Updating Powerhouse dependencies...\\n`);\n const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd },\n { resolveRegistryUrl },\n { updateInstalledPackages },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"@powerhousedao/shared/clis\"),\n import(\"@powerhousedao/shared/registry\"),\n import(\"./update-packages.js\"),\n ]);\n const registryUrl = resolveRegistryUrl({ projectPath: process.cwd() });\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project updated successfully\\n`));\n\n // Detect the package manager once; it backs the install below and the\n // update of `local` (node_modules) installed packages.\n const { detect } = await import(\"package-manager-detector/detect\");\n const packageManager = await detect();\n\n await updateInstalledPackages({\n registryUrl,\n auto: updatePackages ?? false,\n skipInstall: skipInstall ?? false,\n packageManager,\n });\n\n if (skipInstall) return;\n\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\n\nexport const useLocal = command({\n name: \"use-local\",\n description:\n \"Use your local `powerhouse` monorepo dependencies the current project.\",\n args: {\n monorepoPathPositional: positional({\n type: optional(string),\n displayName: \"monorepo path\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n monorepoPathOption: option({\n type: optional(string),\n long: \"path\",\n short: \"p\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with `pnpm`\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { monorepoPathPositional, monorepoPathOption, skipInstall, debug } =\n args;\n if (debug) {\n console.log({ args });\n }\n const monorepoPath = monorepoPathPositional ?? monorepoPathOption;\n\n if (!monorepoPath) {\n throw new Error(\n \"❌ Please provide the path to your local powerhouse monorepo.\",\n );\n }\n\n const { runUseLocal } = await import(\"@powerhousedao/shared/clis\");\n await runUseLocal(monorepoPath, skipInstall);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\n\nexport const use = command({\n name: \"use\",\n description: \"Specify the release version of Powerhouse dependencies to use.\",\n args: {\n tagPositional: positional({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\", \"rc\"])),\n displayName: \"tag\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", \"dev\", or \"rc\".`,\n }),\n tagOption: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\", \"rc\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", \"dev\", or \"rc\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { tagPositional, tagOption, version, skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n const tag = tagPositional ?? tagOption;\n const {\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n } = await import(\"@powerhousedao/shared/clis\");\n handleMutuallyExclusiveOptions({ tag, version }, \"versioning strategy\");\n\n if (!tag && !version) {\n throw new Error(\n \"Please specify either a release tag or a version to use.\",\n );\n }\n\n const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { clean, valid },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"semver\"),\n ]);\n\n if (version && !valid(clean(version))) {\n throw new Error(`❌ Invalid version: ${chalk.bold(version)}`);\n }\n\n console.log(\n `▶️ Updating project to use ${chalk.bold(version ?? tag)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.dependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(\n chalk.green(\n `\\n✅ Project updated to use ${chalk.bold(version ?? tag)}\\n`,\n ),\n );\n\n if (!skipInstall) {\n const { detect } = await import(\"package-manager-detector/detect\");\n const packageManager = await detect();\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n }\n\n process.exit(0);\n },\n});\n\nexport async function runUse(args: string[]) {\n await run(use, args);\n}\n","import { phCliHelpCommands } from \"@powerhousedao/shared/clis/args\";\nimport { subcommands } from \"cmd-ts\";\nimport { getVersion } from \"../get-version.js\";\nimport { init } from \"./init.js\";\nimport { setupGlobals } from \"./setup-globals.js\";\nimport { update } from \"./update.js\";\nimport { useLocal } from \"./use-local.js\";\nimport { use } from \"./use.js\";\n\n// `--version` is intercepted in cli.ts before the subcommand tree is\n// constructed, so cmd-ts only needs the bare version string here. The\n// rich version output (with project info, package manager, etc.) is\n// produced by `getPhCmdVersionInfo` along that short-circuit path.\nexport const ph = subcommands({\n name: \"ph\",\n version: getVersion(),\n description:\n \"The Powerhouse CLI (ph-cmd) is a command-line interface tool that provides essential commands for managing Powerhouse projects.\\nThe tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.\",\n cmds: {\n init,\n use,\n update,\n \"setup-globals\": setupGlobals,\n \"use-local\": useLocal,\n ...phCliHelpCommands,\n },\n});\n","import { run as runCmdTs } from \"cmd-ts\";\nimport { ph } from \"./commands/ph.js\";\n\nexport async function run(args: string[]) {\n return await runCmdTs(ph, args);\n}\n"],"names":["runCmdTs"],"mappings":"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","debug_id":"4e867ab2-f396-59cf-b416-30847523c980"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9f9e24a7-bafe-520f-8956-eb7c8b328933")}catch(e){}}();
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { cwd } from "node:process";
|
|
6
|
+
import { createInterface } from "node:readline/promises";
|
|
7
|
+
//#region src/commands/update-packages.ts
|
|
8
|
+
/**
|
|
9
|
+
* True when the stored value is a dist-tag (dev/staging/rc/latest) rather than
|
|
10
|
+
* a concrete semver version. Dist-tags are re-resolved against the registry at
|
|
11
|
+
* load time, so they self-update and must not be bumped.
|
|
12
|
+
*/
|
|
13
|
+
function isDistTag(version, semver) {
|
|
14
|
+
return !semver.valid(semver.clean(version));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Pure: decide which pinned packages have a newer release. Dist-tags are
|
|
18
|
+
* skipped (they self-update via the tag). `resolveLatest` is injected so this
|
|
19
|
+
* decision logic is testable without a network; `semver` is lazy-loaded.
|
|
20
|
+
*/
|
|
21
|
+
async function findOutdatedPackages(packages, resolveLatest) {
|
|
22
|
+
const semver = await import("semver");
|
|
23
|
+
const outdated = [];
|
|
24
|
+
for (const pkg of packages) {
|
|
25
|
+
if (!pkg.version || isDistTag(pkg.version, semver)) continue;
|
|
26
|
+
const newVersion = await resolveLatest(pkg.packageName, pkg.version);
|
|
27
|
+
if (newVersion && newVersion !== pkg.version) outdated.push({
|
|
28
|
+
name: pkg.packageName,
|
|
29
|
+
currentVersion: pkg.version,
|
|
30
|
+
newVersion,
|
|
31
|
+
provider: pkg.provider === "local" ? "local" : "registry"
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return outdated;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pure: bump the given packages' versions in place, preserving each entry's
|
|
38
|
+
* provider and any other fields. Only the listed packages are touched.
|
|
39
|
+
*/
|
|
40
|
+
function applyVersionBumps(config, updates) {
|
|
41
|
+
const byName = new Map(updates.map((u) => [u.name, u.newVersion]));
|
|
42
|
+
for (const pkg of config.packages ?? []) {
|
|
43
|
+
const next = byName.get(pkg.packageName);
|
|
44
|
+
if (next !== void 0) pkg.version = next;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Fetch every published version string for a package from the registry. */
|
|
48
|
+
async function fetchNpmVersions(name, registryUrl) {
|
|
49
|
+
const { spawnAsync } = await import("@powerhousedao/shared/clis");
|
|
50
|
+
const args = [
|
|
51
|
+
"view",
|
|
52
|
+
name,
|
|
53
|
+
"versions",
|
|
54
|
+
"--json"
|
|
55
|
+
];
|
|
56
|
+
if (registryUrl) args.push("--registry", registryUrl);
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(await spawnAsync("npm", args));
|
|
59
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
60
|
+
} catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The newest published version within the same major as `currentVersion`, or
|
|
66
|
+
* null when the current version is already the newest in that major.
|
|
67
|
+
*/
|
|
68
|
+
async function resolveLatestSameMajor(name, currentVersion, registryUrl) {
|
|
69
|
+
const semver = await import("semver");
|
|
70
|
+
const current = semver.clean(currentVersion);
|
|
71
|
+
if (!current || !semver.valid(current)) return null;
|
|
72
|
+
const currentMajor = semver.major(current);
|
|
73
|
+
const candidates = (await fetchNpmVersions(name, registryUrl)).map((v) => semver.clean(v)).filter((v) => v !== null && semver.valid(v) !== null).filter((v) => semver.major(v) === currentMajor && semver.gt(v, current));
|
|
74
|
+
if (candidates.length === 0) return null;
|
|
75
|
+
candidates.sort(semver.compare);
|
|
76
|
+
return candidates[candidates.length - 1];
|
|
77
|
+
}
|
|
78
|
+
/** Interactive prompt; returns the subset of `outdated` the user accepts. */
|
|
79
|
+
async function promptForUpdates(outdated) {
|
|
80
|
+
const chosen = [];
|
|
81
|
+
for (const pkg of outdated) if (await confirm(`${pkg.name} ${pkg.currentVersion} → ${pkg.newVersion} — update? [y/N]`)) chosen.push(pkg);
|
|
82
|
+
return chosen;
|
|
83
|
+
}
|
|
84
|
+
async function confirm(prompt) {
|
|
85
|
+
const { default: chalk } = await import("chalk");
|
|
86
|
+
const rl = createInterface({
|
|
87
|
+
input: process.stdin,
|
|
88
|
+
output: process.stdout
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const answer = (await rl.question(chalk.cyan(prompt))).trim().toLowerCase();
|
|
92
|
+
return answer === "y" || answer === "yes";
|
|
93
|
+
} finally {
|
|
94
|
+
rl.close();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The `ph update` step that keeps installed (powerhouse.config.json) packages
|
|
99
|
+
* current. Bumps each outdated pinned package's version, writes the config,
|
|
100
|
+
* and, for `local`-provider packages, runs the package manager's update.
|
|
101
|
+
* Returns the names of the local packages it bumped.
|
|
102
|
+
*
|
|
103
|
+
* `chalk` and the shared CLI helpers are lazy-imported (CLI cold-path rule).
|
|
104
|
+
* `runCommand`, `resolveLatest` and `prompt` are injectable for tests; they
|
|
105
|
+
* default to the shared module's behavior.
|
|
106
|
+
*/
|
|
107
|
+
async function updateInstalledPackages(args) {
|
|
108
|
+
const [chalkMod, { runCmd, POWERHOUSE_CONFIG_FILE }] = await Promise.all([import("chalk"), import("@powerhousedao/shared/clis")]);
|
|
109
|
+
const chalk = chalkMod.default;
|
|
110
|
+
const { registryUrl, auto, skipInstall, packageManager, resolveLatest, prompt } = args;
|
|
111
|
+
const run = args.runCommand ?? runCmd;
|
|
112
|
+
const configPath = args.configPath ?? join(cwd(), POWERHOUSE_CONFIG_FILE);
|
|
113
|
+
if (!existsSync(configPath)) return [];
|
|
114
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
115
|
+
if (!config.packages?.length) return [];
|
|
116
|
+
const resolve = resolveLatest ?? ((name, version) => resolveLatestSameMajor(name, version, registryUrl));
|
|
117
|
+
const outdated = await findOutdatedPackages(config.packages, resolve);
|
|
118
|
+
if (outdated.length === 0) {
|
|
119
|
+
console.log(chalk.dim("\nInstalled packages are up to date."));
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
const toUpdate = auto ? outdated : await (prompt ?? promptForUpdates)(outdated);
|
|
123
|
+
if (toUpdate.length === 0) {
|
|
124
|
+
console.log(chalk.dim("No packages updated."));
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
for (const pkg of toUpdate) console.log(chalk.green(` ↻ ${pkg.name} ${pkg.currentVersion} → ${pkg.newVersion}`));
|
|
128
|
+
applyVersionBumps(config, toUpdate);
|
|
129
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
130
|
+
const localBumped = toUpdate.filter((pkg) => pkg.provider === "local").map((pkg) => pkg.name);
|
|
131
|
+
if (localBumped.length > 0 && !skipInstall && packageManager) {
|
|
132
|
+
console.log(chalk.cyan(`\nUpdating local package(s) with \`${packageManager.agent}\`...`));
|
|
133
|
+
run(`${packageManager.agent} update ${localBumped.join(" ")}`);
|
|
134
|
+
}
|
|
135
|
+
return localBumped;
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
export { applyVersionBumps, fetchNpmVersions, findOutdatedPackages, isDistTag, promptForUpdates, resolveLatestSameMajor, updateInstalledPackages };
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=update-packages-C5uE2aoa.mjs.map
|
|
141
|
+
//# debugId=9f9e24a7-bafe-520f-8956-eb7c8b328933
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-packages-C5uE2aoa.mjs","sources":["../src/commands/update-packages.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { cwd } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\n\nexport interface ConfigPackage {\n packageName: string;\n version: string;\n provider?: \"registry\" | \"local\";\n [key: string]: unknown;\n}\n\nexport interface OutdatedPackage {\n name: string;\n currentVersion: string;\n newVersion: string;\n provider: \"registry\" | \"local\";\n}\n\nexport type ResolveLatest = (\n name: string,\n currentVersion: string,\n) => Promise<string | null>;\n\n/**\n * The slice of `semver` this module uses. It is injected (rather than\n * statically imported) because the CLI cold-path rule forbids static imports\n * of heavy modules in command files — the caller lazy-loads `semver` and\n * passes it in.\n */\nexport interface SemverFns {\n valid: (v: string | null) => unknown;\n clean: (v: string) => string | null;\n major: (v: string) => number;\n gt: (a: string, b: string) => boolean;\n compare: (a: string, b: string) => number;\n}\n\n/**\n * True when the stored value is a dist-tag (dev/staging/rc/latest) rather than\n * a concrete semver version. Dist-tags are re-resolved against the registry at\n * load time, so they self-update and must not be bumped.\n */\nexport function isDistTag(version: string, semver: SemverFns): boolean {\n return !semver.valid(semver.clean(version));\n}\n\n/**\n * Pure: decide which pinned packages have a newer release. Dist-tags are\n * skipped (they self-update via the tag). `resolveLatest` is injected so this\n * decision logic is testable without a network; `semver` is lazy-loaded.\n */\nexport async function findOutdatedPackages(\n packages: ConfigPackage[],\n resolveLatest: ResolveLatest,\n): Promise<OutdatedPackage[]> {\n const semver = await import(\"semver\");\n const outdated: OutdatedPackage[] = [];\n for (const pkg of packages) {\n if (!pkg.version || isDistTag(pkg.version, semver)) continue;\n const newVersion = await resolveLatest(pkg.packageName, pkg.version);\n if (newVersion && newVersion !== pkg.version) {\n outdated.push({\n name: pkg.packageName,\n currentVersion: pkg.version,\n newVersion,\n provider: pkg.provider === \"local\" ? \"local\" : \"registry\",\n });\n }\n }\n return outdated;\n}\n\n/**\n * Pure: bump the given packages' versions in place, preserving each entry's\n * provider and any other fields. Only the listed packages are touched.\n */\nexport function applyVersionBumps(\n config: { packages?: ConfigPackage[] },\n updates: Pick<OutdatedPackage, \"name\" | \"newVersion\">[],\n): void {\n const byName = new Map(updates.map((u) => [u.name, u.newVersion]));\n for (const pkg of config.packages ?? []) {\n const next = byName.get(pkg.packageName);\n if (next !== undefined) pkg.version = next;\n }\n}\n\n/** Fetch every published version string for a package from the registry. */\nexport async function fetchNpmVersions(\n name: string,\n registryUrl?: string,\n): Promise<string[]> {\n const { spawnAsync } = await import(\"@powerhousedao/shared/clis\");\n const args = [\"view\", name, \"versions\", \"--json\"];\n if (registryUrl) args.push(\"--registry\", registryUrl);\n try {\n const parsed: unknown = JSON.parse(await spawnAsync(\"npm\", args));\n return Array.isArray(parsed) ? (parsed as string[]) : [];\n } catch {\n return [];\n }\n}\n\n/**\n * The newest published version within the same major as `currentVersion`, or\n * null when the current version is already the newest in that major.\n */\nexport async function resolveLatestSameMajor(\n name: string,\n currentVersion: string,\n registryUrl?: string,\n): Promise<string | null> {\n const semver = await import(\"semver\");\n const current = semver.clean(currentVersion);\n if (!current || !semver.valid(current)) return null;\n const currentMajor = semver.major(current);\n const candidates = (await fetchNpmVersions(name, registryUrl))\n .map((v) => semver.clean(v))\n .filter((v): v is string => v !== null && semver.valid(v) !== null)\n .filter((v) => semver.major(v) === currentMajor && semver.gt(v, current));\n if (candidates.length === 0) return null;\n candidates.sort(semver.compare);\n return candidates[candidates.length - 1];\n}\n\n/** Interactive prompt; returns the subset of `outdated` the user accepts. */\nexport async function promptForUpdates(\n outdated: OutdatedPackage[],\n): Promise<OutdatedPackage[]> {\n const chosen: OutdatedPackage[] = [];\n for (const pkg of outdated) {\n const answer = await confirm(\n `${pkg.name} ${pkg.currentVersion} → ${pkg.newVersion} — update? [y/N]`,\n );\n if (answer) chosen.push(pkg);\n }\n return chosen;\n}\n\nasync function confirm(prompt: string): Promise<boolean> {\n const { default: chalk } = await import(\"chalk\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = (await rl.question(chalk.cyan(prompt))).trim().toLowerCase();\n return answer === \"y\" || answer === \"yes\";\n } finally {\n rl.close();\n }\n}\n\nexport interface UpdateInstalledArgs {\n registryUrl?: string;\n /** true for `--update-packages`: apply automatically, no prompt. */\n auto: boolean;\n skipInstall: boolean;\n packageManager?: { agent: string } | null;\n /** Config file path; defaults to the cwd's powerhouse.config.json. */\n configPath?: string;\n /** Command runner; defaults to the shared `runCmd`. */\n runCommand?: (command: string) => void;\n /** Version resolver; defaults to `resolveLatestSameMajor`. */\n resolveLatest?: ResolveLatest;\n /** Interactive prompt; defaults to `promptForUpdates`. */\n prompt?: (outdated: OutdatedPackage[]) => Promise<OutdatedPackage[]>;\n}\n\n/**\n * The `ph update` step that keeps installed (powerhouse.config.json) packages\n * current. Bumps each outdated pinned package's version, writes the config,\n * and, for `local`-provider packages, runs the package manager's update.\n * Returns the names of the local packages it bumped.\n *\n * `chalk` and the shared CLI helpers are lazy-imported (CLI cold-path rule).\n * `runCommand`, `resolveLatest` and `prompt` are injectable for tests; they\n * default to the shared module's behavior.\n */\nexport async function updateInstalledPackages(\n args: UpdateInstalledArgs,\n): Promise<string[]> {\n const [chalkMod, { runCmd, POWERHOUSE_CONFIG_FILE }] = await Promise.all([\n import(\"chalk\"),\n import(\"@powerhousedao/shared/clis\"),\n ]);\n const chalk = chalkMod.default;\n const {\n registryUrl,\n auto,\n skipInstall,\n packageManager,\n resolveLatest,\n prompt,\n } = args;\n const run = args.runCommand ?? runCmd;\n const configPath = args.configPath ?? join(cwd(), POWERHOUSE_CONFIG_FILE);\n\n if (!existsSync(configPath)) return [];\n const config = JSON.parse(readFileSync(configPath, \"utf-8\")) as {\n packages?: ConfigPackage[];\n };\n if (!config.packages?.length) return [];\n\n const resolve =\n resolveLatest ??\n ((name, version) => resolveLatestSameMajor(name, version, registryUrl));\n const outdated = await findOutdatedPackages(config.packages, resolve);\n if (outdated.length === 0) {\n console.log(chalk.dim(\"\\nInstalled packages are up to date.\"));\n return [];\n }\n\n const toUpdate = auto\n ? outdated\n : await (prompt ?? promptForUpdates)(outdated);\n if (toUpdate.length === 0) {\n console.log(chalk.dim(\"No packages updated.\"));\n return [];\n }\n\n for (const pkg of toUpdate) {\n console.log(\n chalk.green(` ↻ ${pkg.name} ${pkg.currentVersion} → ${pkg.newVersion}`),\n );\n }\n\n applyVersionBumps(config, toUpdate);\n writeFileSync(configPath, JSON.stringify(config, null, 2));\n\n const localBumped = toUpdate\n .filter((pkg) => pkg.provider === \"local\")\n .map((pkg) => pkg.name);\n if (localBumped.length > 0 && !skipInstall && packageManager) {\n console.log(\n chalk.cyan(\n `\\nUpdating local package(s) with \\`${packageManager.agent}\\`...`,\n ),\n );\n run(`${packageManager.agent} update ${localBumped.join(\" \")}`);\n }\n\n return localBumped;\n}\n"],"names":[],"mappings":"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","debug_id":"9f9e24a7-bafe-520f-8956-eb7c8b328933"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ph-cmd",
|
|
3
|
-
"version": "6.2.
|
|
3
|
+
"version": "6.2.3-dev.1",
|
|
4
4
|
"description": "Powerhouse CLI — create Vetra projects, generate document models and editors, run local dev environments, and publish packages.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"author": "",
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"cross-spawn": "7.0.6",
|
|
38
|
-
"@powerhousedao/shared": "6.2.
|
|
38
|
+
"@powerhousedao/shared": "6.2.3-dev.1",
|
|
39
39
|
"@sentry/node-core": "^10.52.0",
|
|
40
40
|
"chalk": "5.6.2",
|
|
41
41
|
"cmd-ts": "0.15.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/cross-spawn": "6.0.6",
|
|
49
|
-
"@powerhousedao/codegen": "6.2.
|
|
49
|
+
"@powerhousedao/codegen": "6.2.3-dev.1",
|
|
50
50
|
"tsdown": "0.21.1",
|
|
51
51
|
"vitest": "4.1.1"
|
|
52
52
|
},
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { t as delegateInit } from "./delegate-init-B3_b7484.mjs";
|
|
2
|
-
export { delegateInit };
|
|
3
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="123d8778-b655-50a0-8338-1999423f6be7")}catch(e){}}();
|
|
4
|
-
//# debugId=123d8778-b655-50a0-8338-1999423f6be7
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-BTuue8EB.mjs","sources":["../src/commands/init.ts","../src/commands/setup-globals.ts","../src/commands/update.ts","../src/commands/use-local.ts","../src/commands/use.ts","../src/commands/ph.ts","../src/run.ts"],"sourcesContent":["import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { delegateInit } from \"../utils/delegate-init.js\";\n\n/**\n * Delegates `ph init` to the appropriate version of `@powerhousedao/ph-cli`.\n * This ensures the init logic (boilerplate, codegen) always matches the\n * ph-cli version being installed in the new project.\n */\nexport const init = command({\n name: \"init\",\n description: \"Initialize a new project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n await delegateInit(args);\n process.exit(0);\n },\n});\n","import { initArgs } from \"@powerhousedao/shared/clis/args\";\nimport { command } from \"cmd-ts\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst PH_GLOBAL_PACKAGE_NAME = \"ph-global\";\n\n/**\n * `ph setup-globals` bootstraps the `~/.ph` project. It's the same flow as\n * `ph init` with `--name .ph` from the user's home directory, plus a\n * post-step that renames the package.json to `ph-global` (since `.ph` is\n * an invalid npm name).\n */\nexport const setupGlobals = command({\n name: \"setup-globals\",\n description: \"Initialize a new global project\",\n args: initArgs,\n handler: async (args) => {\n if (args.debug) {\n console.log({ args });\n }\n\n const { HOME_DIR, PH_GLOBAL_DIR_NAME, POWERHOUSE_GLOBAL_DIR } =\n await import(\"@powerhousedao/shared/clis\");\n\n /**\n * Fix the package.json `name` field for the global project — `.ph` is a\n * valid directory name but not a valid npm package name (vite + npm\n * reject names starting with a dot). We let `ph init` create the project\n * as `.ph` and then rename it here to `ph-global`.\n */\n const fixGlobalPackageName = (): void => {\n const packageJsonPath = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (!existsSync(packageJsonPath)) return;\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { name?: string };\n if (packageJson.name?.startsWith(\".\")) {\n packageJson.name = PH_GLOBAL_PACKAGE_NAME;\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n } catch {\n // Ignore parse/write failures — leaves the file untouched.\n }\n };\n\n // The directory itself can exist without the project being bootstrapped —\n // telemetry writes `~/.ph/telemetry.json` early on. Use the presence of\n // `package.json` as the real \"is initialized\" signal.\n const globalPackageJson = path.join(POWERHOUSE_GLOBAL_DIR, \"package.json\");\n if (existsSync(globalPackageJson)) {\n // Repair-in-place: an older bootstrap may have left `name: \".ph\"` in\n // package.json, which breaks vite/npm. Fix it on every invocation.\n fixGlobalPackageName();\n console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);\n process.exit(0);\n }\n\n console.log(\"📦 Initializing global project...\");\n process.chdir(HOME_DIR);\n const { delegateInit } = await import(\"../utils/delegate-init.js\");\n await delegateInit(args, [\"--name\", PH_GLOBAL_DIR_NAME]);\n fixGlobalPackageName();\n console.log(\n `🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`,\n );\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport { boolean, command, flag, optional } from \"cmd-ts\";\n\nexport const update = command({\n name: \"update\",\n description:\n \"Update your powerhouse dependencies to their latest tagged version\",\n args: {\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n console.log(`\\n▶️ Updating Powerhouse dependencies...\\n`);\n const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { getTagFromVersion, logVersionUpdate, parsePackageVersion, runCmd },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"@powerhousedao/shared/clis\"),\n ]);\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, version] of Object.entries(packageJson.dependencies)) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, version] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (version && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const tag = getTagFromVersion(version);\n const newVersion = await parsePackageVersion({ name, tag });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(chalk.green(`\\n✅ Project updated successfully\\n`));\n\n if (skipInstall) return;\n\n const { detect } = await import(\"package-manager-detector/detect\");\n const packageManager = await detect();\n\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport {\n boolean,\n command,\n flag,\n option,\n optional,\n positional,\n string,\n} from \"cmd-ts\";\n\nexport const useLocal = command({\n name: \"use-local\",\n description:\n \"Use your local `powerhouse` monorepo dependencies the current project.\",\n args: {\n monorepoPathPositional: positional({\n type: optional(string),\n displayName: \"monorepo path\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n monorepoPathOption: option({\n type: optional(string),\n long: \"path\",\n short: \"p\",\n description:\n \"Path to your local powerhouse monorepo relative to this project\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with `pnpm`\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { monorepoPathPositional, monorepoPathOption, skipInstall, debug } =\n args;\n if (debug) {\n console.log({ args });\n }\n const monorepoPath = monorepoPathPositional ?? monorepoPathOption;\n\n if (!monorepoPath) {\n throw new Error(\n \"❌ Please provide the path to your local powerhouse monorepo.\",\n );\n }\n\n const { runUseLocal } = await import(\"@powerhousedao/shared/clis\");\n await runUseLocal(monorepoPath, skipInstall);\n process.exit(0);\n },\n});\n","import { debugArgs } from \"@powerhousedao/shared/clis/args\";\nimport { ALL_POWERHOUSE_DEPENDENCIES } from \"@powerhousedao/shared/constants\";\nimport {\n boolean,\n command,\n flag,\n oneOf,\n option,\n optional,\n positional,\n run,\n string,\n} from \"cmd-ts\";\n\nexport const use = command({\n name: \"use\",\n description: \"Specify the release version of Powerhouse dependencies to use.\",\n args: {\n tagPositional: positional({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\", \"rc\"])),\n displayName: \"tag\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", \"dev\", or \"rc\".`,\n }),\n tagOption: option({\n type: optional(oneOf([\"latest\", \"staging\", \"dev\", \"rc\"])),\n long: \"tag\",\n short: \"t\",\n description: `Specify the release tag to use for your project. Can be one of: \"latest\", \"staging\", \"dev\", or \"rc\".`,\n }),\n version: option({\n type: optional(string),\n long: \"version\",\n short: \"v\",\n description:\n \"Specify the exact semver release version to use for your project.\",\n }),\n skipInstall: flag({\n type: optional(boolean),\n long: \"skip-install\",\n short: \"s\",\n description: \"Skip running `install` with your package manager\",\n }),\n ...debugArgs,\n },\n handler: async (args) => {\n const { tagPositional, tagOption, version, skipInstall, debug } = args;\n if (debug) {\n console.log({ args });\n }\n const tag = tagPositional ?? tagOption;\n const {\n handleMutuallyExclusiveOptions,\n logVersionUpdate,\n parsePackageVersion,\n runCmd,\n } = await import(\"@powerhousedao/shared/clis\");\n handleMutuallyExclusiveOptions({ tag, version }, \"versioning strategy\");\n\n if (!tag && !version) {\n throw new Error(\n \"Please specify either a release tag or a version to use.\",\n );\n }\n\n const [\n { default: chalk },\n { readPackage },\n { writePackage },\n { clean, valid },\n ] = await Promise.all([\n import(\"chalk\"),\n import(\"read-pkg\"),\n import(\"write-package\"),\n import(\"semver\"),\n ]);\n\n if (version && !valid(clean(version))) {\n throw new Error(`❌ Invalid version: ${chalk.bold(version)}`);\n }\n\n console.log(\n `▶️ Updating project to use ${chalk.bold(version ?? tag)}...\\n`,\n );\n\n const packageJson = await readPackage();\n\n if (packageJson.dependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.dependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.dependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.devDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.devDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.devDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.optionalDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.optionalDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.optionalDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n if (packageJson.peerDependencies) {\n for (const [name, existingVersion] of Object.entries(\n packageJson.peerDependencies,\n )) {\n if (existingVersion && ALL_POWERHOUSE_DEPENDENCIES.includes(name)) {\n const newVersion = await parsePackageVersion({ name, tag, version });\n packageJson.peerDependencies[name] = newVersion;\n logVersionUpdate({\n name,\n version: existingVersion,\n newVersion,\n });\n }\n }\n }\n\n await writePackage(packageJson);\n\n console.log(\n chalk.green(\n `\\n✅ Project updated to use ${chalk.bold(version ?? tag)}\\n`,\n ),\n );\n\n if (!skipInstall) {\n const { detect } = await import(\"package-manager-detector/detect\");\n const packageManager = await detect();\n if (!packageManager) {\n throw new Error(\n `❌ Failed to detect your package manager. Run install manually.`,\n );\n }\n console.log(\n `▶️ Installing updated dependencies with \\`${packageManager.agent}\\`\\n`,\n );\n runCmd(`${packageManager.agent} install`);\n }\n\n process.exit(0);\n },\n});\n\nexport async function runUse(args: string[]) {\n await run(use, args);\n}\n","import { phCliHelpCommands } from \"@powerhousedao/shared/clis/args\";\nimport { subcommands } from \"cmd-ts\";\nimport { getVersion } from \"../get-version.js\";\nimport { init } from \"./init.js\";\nimport { setupGlobals } from \"./setup-globals.js\";\nimport { update } from \"./update.js\";\nimport { useLocal } from \"./use-local.js\";\nimport { use } from \"./use.js\";\n\n// `--version` is intercepted in cli.ts before the subcommand tree is\n// constructed, so cmd-ts only needs the bare version string here. The\n// rich version output (with project info, package manager, etc.) is\n// produced by `getPhCmdVersionInfo` along that short-circuit path.\nexport const ph = subcommands({\n name: \"ph\",\n version: getVersion(),\n description:\n \"The Powerhouse CLI (ph-cmd) is a command-line interface tool that provides essential commands for managing Powerhouse projects.\\nThe tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.\",\n cmds: {\n init,\n use,\n update,\n \"setup-globals\": setupGlobals,\n \"use-local\": useLocal,\n ...phCliHelpCommands,\n },\n});\n","import { run as runCmdTs } from \"cmd-ts\";\nimport { ph } from \"./commands/ph.js\";\n\nexport async function run(args: string[]) {\n return await runCmdTs(ph, args);\n}\n"],"names":["runCmdTs"],"mappings":"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","debug_id":"538677bc-2a63-5475-8113-b1a55195a72d"}
|