@powerhousedao/ph-cli 6.0.0-dev.20 → 6.0.0-dev.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assign-env-vars-CzHgn5ax.mjs +15 -0
- package/dist/assign-env-vars-CzHgn5ax.mjs.map +1 -0
- package/dist/auth-wgUd0D0V.mjs +15 -0
- package/dist/auth-wgUd0D0V.mjs.map +1 -0
- package/dist/build-BflSHYLP.mjs +33 -0
- package/dist/build-BflSHYLP.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +1219 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/connect-build-oDJKd0aN.mjs +35 -0
- package/dist/connect-build-oDJKd0aN.mjs.map +1 -0
- package/dist/connect-preview-4Xe7Lm1V.mjs +27 -0
- package/dist/connect-preview-4Xe7Lm1V.mjs.map +1 -0
- package/dist/connect-studio-38_NrT_a.mjs +28 -0
- package/dist/connect-studio-38_NrT_a.mjs.map +1 -0
- package/dist/connect-studio-DuH6WcoA.mjs +3 -0
- package/dist/generate-all-B2zuJ01M.mjs +10 -0
- package/dist/generate-all-B2zuJ01M.mjs.map +1 -0
- package/dist/generate-app-DKShBXn7.mjs +31 -0
- package/dist/generate-app-DKShBXn7.mjs.map +1 -0
- package/dist/generate-document-model-wud-Ezfp.mjs +17 -0
- package/dist/generate-document-model-wud-Ezfp.mjs.map +1 -0
- package/dist/generate-editor-BJbBk8c5.mjs +31 -0
- package/dist/generate-editor-BJbBk8c5.mjs.map +1 -0
- package/dist/generate-processor-BF3yxDSa.mjs +22 -0
- package/dist/generate-processor-BF3yxDSa.mjs.map +1 -0
- package/dist/generate-subgraph-mkgADj_1.mjs +20 -0
- package/dist/generate-subgraph-mkgADj_1.mjs.map +1 -0
- package/dist/init-iDbH337G.mjs +124 -0
- package/dist/init-iDbH337G.mjs.map +1 -0
- package/dist/inspect-C5s3gQIQ.mjs +45 -0
- package/dist/inspect-C5s3gQIQ.mjs.map +1 -0
- package/dist/migrate-CIBhw4np.mjs +11 -0
- package/dist/migrate-CIBhw4np.mjs.map +1 -0
- package/dist/scripts/generate-commands-docs.ts +16 -8
- package/dist/switchboard-CiIwAwyR.mjs +2 -0
- package/dist/switchboard-migrate-COGf5HBF.mjs +50 -0
- package/dist/switchboard-migrate-COGf5HBF.mjs.map +1 -0
- package/dist/switchboard-vPgnxFrM.mjs +72 -0
- package/dist/switchboard-vPgnxFrM.mjs.map +1 -0
- package/dist/utils-CFkM2mAC.mjs +161 -0
- package/dist/utils-CFkM2mAC.mjs.map +1 -0
- package/dist/vetra-B7ofmdqk.mjs +418 -0
- package/dist/vetra-B7ofmdqk.mjs.map +1 -0
- package/package.json +44 -46
- package/dist/scripts/generate-commands-docs.d.ts +0 -2
- package/dist/scripts/generate-commands-docs.d.ts.map +0 -1
- package/dist/scripts/generate-commands-docs.js +0 -47
- package/dist/scripts/generate-commands-docs.js.map +0 -1
- package/dist/scripts/generate-docs-legacy.d.ts +0 -2
- package/dist/scripts/generate-docs-legacy.d.ts.map +0 -1
- package/dist/scripts/generate-docs-legacy.js +0 -72
- package/dist/scripts/generate-docs-legacy.js.map +0 -1
- package/dist/scripts/generate-docs-legacy.ts +0 -84
- package/dist/scripts/generate-version.d.ts +0 -2
- package/dist/scripts/generate-version.d.ts.map +0 -1
- package/dist/scripts/generate-version.js +0 -13
- package/dist/scripts/generate-version.js.map +0 -1
- package/dist/scripts/generate-version.ts +0 -22
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -29
- package/dist/src/cli.js.map +0 -1
- package/dist/src/cli.old.d.ts +0 -3
- package/dist/src/cli.old.d.ts.map +0 -1
- package/dist/src/cli.old.js +0 -43
- package/dist/src/cli.old.js.map +0 -1
- package/dist/src/commands/access-token.d.ts +0 -14
- package/dist/src/commands/access-token.d.ts.map +0 -1
- package/dist/src/commands/access-token.js +0 -142
- package/dist/src/commands/access-token.js.map +0 -1
- package/dist/src/commands/connect.d.ts +0 -249
- package/dist/src/commands/connect.d.ts.map +0 -1
- package/dist/src/commands/connect.js +0 -60
- package/dist/src/commands/connect.js.map +0 -1
- package/dist/src/commands/generate.d.ts +0 -58
- package/dist/src/commands/generate.d.ts.map +0 -1
- package/dist/src/commands/generate.js +0 -25
- package/dist/src/commands/generate.js.map +0 -1
- package/dist/src/commands/get-package-manager.d.ts +0 -30
- package/dist/src/commands/get-package-manager.d.ts.map +0 -1
- package/dist/src/commands/get-package-manager.js +0 -8
- package/dist/src/commands/get-package-manager.js.map +0 -1
- package/dist/src/commands/index.d.ts +0 -13
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js +0 -25
- package/dist/src/commands/index.js.map +0 -1
- package/dist/src/commands/inspect.d.ts +0 -12
- package/dist/src/commands/inspect.d.ts.map +0 -1
- package/dist/src/commands/inspect.js +0 -27
- package/dist/src/commands/inspect.js.map +0 -1
- package/dist/src/commands/install.d.ts +0 -22
- package/dist/src/commands/install.d.ts.map +0 -1
- package/dist/src/commands/install.js +0 -75
- package/dist/src/commands/install.js.map +0 -1
- package/dist/src/commands/legacy/access-token.old.d.ts +0 -9
- package/dist/src/commands/legacy/access-token.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/access-token.old.js +0 -110
- package/dist/src/commands/legacy/access-token.old.js.map +0 -1
- package/dist/src/commands/legacy/connect.old.d.ts +0 -19
- package/dist/src/commands/legacy/connect.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/connect.old.js +0 -85
- package/dist/src/commands/legacy/connect.old.js.map +0 -1
- package/dist/src/commands/legacy/generate.old.d.ts +0 -9
- package/dist/src/commands/legacy/generate.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/generate.old.js +0 -41
- package/dist/src/commands/legacy/generate.old.js.map +0 -1
- package/dist/src/commands/legacy/help.old.d.ts +0 -3
- package/dist/src/commands/legacy/help.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/help.old.js +0 -9
- package/dist/src/commands/legacy/help.old.js.map +0 -1
- package/dist/src/commands/legacy/inspect.old.d.ts +0 -6
- package/dist/src/commands/legacy/inspect.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/inspect.old.js +0 -21
- package/dist/src/commands/legacy/inspect.old.js.map +0 -1
- package/dist/src/commands/legacy/install.old.d.ts +0 -15
- package/dist/src/commands/legacy/install.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/install.old.js +0 -127
- package/dist/src/commands/legacy/install.old.js.map +0 -1
- package/dist/src/commands/legacy/login.old.d.ts +0 -12
- package/dist/src/commands/legacy/login.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/login.old.js +0 -208
- package/dist/src/commands/legacy/login.old.js.map +0 -1
- package/dist/src/commands/legacy/migrate.old.d.ts +0 -11
- package/dist/src/commands/legacy/migrate.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/migrate.old.js +0 -15
- package/dist/src/commands/legacy/migrate.old.js.map +0 -1
- package/dist/src/commands/legacy/service.old.d.ts +0 -5
- package/dist/src/commands/legacy/service.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/service.old.js +0 -67
- package/dist/src/commands/legacy/service.old.js.map +0 -1
- package/dist/src/commands/legacy/switchboard.old.d.ts +0 -9
- package/dist/src/commands/legacy/switchboard.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/switchboard.old.js +0 -78
- package/dist/src/commands/legacy/switchboard.old.js.map +0 -1
- package/dist/src/commands/legacy/uninstall.old.d.ts +0 -15
- package/dist/src/commands/legacy/uninstall.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/uninstall.old.js +0 -120
- package/dist/src/commands/legacy/uninstall.old.js.map +0 -1
- package/dist/src/commands/legacy/vetra.old.d.ts +0 -23
- package/dist/src/commands/legacy/vetra.old.d.ts.map +0 -1
- package/dist/src/commands/legacy/vetra.old.js +0 -35
- package/dist/src/commands/legacy/vetra.old.js.map +0 -1
- package/dist/src/commands/list.d.ts +0 -10
- package/dist/src/commands/list.d.ts.map +0 -1
- package/dist/src/commands/list.js +0 -42
- package/dist/src/commands/list.js.map +0 -1
- package/dist/src/commands/list.old.d.ts +0 -9
- package/dist/src/commands/list.old.d.ts.map +0 -1
- package/dist/src/commands/list.old.js +0 -36
- package/dist/src/commands/list.old.js.map +0 -1
- package/dist/src/commands/login.d.ts +0 -20
- package/dist/src/commands/login.d.ts.map +0 -1
- package/dist/src/commands/login.js +0 -209
- package/dist/src/commands/login.js.map +0 -1
- package/dist/src/commands/migrate.d.ts +0 -12
- package/dist/src/commands/migrate.d.ts.map +0 -1
- package/dist/src/commands/migrate.js +0 -16
- package/dist/src/commands/migrate.js.map +0 -1
- package/dist/src/commands/ph-cli-commands.d.ts +0 -410
- package/dist/src/commands/ph-cli-commands.d.ts.map +0 -1
- package/dist/src/commands/ph-cli-commands.js +0 -25
- package/dist/src/commands/ph-cli-commands.js.map +0 -1
- package/dist/src/commands/ph-cli-help.d.ts +0 -396
- package/dist/src/commands/ph-cli-help.d.ts.map +0 -1
- package/dist/src/commands/ph-cli-help.js +0 -12
- package/dist/src/commands/ph-cli-help.js.map +0 -1
- package/dist/src/commands/ph-cli.d.ts +0 -490
- package/dist/src/commands/ph-cli.d.ts.map +0 -1
- package/dist/src/commands/ph-cli.js +0 -12
- package/dist/src/commands/ph-cli.js.map +0 -1
- package/dist/src/commands/register-commands.d.ts +0 -5
- package/dist/src/commands/register-commands.d.ts.map +0 -1
- package/dist/src/commands/register-commands.js +0 -32
- package/dist/src/commands/register-commands.js.map +0 -1
- package/dist/src/commands/service.d.ts +0 -12
- package/dist/src/commands/service.d.ts.map +0 -1
- package/dist/src/commands/service.js +0 -79
- package/dist/src/commands/service.js.map +0 -1
- package/dist/src/commands/switchboard.d.ts +0 -46
- package/dist/src/commands/switchboard.d.ts.map +0 -1
- package/dist/src/commands/switchboard.js +0 -43
- package/dist/src/commands/switchboard.js.map +0 -1
- package/dist/src/commands/uninstall.d.ts +0 -22
- package/dist/src/commands/uninstall.d.ts.map +0 -1
- package/dist/src/commands/uninstall.js +0 -71
- package/dist/src/commands/uninstall.js.map +0 -1
- package/dist/src/commands/vetra.d.ts +0 -64
- package/dist/src/commands/vetra.d.ts.map +0 -1
- package/dist/src/commands/vetra.js +0 -24
- package/dist/src/commands/vetra.js.map +0 -1
- package/dist/src/get-version.d.ts +0 -2
- package/dist/src/get-version.d.ts.map +0 -1
- package/dist/src/get-version.js +0 -7
- package/dist/src/get-version.js.map +0 -1
- package/dist/src/help.d.ts +0 -65
- package/dist/src/help.d.ts.map +0 -1
- package/dist/src/help.js +0 -770
- package/dist/src/help.js.map +0 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -4
- package/dist/src/index.js.map +0 -1
- package/dist/src/services/auth.d.ts +0 -69
- package/dist/src/services/auth.d.ts.map +0 -1
- package/dist/src/services/auth.js +0 -171
- package/dist/src/services/auth.js.map +0 -1
- package/dist/src/services/connect.d.ts +0 -5
- package/dist/src/services/connect.d.ts.map +0 -1
- package/dist/src/services/connect.js +0 -90
- package/dist/src/services/connect.js.map +0 -1
- package/dist/src/services/generate.d.ts +0 -3
- package/dist/src/services/generate.d.ts.map +0 -1
- package/dist/src/services/generate.js +0 -80
- package/dist/src/services/generate.js.map +0 -1
- package/dist/src/services/inspect.d.ts +0 -3
- package/dist/src/services/inspect.d.ts.map +0 -1
- package/dist/src/services/inspect.js +0 -50
- package/dist/src/services/inspect.js.map +0 -1
- package/dist/src/services/legacy/connect.old.d.ts +0 -2
- package/dist/src/services/legacy/connect.old.d.ts.map +0 -1
- package/dist/src/services/legacy/connect.old.js +0 -2
- package/dist/src/services/legacy/connect.old.js.map +0 -1
- package/dist/src/services/legacy/generate.old.d.ts +0 -30
- package/dist/src/services/legacy/generate.old.d.ts.map +0 -1
- package/dist/src/services/legacy/generate.old.js +0 -107
- package/dist/src/services/legacy/generate.old.js.map +0 -1
- package/dist/src/services/legacy/inspect.old.d.ts +0 -5
- package/dist/src/services/legacy/inspect.old.d.ts.map +0 -1
- package/dist/src/services/legacy/inspect.old.js +0 -49
- package/dist/src/services/legacy/inspect.old.js.map +0 -1
- package/dist/src/services/legacy/migrate.old.d.ts +0 -3
- package/dist/src/services/legacy/migrate.old.d.ts.map +0 -1
- package/dist/src/services/legacy/migrate.old.js +0 -289
- package/dist/src/services/legacy/migrate.old.js.map +0 -1
- package/dist/src/services/legacy/switchboard.old.d.ts +0 -54
- package/dist/src/services/legacy/switchboard.old.d.ts.map +0 -1
- package/dist/src/services/legacy/switchboard.old.js +0 -79
- package/dist/src/services/legacy/switchboard.old.js.map +0 -1
- package/dist/src/services/legacy/vetra.old.d.ts +0 -15
- package/dist/src/services/legacy/vetra.old.d.ts.map +0 -1
- package/dist/src/services/legacy/vetra.old.js +0 -176
- package/dist/src/services/legacy/vetra.old.js.map +0 -1
- package/dist/src/services/migrate.d.ts +0 -3
- package/dist/src/services/migrate.d.ts.map +0 -1
- package/dist/src/services/migrate.js +0 -327
- package/dist/src/services/migrate.js.map +0 -1
- package/dist/src/services/switchboard-migrate.d.ts +0 -7
- package/dist/src/services/switchboard-migrate.d.ts.map +0 -1
- package/dist/src/services/switchboard-migrate.js +0 -60
- package/dist/src/services/switchboard-migrate.js.map +0 -1
- package/dist/src/services/switchboard.d.ts +0 -22
- package/dist/src/services/switchboard.d.ts.map +0 -1
- package/dist/src/services/switchboard.js +0 -77
- package/dist/src/services/switchboard.js.map +0 -1
- package/dist/src/services/vetra.d.ts +0 -3
- package/dist/src/services/vetra.d.ts.map +0 -1
- package/dist/src/services/vetra.js +0 -169
- package/dist/src/services/vetra.js.map +0 -1
- package/dist/src/types.d.ts +0 -31
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils/configure-vetra-github-url.d.ts +0 -12
- package/dist/src/utils/configure-vetra-github-url.d.ts.map +0 -1
- package/dist/src/utils/configure-vetra-github-url.js +0 -230
- package/dist/src/utils/configure-vetra-github-url.js.map +0 -1
- package/dist/src/utils/constants.d.ts +0 -2
- package/dist/src/utils/constants.d.ts.map +0 -1
- package/dist/src/utils/constants.js +0 -2
- package/dist/src/utils/constants.js.map +0 -1
- package/dist/src/utils/file-system.d.ts +0 -2
- package/dist/src/utils/file-system.d.ts.map +0 -1
- package/dist/src/utils/file-system.js +0 -15
- package/dist/src/utils/file-system.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -3
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -3
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/projects.d.ts +0 -19
- package/dist/src/utils/projects.d.ts.map +0 -1
- package/dist/src/utils/projects.js +0 -93
- package/dist/src/utils/projects.js.map +0 -1
- package/dist/src/utils.d.ts +0 -112
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -261
- package/dist/src/utils.js.map +0 -1
- package/dist/src/version.d.ts +0 -2
- package/dist/src/version.d.ts.map +0 -1
- package/dist/src/version.js +0 -3
- package/dist/src/version.js.map +0 -1
- package/dist/test/utils.test.d.ts +0 -2
- package/dist/test/utils.test.d.ts.map +0 -1
- package/dist/test/utils.test.js +0 -133
- package/dist/test/utils.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -7
- package/dist/vitest.config.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-iDbH337G.mjs","names":[],"sources":["../src/utils/validate-remote-drive.ts","../src/services/init.ts"],"sourcesContent":["import {\n createVetraDocument,\n getVetraDocuments,\n} from \"@powerhousedao/common/utils\";\n\n/**\n * Sets up a remote drive for initialization by validating and creating\n * a Vetra document if needed.\n * Returns true if setup succeeds, false if it should stop execution.\n */\nexport async function setupRemoteDrive(\n remoteDriveUrl: string,\n): Promise<boolean> {\n try {\n // Parse driveId from URL\n const driveId = remoteDriveUrl.split(\"/\").pop();\n\n if (!remoteDriveUrl || remoteDriveUrl.trim() === \"\") {\n console.error(\"❌ Remote drive URL is required\");\n return false;\n }\n\n // Construct GraphQL endpoint from base URL\n const url = new URL(remoteDriveUrl);\n const graphqlEndpoint = `${url.protocol}//${url.host}/graphql`;\n\n let documents = await getVetraDocuments(graphqlEndpoint, driveId!);\n\n if (documents.length === 0) {\n console.log(\n \"No vetra package document found in the provided drive, creating one...\",\n );\n try {\n await createVetraDocument(graphqlEndpoint, driveId!, \"vetra-package\");\n\n // Re-fetch documents after creation\n documents = await getVetraDocuments(graphqlEndpoint, driveId!);\n\n if (documents.length === 0) {\n console.error(\n \"❌ Failed to create vetra package document in the remote drive\",\n );\n return false;\n }\n\n console.log(\"✅ Vetra package document created successfully\");\n } catch (createError) {\n console.error(\n \"❌ Failed to create vetra package document:\",\n createError,\n );\n return false;\n }\n }\n\n if (documents.length > 1) {\n console.warn(\n \"⚠️ Multiple vetra package documents were found in the provided remote drive, this might be an error in your remote drive\",\n );\n }\n\n const hasGithubUrl = documents.some((doc) => doc.githubUrl);\n\n if (hasGithubUrl) {\n console.error(\n \"❌ The remote drive provided already has been configured with a github url, please use the checkout command instead: ph checkout --remote-drive <remote drive url>\",\n );\n return false;\n }\n\n return true;\n } catch (error) {\n console.error(\"❌ Unable to fetch remote drive info:\", error);\n return false;\n }\n}\n","import { createProject } from \"@powerhousedao/codegen\";\nimport {\n handleMutuallyExclusiveOptions,\n parsePackageManager,\n parseTag,\n} from \"@powerhousedao/shared/clis\";\nimport chalk from \"chalk\";\nimport { kebabCase } from \"change-case\";\nimport enquirer from \"enquirer\";\nimport { clean, valid } from \"semver\";\nimport type { InitArgs } from \"../types.js\";\nimport { setupRemoteDrive } from \"../utils/validate-remote-drive.js\";\n\nexport async function startInit(args: InitArgs) {\n const {\n namePositional,\n nameOption,\n packageManager,\n npm,\n pnpm,\n yarn,\n bun,\n tag,\n version,\n dev,\n staging,\n remoteDrive,\n } = args;\n\n let name = namePositional ?? nameOption;\n if (!name) {\n const { prompt } = enquirer;\n\n const result = await prompt<{ name: string }>([\n {\n type: \"input\",\n name: \"name\",\n message: \"What is the project name?\",\n required: true,\n result: (value) => kebabCase(value),\n },\n ]);\n name = result.name;\n }\n if (!name) {\n throw new Error(\"You must provide a name for your project.\");\n }\n\n if (version !== undefined && !valid(clean(version))) {\n throw new Error(`Invalid version: ${version}`);\n }\n\n handleMutuallyExclusiveOptions(\n {\n tag,\n version,\n dev,\n staging,\n },\n \"versioning strategy\",\n );\n\n handleMutuallyExclusiveOptions(\n {\n npm,\n pnpm,\n yarn,\n bun,\n packageManager,\n },\n \"package manager\",\n );\n\n const parsedPackageManager =\n parsePackageManager({\n npm,\n pnpm,\n yarn,\n bun,\n packageManager,\n }) ?? \"npm\";\n\n const parsedTag = parseTag({\n tag,\n dev,\n staging,\n });\n\n try {\n if (remoteDrive) {\n console.log(chalk.blue(\"\\n⏳ Setting up remote drive...\\n\"));\n await setupRemoteDrive(remoteDrive);\n console.log(chalk.green(\"\\n✅ Remote drive set up.\"));\n }\n\n console.log(chalk.bold(\"\\n🚀 Initializing a new project...\\n\"));\n await createProject({\n ...args,\n name,\n packageManager: parsedPackageManager,\n tag: parsedTag,\n });\n\n if (remoteDrive) {\n console.log();\n console.log(\"To link your project to GitHub:\");\n console.log();\n console.log(\" 1. Create a new repository on GitHub\");\n console.log(` 2. cd ${name}`);\n console.log(\" 3. git add . && git commit -m 'Initial commit'\");\n console.log(\" 4. git remote add origin <your-github-url>\");\n console.log(` 5. git push -u origin main`);\n console.log();\n }\n } catch (error) {\n console.error(\"\\n❌ Failed to initialize project: \\n\");\n throw error;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAUA,eAAsB,iBACpB,gBACkB;AAClB,KAAI;EAEF,MAAM,UAAU,eAAe,MAAM,IAAI,CAAC,KAAK;AAE/C,MAAI,CAAC,kBAAkB,eAAe,MAAM,KAAK,IAAI;AACnD,WAAQ,MAAM,iCAAiC;AAC/C,UAAO;;EAIT,MAAM,MAAM,IAAI,IAAI,eAAe;EACnC,MAAM,kBAAkB,GAAG,IAAI,SAAS,IAAI,IAAI,KAAK;EAErD,IAAI,YAAY,MAAM,kBAAkB,iBAAiB,QAAS;AAElE,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAQ,IACN,yEACD;AACD,OAAI;AACF,UAAM,oBAAoB,iBAAiB,SAAU,gBAAgB;AAGrE,gBAAY,MAAM,kBAAkB,iBAAiB,QAAS;AAE9D,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAQ,MACN,gEACD;AACD,YAAO;;AAGT,YAAQ,IAAI,gDAAgD;YACrD,aAAa;AACpB,YAAQ,MACN,8CACA,YACD;AACD,WAAO;;;AAIX,MAAI,UAAU,SAAS,EACrB,SAAQ,KACN,4HACD;AAKH,MAFqB,UAAU,MAAM,QAAQ,IAAI,UAAU,EAEzC;AAChB,WAAQ,MACN,oKACD;AACD,UAAO;;AAGT,SAAO;UACA,OAAO;AACd,UAAQ,MAAM,wCAAwC,MAAM;AAC5D,SAAO;;;;;AC5DX,eAAsB,UAAU,MAAgB;CAC9C,MAAM,EACJ,gBACA,YACA,gBACA,KACA,MACA,MACA,KACA,KACA,SACA,KACA,SACA,gBACE;CAEJ,IAAI,OAAO,kBAAkB;AAC7B,KAAI,CAAC,MAAM;EACT,MAAM,EAAE,WAAW;AAWnB,UATe,MAAM,OAAyB,CAC5C;GACE,MAAM;GACN,MAAM;GACN,SAAS;GACT,UAAU;GACV,SAAS,UAAU,UAAU,MAAM;GACpC,CACF,CAAC,EACY;;AAEhB,KAAI,CAAC,KACH,OAAM,IAAI,MAAM,4CAA4C;AAG9D,KAAI,YAAY,KAAA,KAAa,CAAC,MAAM,MAAM,QAAQ,CAAC,CACjD,OAAM,IAAI,MAAM,oBAAoB,UAAU;AAGhD,gCACE;EACE;EACA;EACA;EACA;EACD,EACD,sBACD;AAED,gCACE;EACE;EACA;EACA;EACA;EACA;EACD,EACD,kBACD;CAED,MAAM,uBACJ,oBAAoB;EAClB;EACA;EACA;EACA;EACA;EACD,CAAC,IAAI;CAER,MAAM,YAAY,SAAS;EACzB;EACA;EACA;EACD,CAAC;AAEF,KAAI;AACF,MAAI,aAAa;AACf,WAAQ,IAAI,MAAM,KAAK,mCAAmC,CAAC;AAC3D,SAAM,iBAAiB,YAAY;AACnC,WAAQ,IAAI,MAAM,MAAM,2BAA2B,CAAC;;AAGtD,UAAQ,IAAI,MAAM,KAAK,uCAAuC,CAAC;AAC/D,QAAM,cAAc;GAClB,GAAG;GACH;GACA,gBAAgB;GAChB,KAAK;GACN,CAAC;AAEF,MAAI,aAAa;AACf,WAAQ,KAAK;AACb,WAAQ,IAAI,kCAAkC;AAC9C,WAAQ,KAAK;AACb,WAAQ,IAAI,yCAAyC;AACrD,WAAQ,IAAI,WAAW,OAAO;AAC9B,WAAQ,IAAI,mDAAmD;AAC/D,WAAQ,IAAI,+CAA+C;AAC3D,WAAQ,IAAI,+BAA+B;AAC3C,WAAQ,KAAK;;UAER,OAAO;AACd,UAAQ,MAAM,uCAAuC;AACrD,QAAM"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { n as getProjectInfo } from "./utils-CFkM2mAC.mjs";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
//#region src/services/inspect.ts
|
|
4
|
+
function startInspect(args) {
|
|
5
|
+
if (args.debug) console.log(">>> command arguments", args);
|
|
6
|
+
const projectInfo = getProjectInfo(args.debug);
|
|
7
|
+
const { packageName } = args;
|
|
8
|
+
if (args.debug) console.log("\n>>> projectInfo", projectInfo);
|
|
9
|
+
try {
|
|
10
|
+
const loadManifest = (path) => JSON.parse(fs.readFileSync(path, "utf-8"));
|
|
11
|
+
const manifest = loadManifest(`${process.cwd()}/node_modules/${packageName}/dist/powerhouse.manifest.json`);
|
|
12
|
+
console.log(manifest.name);
|
|
13
|
+
if (manifest.documentModels) {
|
|
14
|
+
console.log("\nDocument Models:");
|
|
15
|
+
manifest.documentModels.forEach((model) => {
|
|
16
|
+
console.log(`- ${model.name} (${model.id})`);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
if (manifest.editors) {
|
|
20
|
+
console.log("\nEditors:");
|
|
21
|
+
manifest.editors.forEach((editor) => {
|
|
22
|
+
console.log(`- ${editor.name} (${editor.id})`);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (manifest.processors) {
|
|
26
|
+
console.log("\nProcessors:");
|
|
27
|
+
manifest.processors.forEach((processor) => {
|
|
28
|
+
console.log(`- ${processor.name} (${processor.id})`);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (manifest.subgraphs) {
|
|
32
|
+
console.log("\nSubgraphs:");
|
|
33
|
+
manifest.subgraphs.forEach((subgraph) => {
|
|
34
|
+
console.log(`- ${subgraph.name} (${subgraph.id})`);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
} catch (e) {
|
|
38
|
+
if (args.debug) console.error(e);
|
|
39
|
+
else console.log("No manifest found in the package");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { startInspect };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=inspect-C5s3gQIQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect-C5s3gQIQ.mjs","names":[],"sources":["../src/services/inspect.ts"],"sourcesContent":["import type { Manifest } from \"@powerhousedao/shared/document-model\";\nimport fs from \"node:fs\";\nimport type { InspectArgs } from \"../types.js\";\nimport { getProjectInfo } from \"../utils.js\";\nexport function startInspect(args: InspectArgs) {\n if (args.debug) {\n console.log(\">>> command arguments\", args);\n }\n\n const projectInfo = getProjectInfo(args.debug);\n const { packageName } = args;\n\n if (args.debug) {\n console.log(\"\\n>>> projectInfo\", projectInfo);\n }\n\n try {\n const loadManifest = (path: string) =>\n JSON.parse(fs.readFileSync(path, \"utf-8\")) as Manifest;\n const manifest = loadManifest(\n `${process.cwd()}/node_modules/${packageName}/dist/powerhouse.manifest.json`,\n );\n\n console.log(manifest.name);\n if (manifest.documentModels) {\n console.log(\"\\nDocument Models:\");\n manifest.documentModels.forEach((model) => {\n console.log(`- ${model.name} (${model.id})`);\n });\n }\n\n if (manifest.editors) {\n console.log(\"\\nEditors:\");\n manifest.editors.forEach((editor) => {\n console.log(`- ${editor.name} (${editor.id})`);\n });\n }\n\n if (manifest.processors) {\n console.log(\"\\nProcessors:\");\n manifest.processors.forEach((processor) => {\n console.log(`- ${processor.name} (${processor.id})`);\n });\n }\n\n if (manifest.subgraphs) {\n console.log(\"\\nSubgraphs:\");\n manifest.subgraphs.forEach((subgraph) => {\n console.log(`- ${subgraph.name} (${subgraph.id})`);\n });\n }\n } catch (e) {\n if (args.debug) {\n console.error(e);\n } else {\n console.log(\"No manifest found in the package\");\n }\n }\n}\n"],"mappings":";;;AAIA,SAAgB,aAAa,MAAmB;AAC9C,KAAI,KAAK,MACP,SAAQ,IAAI,yBAAyB,KAAK;CAG5C,MAAM,cAAc,eAAe,KAAK,MAAM;CAC9C,MAAM,EAAE,gBAAgB;AAExB,KAAI,KAAK,MACP,SAAQ,IAAI,qBAAqB,YAAY;AAG/C,KAAI;EACF,MAAM,gBAAgB,SACpB,KAAK,MAAM,GAAG,aAAa,MAAM,QAAQ,CAAC;EAC5C,MAAM,WAAW,aACf,GAAG,QAAQ,KAAK,CAAC,gBAAgB,YAAY,gCAC9C;AAED,UAAQ,IAAI,SAAS,KAAK;AAC1B,MAAI,SAAS,gBAAgB;AAC3B,WAAQ,IAAI,qBAAqB;AACjC,YAAS,eAAe,SAAS,UAAU;AACzC,YAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,GAAG;KAC5C;;AAGJ,MAAI,SAAS,SAAS;AACpB,WAAQ,IAAI,aAAa;AACzB,YAAS,QAAQ,SAAS,WAAW;AACnC,YAAQ,IAAI,KAAK,OAAO,KAAK,IAAI,OAAO,GAAG,GAAG;KAC9C;;AAGJ,MAAI,SAAS,YAAY;AACvB,WAAQ,IAAI,gBAAgB;AAC5B,YAAS,WAAW,SAAS,cAAc;AACzC,YAAQ,IAAI,KAAK,UAAU,KAAK,IAAI,UAAU,GAAG,GAAG;KACpD;;AAGJ,MAAI,SAAS,WAAW;AACtB,WAAQ,IAAI,eAAe;AAC3B,YAAS,UAAU,SAAS,aAAa;AACvC,YAAQ,IAAI,KAAK,SAAS,KAAK,IAAI,SAAS,GAAG,GAAG;KAClD;;UAEG,GAAG;AACV,MAAI,KAAK,MACP,SAAQ,MAAM,EAAE;MAEhB,SAAQ,IAAI,mCAAmC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { migrate } from "@powerhousedao/codegen";
|
|
2
|
+
//#region src/services/migrate.ts
|
|
3
|
+
async function startMigrate(args) {
|
|
4
|
+
const { version, debug } = args;
|
|
5
|
+
if (debug) console.log({ args });
|
|
6
|
+
await migrate(version);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { startMigrate };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=migrate-CIBhw4np.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-CIBhw4np.mjs","names":[],"sources":["../src/services/migrate.ts"],"sourcesContent":["import { migrate } from \"@powerhousedao/codegen\";\nimport type { MigrateArgs } from \"../types.js\";\n\nexport async function startMigrate(args: MigrateArgs) {\n const { version, debug } = args;\n if (debug) {\n console.log({ args });\n }\n await migrate(version);\n}\n"],"mappings":";;AAGA,eAAsB,aAAa,MAAmB;CACpD,MAAM,EAAE,SAAS,UAAU;AAC3B,KAAI,MACF,SAAQ,IAAI,EAAE,MAAM,CAAC;AAEvB,OAAM,QAAQ,QAAQ"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { writeCliDocsMarkdownFile } from "@powerhousedao/codegen/file-builders";
|
|
2
|
-
import process from "process";
|
|
3
2
|
import { accessToken } from "../src/commands/access-token.js";
|
|
4
3
|
import { build, connect, preview, studio } from "../src/commands/connect.js";
|
|
4
|
+
import { generateAllCmd } from "../src/commands/generate-all.js";
|
|
5
|
+
import { generateAppCmd } from "../src/commands/generate-app.js";
|
|
6
|
+
import { generateDocumentModelCmd } from "../src/commands/generate-document-model.js";
|
|
7
|
+
import { generateEditorCmd } from "../src/commands/generate-editor.js";
|
|
8
|
+
import { generateMigrationFileCmd } from "../src/commands/generate-migration-file.js";
|
|
9
|
+
import { generateProcessorCmd } from "../src/commands/generate-processor.js";
|
|
10
|
+
import { generateSubgraphCmd } from "../src/commands/generate-subgraph.js";
|
|
5
11
|
import { generate } from "../src/commands/generate.js";
|
|
6
12
|
import { inspect } from "../src/commands/inspect.js";
|
|
7
13
|
import { install } from "../src/commands/install.js";
|
|
@@ -15,6 +21,13 @@ import { vetra } from "../src/commands/vetra.js";
|
|
|
15
21
|
|
|
16
22
|
const commands = [
|
|
17
23
|
{ name: "generate", command: generate },
|
|
24
|
+
{ name: "all", command: generateAllCmd },
|
|
25
|
+
{ name: "document-model", command: generateDocumentModelCmd },
|
|
26
|
+
{ name: "editor", command: generateEditorCmd },
|
|
27
|
+
{ name: "app", command: generateAppCmd },
|
|
28
|
+
{ name: "processor", command: generateProcessorCmd },
|
|
29
|
+
{ name: "subgraph", command: generateSubgraphCmd },
|
|
30
|
+
{ name: "migration-file", command: generateMigrationFileCmd },
|
|
18
31
|
{ name: "vetra", command: vetra },
|
|
19
32
|
{ name: "connect", command: connect },
|
|
20
33
|
{ name: "connect studio", command: studio },
|
|
@@ -35,7 +48,7 @@ const cliDescription = phCli.description ?? "";
|
|
|
35
48
|
async function main() {
|
|
36
49
|
await writeCliDocsMarkdownFile({
|
|
37
50
|
filePath: "COMMANDS.md",
|
|
38
|
-
docsTitle:
|
|
51
|
+
docsTitle: `Powerhouse CLI Commands (${process.env.WORKSPACE_VERSION || process.env.npm_package_version})`,
|
|
39
52
|
docsIntroduction:
|
|
40
53
|
"This document provides detailed information about the available commands in the Powerhouse CLI.",
|
|
41
54
|
cliDescription,
|
|
@@ -43,9 +56,4 @@ async function main() {
|
|
|
43
56
|
});
|
|
44
57
|
}
|
|
45
58
|
|
|
46
|
-
main()
|
|
47
|
-
.then(() => process.exit(0))
|
|
48
|
-
.catch((e) => {
|
|
49
|
-
console.error(e);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
});
|
|
59
|
+
await main();
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Kysely, PostgresDialect } from "kysely";
|
|
2
|
+
import { Pool } from "pg";
|
|
3
|
+
import { REACTOR_SCHEMA, getMigrationStatus, runMigrations } from "@powerhousedao/reactor";
|
|
4
|
+
//#region src/services/switchboard-migrate.ts
|
|
5
|
+
function isPostgresUrl(url) {
|
|
6
|
+
return url.startsWith("postgresql://") || url.startsWith("postgres://");
|
|
7
|
+
}
|
|
8
|
+
async function runSwitchboardMigrations(options) {
|
|
9
|
+
const dbPath = options.dbPath ?? process.env.PH_REACTOR_DATABASE_URL ?? process.env.DATABASE_URL;
|
|
10
|
+
if (!dbPath || !isPostgresUrl(dbPath)) {
|
|
11
|
+
console.log("No PostgreSQL URL configured. Skipping migrations.");
|
|
12
|
+
console.log("(PGlite migrations are handled automatically on startup)");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
console.log(`Database: ${dbPath}`);
|
|
16
|
+
const db = new Kysely({ dialect: new PostgresDialect({ pool: new Pool({ connectionString: dbPath }) }) });
|
|
17
|
+
try {
|
|
18
|
+
if (options.statusOnly) {
|
|
19
|
+
console.log("\nChecking migration status...");
|
|
20
|
+
const migrations = await getMigrationStatus(db, REACTOR_SCHEMA);
|
|
21
|
+
console.log("\nMigration Status:");
|
|
22
|
+
console.log("=================");
|
|
23
|
+
for (const migration of migrations) {
|
|
24
|
+
const status = migration.executedAt ? `[OK] Executed at ${migration.executedAt.toISOString()}` : "[--] Pending";
|
|
25
|
+
console.log(`${status} - ${migration.name}`);
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
console.log("\nRunning migrations...");
|
|
29
|
+
const result = await runMigrations(db, REACTOR_SCHEMA);
|
|
30
|
+
if (!result.success) {
|
|
31
|
+
console.error("Migration failed:", result.error?.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
if (result.migrationsExecuted.length === 0) console.log("No migrations to run - database is up to date");
|
|
35
|
+
else {
|
|
36
|
+
console.log(`Successfully executed ${result.migrationsExecuted.length} migration(s):`);
|
|
37
|
+
for (const name of result.migrationsExecuted) console.log(` - ${name}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error("Error:", error instanceof Error ? error.message : String(error));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
} finally {
|
|
44
|
+
await db.destroy();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { runSwitchboardMigrations };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=switchboard-migrate-COGf5HBF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switchboard-migrate-COGf5HBF.mjs","names":[],"sources":["../src/services/switchboard-migrate.ts"],"sourcesContent":["import { Kysely, PostgresDialect } from \"kysely\";\nimport { Pool } from \"pg\";\nimport {\n runMigrations,\n getMigrationStatus,\n REACTOR_SCHEMA,\n} from \"@powerhousedao/reactor\";\n\ninterface MigrationOptions {\n dbPath?: string;\n statusOnly?: boolean;\n}\n\nfunction isPostgresUrl(url: string): boolean {\n return url.startsWith(\"postgresql://\") || url.startsWith(\"postgres://\");\n}\n\nexport async function runSwitchboardMigrations(\n options: MigrationOptions,\n): Promise<void> {\n const dbPath =\n options.dbPath ??\n process.env.PH_REACTOR_DATABASE_URL ??\n process.env.DATABASE_URL;\n\n if (!dbPath || !isPostgresUrl(dbPath)) {\n console.log(\"No PostgreSQL URL configured. Skipping migrations.\");\n console.log(\"(PGlite migrations are handled automatically on startup)\");\n return;\n }\n\n console.log(`Database: ${dbPath}`);\n\n const pool = new Pool({ connectionString: dbPath });\n\n const db = new Kysely<any>({\n dialect: new PostgresDialect({ pool }),\n });\n\n try {\n if (options.statusOnly) {\n console.log(\"\\nChecking migration status...\");\n const migrations = await getMigrationStatus(db, REACTOR_SCHEMA);\n\n console.log(\"\\nMigration Status:\");\n console.log(\"=================\");\n\n for (const migration of migrations) {\n const status = migration.executedAt\n ? `[OK] Executed at ${migration.executedAt.toISOString()}`\n : \"[--] Pending\";\n console.log(`${status} - ${migration.name}`);\n }\n } else {\n console.log(\"\\nRunning migrations...\");\n const result = await runMigrations(db, REACTOR_SCHEMA);\n\n if (!result.success) {\n console.error(\"Migration failed:\", result.error?.message);\n process.exit(1);\n }\n\n if (result.migrationsExecuted.length === 0) {\n console.log(\"No migrations to run - database is up to date\");\n } else {\n console.log(\n `Successfully executed ${result.migrationsExecuted.length} migration(s):`,\n );\n for (const name of result.migrationsExecuted) {\n console.log(` - ${name}`);\n }\n }\n }\n } catch (error) {\n console.error(\n \"Error:\",\n error instanceof Error ? error.message : String(error),\n );\n process.exit(1);\n } finally {\n await db.destroy();\n }\n}\n"],"mappings":";;;;AAaA,SAAS,cAAc,KAAsB;AAC3C,QAAO,IAAI,WAAW,gBAAgB,IAAI,IAAI,WAAW,cAAc;;AAGzE,eAAsB,yBACpB,SACe;CACf,MAAM,SACJ,QAAQ,UACR,QAAQ,IAAI,2BACZ,QAAQ,IAAI;AAEd,KAAI,CAAC,UAAU,CAAC,cAAc,OAAO,EAAE;AACrC,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,IAAI,2DAA2D;AACvE;;AAGF,SAAQ,IAAI,aAAa,SAAS;CAIlC,MAAM,KAAK,IAAI,OAAY,EACzB,SAAS,IAAI,gBAAgB,EAAE,MAHpB,IAAI,KAAK,EAAE,kBAAkB,QAAQ,CAAC,EAGZ,CAAC,EACvC,CAAC;AAEF,KAAI;AACF,MAAI,QAAQ,YAAY;AACtB,WAAQ,IAAI,iCAAiC;GAC7C,MAAM,aAAa,MAAM,mBAAmB,IAAI,eAAe;AAE/D,WAAQ,IAAI,sBAAsB;AAClC,WAAQ,IAAI,oBAAoB;AAEhC,QAAK,MAAM,aAAa,YAAY;IAClC,MAAM,SAAS,UAAU,aACrB,oBAAoB,UAAU,WAAW,aAAa,KACtD;AACJ,YAAQ,IAAI,GAAG,OAAO,KAAK,UAAU,OAAO;;SAEzC;AACL,WAAQ,IAAI,0BAA0B;GACtC,MAAM,SAAS,MAAM,cAAc,IAAI,eAAe;AAEtD,OAAI,CAAC,OAAO,SAAS;AACnB,YAAQ,MAAM,qBAAqB,OAAO,OAAO,QAAQ;AACzD,YAAQ,KAAK,EAAE;;AAGjB,OAAI,OAAO,mBAAmB,WAAW,EACvC,SAAQ,IAAI,gDAAgD;QACvD;AACL,YAAQ,IACN,yBAAyB,OAAO,mBAAmB,OAAO,gBAC3D;AACD,SAAK,MAAM,QAAQ,OAAO,mBACxB,SAAQ,IAAI,OAAO,OAAO;;;UAIzB,OAAO;AACd,UAAQ,MACN,UACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CACvD;AACD,UAAQ,KAAK,EAAE;WACP;AACR,QAAM,GAAG,SAAS"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { startSwitchboard } from "@powerhousedao/switchboard/server";
|
|
3
|
+
//#region src/services/switchboard.ts
|
|
4
|
+
const defaultSwitchboardOptions = {
|
|
5
|
+
port: 4001,
|
|
6
|
+
dbPath: path.join(process.cwd(), ".ph/read-model.db"),
|
|
7
|
+
drive: {
|
|
8
|
+
id: "powerhouse",
|
|
9
|
+
slug: "powerhouse",
|
|
10
|
+
global: {
|
|
11
|
+
name: "Powerhouse",
|
|
12
|
+
icon: "https://ipfs.io/ipfs/QmcaTDBYn8X2psGaXe7iQ6qd8q6oqHLgxvMX9yXf7f9uP7"
|
|
13
|
+
},
|
|
14
|
+
local: {
|
|
15
|
+
availableOffline: true,
|
|
16
|
+
listeners: [],
|
|
17
|
+
sharingType: "public",
|
|
18
|
+
triggers: []
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
mcp: true
|
|
22
|
+
};
|
|
23
|
+
function getDefaultVetraSwitchboardOptions(vetraDriveId) {
|
|
24
|
+
return {
|
|
25
|
+
port: 4001,
|
|
26
|
+
dbPath: path.join(process.cwd(), ".ph/read-model.db"),
|
|
27
|
+
drive: {
|
|
28
|
+
id: vetraDriveId,
|
|
29
|
+
slug: vetraDriveId,
|
|
30
|
+
global: {
|
|
31
|
+
name: "Vetra",
|
|
32
|
+
icon: "https://azure-elderly-tortoise-212.mypinata.cloud/ipfs/bafkreibf2xokjqqtomqjd2w2xxmmhvogq4262csevclxh6sbrjgmjfre5u"
|
|
33
|
+
},
|
|
34
|
+
preferredEditor: "vetra-drive-app",
|
|
35
|
+
local: {
|
|
36
|
+
availableOffline: true,
|
|
37
|
+
listeners: [],
|
|
38
|
+
sharingType: "public",
|
|
39
|
+
triggers: []
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function startSwitchboard$1(options, logger) {
|
|
45
|
+
const { packages: packagesString, remoteDrives, useVetraDrive, vetraDriveId, useIdentity, keypairPath, requireIdentity, ...serverOptions } = options;
|
|
46
|
+
const defaultOptions = useVetraDrive ? getDefaultVetraSwitchboardOptions(vetraDriveId) : defaultSwitchboardOptions;
|
|
47
|
+
const identity = useIdentity || keypairPath || requireIdentity ? {
|
|
48
|
+
keypairPath,
|
|
49
|
+
requireExisting: requireIdentity
|
|
50
|
+
} : void 0;
|
|
51
|
+
const packages = packagesString?.split(",");
|
|
52
|
+
return await startSwitchboard(remoteDrives.length > 0 ? {
|
|
53
|
+
...defaultOptions,
|
|
54
|
+
drive: void 0,
|
|
55
|
+
...serverOptions,
|
|
56
|
+
remoteDrives,
|
|
57
|
+
identity,
|
|
58
|
+
packages,
|
|
59
|
+
logger
|
|
60
|
+
} : {
|
|
61
|
+
...defaultOptions,
|
|
62
|
+
...serverOptions,
|
|
63
|
+
remoteDrives,
|
|
64
|
+
identity,
|
|
65
|
+
packages,
|
|
66
|
+
logger
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { startSwitchboard$1 as n, defaultSwitchboardOptions as t };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=switchboard-vPgnxFrM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switchboard-vPgnxFrM.mjs","names":["startSwitchboard","startSwitchboardServer"],"sources":["../src/services/switchboard.ts"],"sourcesContent":["import type {\n IdentityOptions,\n StartServerOptions,\n} from \"@powerhousedao/switchboard/server\";\nimport { startSwitchboard as startSwitchboardServer } from \"@powerhousedao/switchboard/server\";\nimport type { ILogger } from \"document-model\";\nimport path from \"node:path\";\nimport type { SwitchboardArgs } from \"../types.js\";\n\nexport const defaultSwitchboardOptions = {\n port: 4001,\n dbPath: path.join(process.cwd(), \".ph/read-model.db\"),\n drive: {\n id: \"powerhouse\",\n slug: \"powerhouse\",\n global: {\n name: \"Powerhouse\",\n icon: \"https://ipfs.io/ipfs/QmcaTDBYn8X2psGaXe7iQ6qd8q6oqHLgxvMX9yXf7f9uP7\",\n },\n local: {\n availableOffline: true,\n listeners: [],\n sharingType: \"public\",\n triggers: [],\n },\n },\n mcp: true,\n} satisfies StartServerOptions;\n\nfunction getDefaultVetraSwitchboardOptions(\n vetraDriveId: string,\n): Partial<StartServerOptions> {\n return {\n port: 4001,\n dbPath: path.join(process.cwd(), \".ph/read-model.db\"),\n drive: {\n id: vetraDriveId,\n slug: vetraDriveId,\n global: {\n name: \"Vetra\",\n icon: \"https://azure-elderly-tortoise-212.mypinata.cloud/ipfs/bafkreibf2xokjqqtomqjd2w2xxmmhvogq4262csevclxh6sbrjgmjfre5u\",\n },\n preferredEditor: \"vetra-drive-app\",\n local: {\n availableOffline: true,\n listeners: [],\n sharingType: \"public\",\n triggers: [],\n },\n },\n };\n}\n\nexport async function startSwitchboard(\n options: SwitchboardArgs & { strictPort?: boolean },\n logger?: ILogger,\n) {\n const {\n packages: packagesString,\n remoteDrives,\n useVetraDrive,\n vetraDriveId,\n useIdentity,\n keypairPath,\n requireIdentity,\n ...serverOptions\n } = options;\n\n // Choose the appropriate default configuration\n const defaultOptions = useVetraDrive\n ? getDefaultVetraSwitchboardOptions(vetraDriveId)\n : defaultSwitchboardOptions;\n\n // Build identity options if enabled\n const identity: IdentityOptions | undefined =\n useIdentity || keypairPath || requireIdentity\n ? {\n keypairPath,\n requireExisting: requireIdentity,\n }\n : undefined;\n\n const packages = packagesString?.split(\",\");\n\n // Only include the default drive if no remote drives are provided\n const finalOptions =\n remoteDrives.length > 0\n ? {\n ...defaultOptions,\n drive: undefined, // Don't create default drive when syncing with remote\n ...serverOptions,\n remoteDrives,\n identity,\n packages,\n logger,\n }\n : {\n ...defaultOptions,\n ...serverOptions,\n remoteDrives,\n identity,\n packages,\n logger,\n };\n\n const reactor = await startSwitchboardServer(finalOptions);\n\n return reactor;\n}\n"],"mappings":";;;AASA,MAAa,4BAA4B;CACvC,MAAM;CACN,QAAQ,KAAK,KAAK,QAAQ,KAAK,EAAE,oBAAoB;CACrD,OAAO;EACL,IAAI;EACJ,MAAM;EACN,QAAQ;GACN,MAAM;GACN,MAAM;GACP;EACD,OAAO;GACL,kBAAkB;GAClB,WAAW,EAAE;GACb,aAAa;GACb,UAAU,EAAE;GACb;EACF;CACD,KAAK;CACN;AAED,SAAS,kCACP,cAC6B;AAC7B,QAAO;EACL,MAAM;EACN,QAAQ,KAAK,KAAK,QAAQ,KAAK,EAAE,oBAAoB;EACrD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM;IACP;GACD,iBAAiB;GACjB,OAAO;IACL,kBAAkB;IAClB,WAAW,EAAE;IACb,aAAa;IACb,UAAU,EAAE;IACb;GACF;EACF;;AAGH,eAAsBA,mBACpB,SACA,QACA;CACA,MAAM,EACJ,UAAU,gBACV,cACA,eACA,cACA,aACA,aACA,iBACA,GAAG,kBACD;CAGJ,MAAM,iBAAiB,gBACnB,kCAAkC,aAAa,GAC/C;CAGJ,MAAM,WACJ,eAAe,eAAe,kBAC1B;EACE;EACA,iBAAiB;EAClB,GACD,KAAA;CAEN,MAAM,WAAW,gBAAgB,MAAM,IAAI;AAyB3C,QAFgB,MAAMC,iBAnBpB,aAAa,SAAS,IAClB;EACE,GAAG;EACH,OAAO,KAAA;EACP,GAAG;EACH;EACA;EACA;EACA;EACD,GACD;EACE,GAAG;EACH,GAAG;EACH;EACA;EACA;EACA;EACD,CAEmD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import path, { dirname } from "node:path";
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
//#region src/utils.ts
|
|
6
|
+
const POWERHOUSE_CONFIG_FILE = "powerhouse.config.json";
|
|
7
|
+
const POWERHOUSE_GLOBAL_DIR = path.join(homedir(), ".ph");
|
|
8
|
+
const packageManagers = {
|
|
9
|
+
bun: {
|
|
10
|
+
globalPathRegexp: /[\\/].bun[\\/]/,
|
|
11
|
+
installCommand: "bun add {{dependency}}",
|
|
12
|
+
uninstallCommand: "bun remove {{dependency}}",
|
|
13
|
+
workspaceOption: "",
|
|
14
|
+
lockfile: "bun.lock",
|
|
15
|
+
updateCommand: "bun update {{dependency}}",
|
|
16
|
+
buildAffected: "bun run build:affected"
|
|
17
|
+
},
|
|
18
|
+
pnpm: {
|
|
19
|
+
globalPathRegexp: /[\\/]pnpm[\\/]/,
|
|
20
|
+
installCommand: "pnpm add {{dependency}}",
|
|
21
|
+
uninstallCommand: "pnpm remove {{dependency}}",
|
|
22
|
+
workspaceOption: "--workspace-root",
|
|
23
|
+
lockfile: "pnpm-lock.yaml",
|
|
24
|
+
updateCommand: "pnpm update {{dependency}}",
|
|
25
|
+
buildAffected: "pnpm run build:affected"
|
|
26
|
+
},
|
|
27
|
+
yarn: {
|
|
28
|
+
globalPathRegexp: /[\\/]yarn[\\/]/,
|
|
29
|
+
installCommand: "yarn add {{dependency}}",
|
|
30
|
+
uninstallCommand: "yarn remove {{dependency}}",
|
|
31
|
+
workspaceOption: "-W",
|
|
32
|
+
lockfile: "yarn.lock",
|
|
33
|
+
updateCommand: "yarn upgrade {{dependency}}",
|
|
34
|
+
buildAffected: "yarn run build:affected"
|
|
35
|
+
},
|
|
36
|
+
npm: {
|
|
37
|
+
installCommand: "npm install {{dependency}}",
|
|
38
|
+
uninstallCommand: "npm uninstall {{dependency}}",
|
|
39
|
+
workspaceOption: "",
|
|
40
|
+
lockfile: "package-lock.json",
|
|
41
|
+
updateCommand: "npm update {{dependency}} --save",
|
|
42
|
+
buildAffected: "npm run build:affected"
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
function defaultPathValidation() {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
function isPowerhouseProject(dir) {
|
|
49
|
+
const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);
|
|
50
|
+
return fs.existsSync(powerhouseConfigPath);
|
|
51
|
+
}
|
|
52
|
+
function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
|
|
53
|
+
const packageJsonPath = path.join(dir, "package.json");
|
|
54
|
+
if (fs.existsSync(packageJsonPath) && pathValidation(dir)) return dir;
|
|
55
|
+
const parentDir = dirname(dir);
|
|
56
|
+
if (parentDir === dir) return null;
|
|
57
|
+
return findNodeProjectRoot(parentDir, pathValidation);
|
|
58
|
+
}
|
|
59
|
+
function getProjectInfo(debug) {
|
|
60
|
+
const currentPath = process.cwd();
|
|
61
|
+
if (debug) console.log(">>> currentPath", currentPath);
|
|
62
|
+
const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);
|
|
63
|
+
if (!projectPath) return {
|
|
64
|
+
isGlobal: true,
|
|
65
|
+
path: POWERHOUSE_GLOBAL_DIR,
|
|
66
|
+
packageManager: getPackageManagerFromLockfile(POWERHOUSE_GLOBAL_DIR)
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
isGlobal: false,
|
|
70
|
+
path: projectPath,
|
|
71
|
+
packageManager: getPackageManagerFromLockfile(projectPath)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generates a unique drive ID based on the project path.
|
|
76
|
+
* The same project path will always generate the same ID.
|
|
77
|
+
* @param name - The name prefix for the drive ID (e.g., "vetra", "powerhouse")
|
|
78
|
+
* @returns A unique drive ID in the format "{name}-{hash}"
|
|
79
|
+
*/
|
|
80
|
+
function generateProjectDriveId(name) {
|
|
81
|
+
const projectInfo = getProjectInfo();
|
|
82
|
+
return `${name}-${crypto.createHash("sha256").update(projectInfo.path).digest("hex").substring(0, 8)}`;
|
|
83
|
+
}
|
|
84
|
+
function getPackageManagerFromLockfile(dir) {
|
|
85
|
+
if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) return "pnpm";
|
|
86
|
+
else if (fs.existsSync(path.join(dir, packageManagers.yarn.lockfile))) return "yarn";
|
|
87
|
+
else if (fs.existsSync(path.join(dir, packageManagers.bun.lockfile))) return "bun";
|
|
88
|
+
return "npm";
|
|
89
|
+
}
|
|
90
|
+
function updatePackagesArray(currentPackages = [], dependencies, task = "install", provider = "registry") {
|
|
91
|
+
const isInstall = task === "install";
|
|
92
|
+
const mappedPackages = dependencies.map((dep) => ({
|
|
93
|
+
packageName: dep.name,
|
|
94
|
+
version: dep.version,
|
|
95
|
+
provider
|
|
96
|
+
}));
|
|
97
|
+
if (isInstall) return [...currentPackages.filter((pkg) => !dependencies.find((dep) => dep.name === pkg.packageName)), ...mappedPackages];
|
|
98
|
+
return currentPackages.filter((pkg) => !dependencies.map((dep) => dep.name).includes(pkg.packageName));
|
|
99
|
+
}
|
|
100
|
+
function updateConfigFile(dependencies, projectPath, task = "install", provider = "registry") {
|
|
101
|
+
const configPath = path.join(projectPath, POWERHOUSE_CONFIG_FILE);
|
|
102
|
+
if (!fs.existsSync(configPath)) throw new Error(`powerhouse.config.json file not found. projectPath: ${projectPath}`);
|
|
103
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
104
|
+
const updatedConfig = {
|
|
105
|
+
...config,
|
|
106
|
+
packages: updatePackagesArray(config.packages, dependencies, task, provider)
|
|
107
|
+
};
|
|
108
|
+
fs.writeFileSync(configPath, JSON.stringify(updatedConfig, null, 2));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Updates the styles.css file to include imports for newly installed packages
|
|
112
|
+
* @param dependencies - Array of dependencies that were installed
|
|
113
|
+
* @param projectPath - Path to the project root
|
|
114
|
+
*/
|
|
115
|
+
function updateStylesFile(dependencies, projectPath) {
|
|
116
|
+
const stylesPath = path.join(projectPath, "style.css");
|
|
117
|
+
if (!fs.existsSync(stylesPath)) {
|
|
118
|
+
console.warn("⚠️ Warning: style.css file not found in project root");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const currentStyles = fs.readFileSync(stylesPath, "utf-8");
|
|
122
|
+
let updatedStyles = currentStyles;
|
|
123
|
+
for (const dep of dependencies) {
|
|
124
|
+
const cssPath = `./node_modules/${dep.name}/dist/style.css`;
|
|
125
|
+
const fullCssPath = path.join(projectPath, cssPath);
|
|
126
|
+
const importStatement = `@import '${cssPath}';`;
|
|
127
|
+
if (!fs.existsSync(fullCssPath)) {
|
|
128
|
+
console.warn(`⚠️ Warning: CSS file not found at ${cssPath}`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (currentStyles.includes(importStatement)) continue;
|
|
132
|
+
const importLines = currentStyles.split("\n").filter((line) => line.trim().startsWith("@import"));
|
|
133
|
+
const lastImport = importLines[importLines.length - 1];
|
|
134
|
+
if (lastImport) updatedStyles = currentStyles.replace(lastImport, `${lastImport}\n${importStatement}`);
|
|
135
|
+
else updatedStyles = `${importStatement}\n${currentStyles}`;
|
|
136
|
+
}
|
|
137
|
+
if (updatedStyles !== currentStyles) fs.writeFileSync(stylesPath, updatedStyles);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Removes CSS imports for uninstalled packages from styles.css
|
|
141
|
+
*/
|
|
142
|
+
function removeStylesImports(dependencies, projectPath) {
|
|
143
|
+
const stylesPath = path.join(projectPath, "style.css");
|
|
144
|
+
if (!fs.existsSync(stylesPath)) {
|
|
145
|
+
console.warn("⚠️ Warning: style.css file not found in project root");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const currentStyles = fs.readFileSync(stylesPath, "utf-8");
|
|
149
|
+
let updatedStyles = currentStyles;
|
|
150
|
+
for (const dep of dependencies) {
|
|
151
|
+
const importStatement = `@import '${`./node_modules/${dep.name}/dist/style.css`}';`;
|
|
152
|
+
const lines = updatedStyles.split("\n");
|
|
153
|
+
const filteredLines = lines.filter((line) => !line.trim().includes(importStatement));
|
|
154
|
+
if (filteredLines.length !== lines.length) updatedStyles = filteredLines.join("\n");
|
|
155
|
+
}
|
|
156
|
+
if (updatedStyles !== currentStyles) fs.writeFileSync(stylesPath, updatedStyles);
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { updateStylesFile as a, updateConfigFile as i, getProjectInfo as n, removeStylesImports as r, generateProjectDriveId as t };
|
|
160
|
+
|
|
161
|
+
//# sourceMappingURL=utils-CFkM2mAC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CFkM2mAC.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { PowerhouseConfig } from \"@powerhousedao/config\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path, { dirname } from \"node:path\";\nexport const POWERHOUSE_CONFIG_FILE = \"powerhouse.config.json\";\nexport const POWERHOUSE_GLOBAL_DIR = path.join(homedir(), \".ph\");\nexport const SUPPORTED_PACKAGE_MANAGERS = [\"npm\", \"yarn\", \"pnpm\", \"bun\"];\n\nexport const packageManagers = {\n bun: {\n globalPathRegexp: /[\\\\/].bun[\\\\/]/,\n installCommand: \"bun add {{dependency}}\",\n uninstallCommand: \"bun remove {{dependency}}\",\n workspaceOption: \"\",\n lockfile: \"bun.lock\",\n updateCommand: \"bun update {{dependency}}\",\n buildAffected: \"bun run build:affected\",\n },\n pnpm: {\n globalPathRegexp: /[\\\\/]pnpm[\\\\/]/,\n installCommand: \"pnpm add {{dependency}}\",\n uninstallCommand: \"pnpm remove {{dependency}}\",\n workspaceOption: \"--workspace-root\",\n lockfile: \"pnpm-lock.yaml\",\n updateCommand: \"pnpm update {{dependency}}\",\n buildAffected: \"pnpm run build:affected\",\n },\n yarn: {\n globalPathRegexp: /[\\\\/]yarn[\\\\/]/,\n installCommand: \"yarn add {{dependency}}\",\n uninstallCommand: \"yarn remove {{dependency}}\",\n workspaceOption: \"-W\",\n lockfile: \"yarn.lock\",\n updateCommand: \"yarn upgrade {{dependency}}\",\n buildAffected: \"yarn run build:affected\",\n },\n npm: {\n installCommand: \"npm install {{dependency}}\",\n uninstallCommand: \"npm uninstall {{dependency}}\",\n workspaceOption: \"\",\n lockfile: \"package-lock.json\",\n updateCommand: \"npm update {{dependency}} --save\",\n buildAffected: \"npm run build:affected\",\n },\n};\n\ntype PathValidation = (dir: string) => boolean;\n\nexport type PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nexport type ProjectInfo = {\n isGlobal: boolean;\n path: string;\n packageManager: PackageManager;\n};\n\nexport function defaultPathValidation() {\n return true;\n}\n\nexport function isPowerhouseProject(dir: string) {\n const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);\n\n return fs.existsSync(powerhouseConfigPath);\n}\n\nexport function findNodeProjectRoot(\n dir: string,\n pathValidation: PathValidation = defaultPathValidation,\n) {\n const packageJsonPath = path.join(dir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath) && pathValidation(dir)) {\n return dir;\n }\n\n const parentDir = dirname(dir);\n\n if (parentDir === dir) {\n return null;\n }\n\n return findNodeProjectRoot(parentDir, pathValidation);\n}\n\nexport function getProjectInfo(debug?: boolean): ProjectInfo {\n const currentPath = process.cwd();\n\n if (debug) {\n console.log(\">>> currentPath\", currentPath);\n }\n\n const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);\n\n if (!projectPath) {\n return {\n isGlobal: true,\n path: POWERHOUSE_GLOBAL_DIR,\n packageManager: getPackageManagerFromLockfile(POWERHOUSE_GLOBAL_DIR),\n };\n }\n\n return {\n isGlobal: false,\n path: projectPath,\n packageManager: getPackageManagerFromLockfile(projectPath),\n };\n}\n\n/**\n * Generates a unique drive ID based on the project path.\n * The same project path will always generate the same ID.\n * @param name - The name prefix for the drive ID (e.g., \"vetra\", \"powerhouse\")\n * @returns A unique drive ID in the format \"{name}-{hash}\"\n */\nexport function generateProjectDriveId(name: string): string {\n const projectInfo = getProjectInfo();\n const hash = crypto\n .createHash(\"sha256\")\n .update(projectInfo.path)\n .digest(\"hex\");\n const shortHash = hash.substring(0, 8);\n return `${name}-${shortHash}`;\n}\n\nexport function getPackageManagerFromLockfile(dir: string): PackageManager {\n if (fs.existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {\n return \"pnpm\";\n } else if (fs.existsSync(path.join(dir, packageManagers.yarn.lockfile))) {\n return \"yarn\";\n } else if (fs.existsSync(path.join(dir, packageManagers.bun.lockfile))) {\n return \"bun\";\n }\n\n return \"npm\";\n}\n\nexport function updatePackagesArray(\n currentPackages: PowerhouseConfig[\"packages\"] = [],\n dependencies: { name: string; version: string | undefined }[],\n task: \"install\" | \"uninstall\" = \"install\",\n provider: \"registry\" | \"local\" = \"registry\",\n): PowerhouseConfig[\"packages\"] {\n const isInstall = task === \"install\";\n const mappedPackages = dependencies.map((dep) => ({\n packageName: dep.name,\n version: dep.version,\n provider,\n }));\n\n if (isInstall) {\n // Overwrite existing package if version is different\n const filteredPackages = currentPackages.filter(\n (pkg) => !dependencies.find((dep) => dep.name === pkg.packageName),\n );\n return [...filteredPackages, ...mappedPackages];\n }\n\n return currentPackages.filter(\n (pkg) => !dependencies.map((dep) => dep.name).includes(pkg.packageName),\n );\n}\n\n// Modify updateConfigFile to use the new function\nexport function updateConfigFile(\n dependencies: { name: string; version: string | undefined }[],\n projectPath: string,\n task: \"install\" | \"uninstall\" = \"install\",\n provider: \"registry\" | \"local\" = \"registry\",\n) {\n const configPath = path.join(projectPath, POWERHOUSE_CONFIG_FILE);\n\n if (!fs.existsSync(configPath)) {\n throw new Error(\n `powerhouse.config.json file not found. projectPath: ${projectPath}`,\n );\n }\n\n const config = JSON.parse(\n fs.readFileSync(configPath, \"utf-8\"),\n ) as PowerhouseConfig;\n\n const updatedConfig: PowerhouseConfig = {\n ...config,\n packages: updatePackagesArray(\n config.packages,\n dependencies,\n task,\n provider,\n ),\n };\n\n fs.writeFileSync(configPath, JSON.stringify(updatedConfig, null, 2));\n}\n\n/**\n * Recursively searches for a specific file by traversing up the directory tree.\n * Starting from the given path, it checks each parent directory until it finds\n * the target file or reaches the root directory.\n *\n * @param startPath - The absolute path of the directory to start searching from\n * @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')\n * @returns The absolute path of the directory containing the target file, or null if not found\n *\n * @example\n * // Find the workspace root directory\n * const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');\n *\n * // Find the nearest package.json\n * const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');\n */\nexport const findContainerDirectory = (\n startPath: string,\n targetFile: string,\n): string | null => {\n const filePath = path.join(startPath, targetFile);\n\n if (fs.existsSync(filePath)) {\n return startPath;\n }\n\n const parentDir = path.dirname(startPath);\n\n //reached the root directory and haven't found the file\n if (parentDir === startPath) {\n return null;\n }\n\n return findContainerDirectory(parentDir, targetFile);\n};\n\n/**\n * Updates the styles.css file to include imports for newly installed packages\n * @param dependencies - Array of dependencies that were installed\n * @param projectPath - Path to the project root\n */\nexport function updateStylesFile(\n dependencies: { name: string; version: string | undefined }[],\n projectPath: string,\n) {\n const stylesPath = path.join(projectPath, \"style.css\");\n\n // Check if styles.css exists\n if (!fs.existsSync(stylesPath)) {\n console.warn(\"⚠️ Warning: style.css file not found in project root\");\n return;\n }\n\n const currentStyles = fs.readFileSync(stylesPath, \"utf-8\");\n let updatedStyles = currentStyles;\n\n for (const dep of dependencies) {\n const cssPath = `./node_modules/${dep.name}/dist/style.css`;\n const fullCssPath = path.join(projectPath, cssPath);\n const importStatement = `@import '${cssPath}';`;\n\n // Check if the CSS file exists\n if (!fs.existsSync(fullCssPath)) {\n console.warn(`⚠️ Warning: CSS file not found at ${cssPath}`);\n continue;\n }\n\n // Check if import already exists\n if (currentStyles.includes(importStatement)) {\n continue;\n }\n\n // Find the last @import statement\n const importLines = currentStyles\n .split(\"\\n\")\n .filter((line) => line.trim().startsWith(\"@import\"));\n const lastImport = importLines[importLines.length - 1];\n\n if (lastImport) {\n // Insert new import after the last existing import\n updatedStyles = currentStyles.replace(\n lastImport,\n `${lastImport}\\n${importStatement}`,\n );\n } else {\n // If no imports exist, add at the top of the file\n updatedStyles = `${importStatement}\\n${currentStyles}`;\n }\n }\n\n // Only write if changes were made\n if (updatedStyles !== currentStyles) {\n fs.writeFileSync(stylesPath, updatedStyles);\n }\n}\n\n/**\n * Removes CSS imports for uninstalled packages from styles.css\n */\nexport function removeStylesImports(\n dependencies: { name: string; version: string | undefined }[],\n projectPath: string,\n) {\n const stylesPath = path.join(projectPath, \"style.css\");\n\n // Check if styles.css exists\n if (!fs.existsSync(stylesPath)) {\n console.warn(\"⚠️ Warning: style.css file not found in project root\");\n return;\n }\n\n const currentStyles = fs.readFileSync(stylesPath, \"utf-8\");\n let updatedStyles = currentStyles;\n\n for (const dep of dependencies) {\n const cssPath = `./node_modules/${dep.name}/dist/style.css`;\n const importStatement = `@import '${cssPath}';`;\n\n // Remove the import line if it exists\n const lines = updatedStyles.split(\"\\n\");\n const filteredLines = lines.filter(\n (line) => !line.trim().includes(importStatement),\n );\n\n if (filteredLines.length !== lines.length) {\n updatedStyles = filteredLines.join(\"\\n\");\n }\n }\n\n // Only write if changes were made\n if (updatedStyles !== currentStyles) {\n fs.writeFileSync(stylesPath, updatedStyles);\n }\n}\n"],"mappings":"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"}
|