ph-cmd 5.0.0-staging.9 → 5.0.1-staging.10
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/README.md +7 -2
- package/dist/src/cli.js +12 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/__tests__/update.test.js.map +1 -1
- package/dist/src/commands/__tests__/use.test.js +43 -24
- package/dist/src/commands/__tests__/use.test.js.map +1 -1
- package/dist/src/commands/checkout.d.ts +9 -0
- package/dist/src/commands/checkout.d.ts.map +1 -0
- package/dist/src/commands/checkout.js +37 -0
- package/dist/src/commands/checkout.js.map +1 -0
- package/dist/src/commands/forward.d.ts.map +1 -1
- package/dist/src/commands/forward.js +5 -2
- package/dist/src/commands/forward.js.map +1 -1
- package/dist/src/commands/help.d.ts +1 -1
- package/dist/src/commands/help.d.ts.map +1 -1
- package/dist/src/commands/index.d.ts +8 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +3 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts +4 -2
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +44 -8
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/setup-globals.d.ts +3 -2
- package/dist/src/commands/setup-globals.d.ts.map +1 -1
- package/dist/src/commands/setup-globals.js +2 -1
- package/dist/src/commands/setup-globals.js.map +1 -1
- package/dist/src/commands/update.d.ts +2 -2
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +1 -1
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/use.d.ts +3 -3
- package/dist/src/commands/use.d.ts.map +1 -1
- package/dist/src/commands/use.js +2 -1
- package/dist/src/commands/use.js.map +1 -1
- package/dist/src/commands/version.d.ts +1 -1
- package/dist/src/commands/version.d.ts.map +1 -1
- package/dist/src/commands/version.js +1 -0
- package/dist/src/commands/version.js.map +1 -1
- package/dist/src/help.d.ts +5 -1
- package/dist/src/help.d.ts.map +1 -1
- package/dist/src/help.js +37 -4
- package/dist/src/help.js.map +1 -1
- package/dist/src/utils/constants.d.ts +53 -0
- package/dist/src/utils/constants.d.ts.map +1 -0
- package/dist/src/utils/constants.js +72 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/dependencies.d.ts +4 -0
- package/dist/src/utils/dependencies.d.ts.map +1 -0
- package/dist/src/utils/dependencies.js +61 -0
- package/dist/src/utils/dependencies.js.map +1 -0
- package/dist/src/utils/help-formatting.d.ts +1 -1
- package/dist/src/utils/help-formatting.d.ts.map +1 -1
- package/dist/src/utils/help-formatting.js +1 -1
- package/dist/src/utils/help-formatting.js.map +1 -1
- package/dist/src/utils/help.d.ts +31 -0
- package/dist/src/utils/help.d.ts.map +1 -0
- package/dist/src/utils/help.js +72 -0
- package/dist/src/utils/help.js.map +1 -0
- package/dist/src/utils/index.d.ts +6 -130
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +5 -367
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/package-manager.d.ts +34 -0
- package/dist/src/utils/package-manager.d.ts.map +1 -0
- package/dist/src/utils/package-manager.js +175 -0
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/types.d.ts +21 -0
- package/dist/src/utils/types.d.ts.map +1 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/src/utils/validate-remote-drive-checkout.d.ts +7 -0
- package/dist/src/utils/validate-remote-drive-checkout.d.ts.map +1 -0
- package/dist/src/utils/validate-remote-drive-checkout.js +45 -0
- package/dist/src/utils/validate-remote-drive-checkout.js.map +1 -0
- package/dist/src/utils/validate-remote-drive.d.ts +6 -0
- package/dist/src/utils/validate-remote-drive.d.ts.map +1 -0
- package/dist/src/utils/validate-remote-drive.js +37 -0
- package/dist/src/utils/validate-remote-drive.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -11
- 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
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { createProject, parseTag } from "@powerhousedao/codegen";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import path, { dirname } from "node:path";
|
|
5
|
+
import { HOME_DIR, PH_BIN_PATH, PH_GLOBAL_PROJECT_NAME, POWERHOUSE_CONFIG_FILE, POWERHOUSE_GLOBAL_DIR, packageManagers, } from "./constants.js";
|
|
6
|
+
export function resolvePackageManagerOptions(options) {
|
|
7
|
+
if (options.packageManager) {
|
|
8
|
+
return options.packageManager;
|
|
9
|
+
}
|
|
10
|
+
if (options.npm) {
|
|
11
|
+
return "npm";
|
|
12
|
+
}
|
|
13
|
+
if (options.pnpm) {
|
|
14
|
+
return "pnpm";
|
|
15
|
+
}
|
|
16
|
+
if (options.yarn) {
|
|
17
|
+
return "yarn";
|
|
18
|
+
}
|
|
19
|
+
if (options.bun) {
|
|
20
|
+
return "bun";
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
export function defaultPathValidation() {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
export function isPowerhouseProject(dir) {
|
|
28
|
+
const powerhouseConfigPath = path.join(dir, POWERHOUSE_CONFIG_FILE);
|
|
29
|
+
return existsSync(powerhouseConfigPath);
|
|
30
|
+
}
|
|
31
|
+
export function findNodeProjectRoot(dir, pathValidation = defaultPathValidation) {
|
|
32
|
+
const packageJsonPath = path.join(dir, "package.json");
|
|
33
|
+
if (existsSync(packageJsonPath) && pathValidation(dir)) {
|
|
34
|
+
return dir;
|
|
35
|
+
}
|
|
36
|
+
const parentDir = dirname(dir);
|
|
37
|
+
if (parentDir === dir) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return findNodeProjectRoot(parentDir, pathValidation);
|
|
41
|
+
}
|
|
42
|
+
export function getPackageManagerFromPath(dir) {
|
|
43
|
+
const lowerCasePath = dir.toLowerCase();
|
|
44
|
+
if (packageManagers.bun.globalPathRegexp.test(lowerCasePath)) {
|
|
45
|
+
return "bun";
|
|
46
|
+
}
|
|
47
|
+
else if (packageManagers.pnpm.globalPathRegexp.test(lowerCasePath)) {
|
|
48
|
+
return "pnpm";
|
|
49
|
+
}
|
|
50
|
+
else if (packageManagers.yarn.globalPathRegexp.test(lowerCasePath)) {
|
|
51
|
+
return "yarn";
|
|
52
|
+
}
|
|
53
|
+
return "npm";
|
|
54
|
+
}
|
|
55
|
+
export function getPackageManagerFromLockfile(dir) {
|
|
56
|
+
if (existsSync(path.join(dir, packageManagers.pnpm.lockfile))) {
|
|
57
|
+
return "pnpm";
|
|
58
|
+
}
|
|
59
|
+
else if (existsSync(path.join(dir, packageManagers.yarn.lockfile))) {
|
|
60
|
+
return "yarn";
|
|
61
|
+
}
|
|
62
|
+
else if (existsSync(path.join(dir, packageManagers.bun.lockfile))) {
|
|
63
|
+
return "bun";
|
|
64
|
+
}
|
|
65
|
+
return "npm";
|
|
66
|
+
}
|
|
67
|
+
export async function getProjectInfo(debug, generateGlobalProject = true) {
|
|
68
|
+
const currentPath = process.cwd();
|
|
69
|
+
if (debug) {
|
|
70
|
+
console.log(">>> currentPath:", currentPath);
|
|
71
|
+
}
|
|
72
|
+
const projectPath = findNodeProjectRoot(currentPath, isPowerhouseProject);
|
|
73
|
+
if (!projectPath) {
|
|
74
|
+
let available = existsSync(POWERHOUSE_GLOBAL_DIR);
|
|
75
|
+
if (generateGlobalProject) {
|
|
76
|
+
await createGlobalProject();
|
|
77
|
+
available = true;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
available,
|
|
81
|
+
isGlobal: true,
|
|
82
|
+
path: POWERHOUSE_GLOBAL_DIR,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
isGlobal: false,
|
|
87
|
+
available: true,
|
|
88
|
+
path: projectPath,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function forwardPHCommand(packageManager, projectPath, args, debug, captureOutput = false) {
|
|
92
|
+
const manager = packageManagers[packageManager];
|
|
93
|
+
const command = manager.execCommand;
|
|
94
|
+
const execCommand = command.replace("{{arguments}}", args);
|
|
95
|
+
const commandOptions = { cwd: projectPath };
|
|
96
|
+
if (debug) {
|
|
97
|
+
console.log(">>> execCommand:", execCommand);
|
|
98
|
+
console.log(">>> commandOptions:", commandOptions);
|
|
99
|
+
console.log(">>> projectPath:", projectPath);
|
|
100
|
+
console.log(">>> packageManager:", packageManager);
|
|
101
|
+
}
|
|
102
|
+
if (captureOutput) {
|
|
103
|
+
// Capture output and return it
|
|
104
|
+
try {
|
|
105
|
+
return execSync(execCommand, {
|
|
106
|
+
stdio: "pipe",
|
|
107
|
+
encoding: "utf8",
|
|
108
|
+
...commandOptions,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
throw new Error(`Failed to execute command: ${execCommand}\nError: ${error instanceof Error ? error.message : String(error)}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Original behavior - pipe directly to stdout/stderr
|
|
117
|
+
execSync(execCommand, {
|
|
118
|
+
stdio: "inherit",
|
|
119
|
+
...commandOptions,
|
|
120
|
+
});
|
|
121
|
+
return "";
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Recursively searches for a specific file by traversing up the directory tree.
|
|
126
|
+
* Starting from the given path, it checks each parent directory until it finds
|
|
127
|
+
* the target file or reaches the root directory.
|
|
128
|
+
*
|
|
129
|
+
* @param startPath - The absolute path of the directory to start searching from
|
|
130
|
+
* @param targetFile - The name of the file to search for (e.g., 'package.json', 'pnpm-workspace.yaml')
|
|
131
|
+
* @returns The absolute path of the directory containing the target file, or null if not found
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* // Find the workspace root directory
|
|
135
|
+
* const workspaceRoot = findContainerDirectory('/path/to/project/src', 'pnpm-workspace.yaml');
|
|
136
|
+
*
|
|
137
|
+
* // Find the nearest package.json
|
|
138
|
+
* const packageDir = findContainerDirectory('/path/to/project/src/components', 'package.json');
|
|
139
|
+
*/
|
|
140
|
+
export const findContainerDirectory = (startPath, targetFile) => {
|
|
141
|
+
const filePath = path.join(startPath, targetFile);
|
|
142
|
+
if (existsSync(filePath)) {
|
|
143
|
+
return startPath;
|
|
144
|
+
}
|
|
145
|
+
const parentDir = path.dirname(startPath);
|
|
146
|
+
//reached the root directory and haven't found the file
|
|
147
|
+
if (parentDir === startPath) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return findContainerDirectory(parentDir, targetFile);
|
|
151
|
+
};
|
|
152
|
+
export const createGlobalProject = async (projectName, options = {}) => {
|
|
153
|
+
// check if the global project already exists
|
|
154
|
+
const globalProjectExists = existsSync(POWERHOUSE_GLOBAL_DIR);
|
|
155
|
+
if (globalProjectExists) {
|
|
156
|
+
console.log(`📦 Using global project: ${POWERHOUSE_GLOBAL_DIR}`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
console.log("📦 Initializing global project...");
|
|
160
|
+
process.chdir(HOME_DIR);
|
|
161
|
+
try {
|
|
162
|
+
await createProject({
|
|
163
|
+
name: PH_GLOBAL_PROJECT_NAME,
|
|
164
|
+
interactive: false,
|
|
165
|
+
tag: parseTag(options),
|
|
166
|
+
packageManager: resolvePackageManagerOptions(options) ??
|
|
167
|
+
getPackageManagerFromPath(PH_BIN_PATH),
|
|
168
|
+
});
|
|
169
|
+
console.log(`🚀 Global project initialized successfully: ${POWERHOUSE_GLOBAL_DIR}`);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
console.error("❌ Failed to initialize the global project", error);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type ProjectInfo = {
|
|
2
|
+
isGlobal: boolean;
|
|
3
|
+
available: boolean;
|
|
4
|
+
path: string;
|
|
5
|
+
};
|
|
6
|
+
export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
|
|
7
|
+
export type PathValidation = (dir: string) => boolean;
|
|
8
|
+
export interface PackageJson {
|
|
9
|
+
dependencies?: Record<string, string>;
|
|
10
|
+
devDependencies?: Record<string, string>;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export type GlobalProjectOptions = {
|
|
14
|
+
project?: string;
|
|
15
|
+
interactive?: boolean;
|
|
16
|
+
tag?: string;
|
|
17
|
+
dev?: boolean;
|
|
18
|
+
staging?: boolean;
|
|
19
|
+
packageManager?: string;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface PackageDocumentResult {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
githubUrl?: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getPackageDocument(remoteDriveUrl: string): Promise<PackageDocumentResult>;
|
|
7
|
+
//# sourceMappingURL=validate-remote-drive-checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-remote-drive-checkout.d.ts","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive-checkout.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAoDhC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getVetraDocuments } from "@powerhousedao/common/utils";
|
|
2
|
+
export async function getPackageDocument(remoteDriveUrl) {
|
|
3
|
+
try {
|
|
4
|
+
const driveId = remoteDriveUrl.split("/").pop();
|
|
5
|
+
const url = new URL(remoteDriveUrl);
|
|
6
|
+
const graphqlEndpoint = `${url.protocol}//${url.host}/graphql`;
|
|
7
|
+
if (!driveId) {
|
|
8
|
+
return {
|
|
9
|
+
isValid: false,
|
|
10
|
+
error: "❌ Invalid remote drive URL: unable to extract drive ID",
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const documents = await getVetraDocuments(graphqlEndpoint, driveId);
|
|
14
|
+
// Check if no documents found
|
|
15
|
+
if (documents.length === 0) {
|
|
16
|
+
return {
|
|
17
|
+
isValid: false,
|
|
18
|
+
error: "❌ No Vetra package documents found in the remote drive. Use 'ph init --remote-drive' to create a new project first.",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Find documents with githubUrl
|
|
22
|
+
const documentsWithUrl = documents.filter((doc) => doc.githubUrl);
|
|
23
|
+
if (documentsWithUrl.length === 0) {
|
|
24
|
+
return {
|
|
25
|
+
isValid: false,
|
|
26
|
+
error: "❌ No GitHub URL configured in the Vetra package. Use 'ph init --remote-drive' to create a new project first.",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Warn if multiple documents found
|
|
30
|
+
if (documents.length > 1) {
|
|
31
|
+
console.warn(`⚠️ Warning: Multiple Vetra package documents found (${documents.length}). Using first document with GitHub URL.`);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
isValid: true,
|
|
35
|
+
githubUrl: documentsWithUrl[0].githubUrl,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return {
|
|
40
|
+
isValid: false,
|
|
41
|
+
error: `❌ Unable to fetch remote drive info: ${error instanceof Error ? error.message : String(error)}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=validate-remote-drive-checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-remote-drive-checkout.js","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive-checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC;QAE/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wDAAwD;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEpE,8BAA8B;QAC9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,qHAAqH;aACxH,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,8GAA8G;aACjH,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,wDAAwD,SAAS,CAAC,MAAM,0CAA0C,CACnH,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACxG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates a remote drive for initialization.
|
|
3
|
+
* Returns true if validation passes, false if it should stop execution.
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateRemoteDrive(remoteDriveUrl: string): Promise<boolean>;
|
|
6
|
+
//# sourceMappingURL=validate-remote-drive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-remote-drive.d.ts","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CA2ClB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getVetraDocuments } from "@powerhousedao/common/utils";
|
|
2
|
+
/**
|
|
3
|
+
* Validates a remote drive for initialization.
|
|
4
|
+
* Returns true if validation passes, false if it should stop execution.
|
|
5
|
+
*/
|
|
6
|
+
export async function validateRemoteDrive(remoteDriveUrl) {
|
|
7
|
+
try {
|
|
8
|
+
// Parse driveId from URL
|
|
9
|
+
const driveId = remoteDriveUrl.split("/").pop();
|
|
10
|
+
if (!remoteDriveUrl || remoteDriveUrl.trim() === "") {
|
|
11
|
+
console.error("❌ Remote drive URL is required");
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// Construct GraphQL endpoint from base URL
|
|
15
|
+
const url = new URL(remoteDriveUrl);
|
|
16
|
+
const graphqlEndpoint = `${url.protocol}//${url.host}/graphql`;
|
|
17
|
+
const documents = await getVetraDocuments(graphqlEndpoint, driveId);
|
|
18
|
+
if (documents.length === 0) {
|
|
19
|
+
console.error("❌ No vetra package document were found in the provided drive");
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (documents.length > 1) {
|
|
23
|
+
console.warn("⚠️ Multiple vetra package documents were found in the provided remote drive, this might be an error in your remote drive");
|
|
24
|
+
}
|
|
25
|
+
const hasGithubUrl = documents.some((doc) => doc.githubUrl);
|
|
26
|
+
if (hasGithubUrl) {
|
|
27
|
+
console.error("❌ 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>");
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error("❌ Unable to fetch remote drive info:", error);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=validate-remote-drive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-remote-drive.js","sourceRoot":"","sources":["../../../src/utils/validate-remote-drive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,cAAsB;IAEtB,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAEhD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC;QAE/D,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,EAAE,OAAQ,CAAC,CAAC;QAErE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CACX,8DAA8D,CAC/D,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,2HAA2H,CAC5H,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE5D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,mKAAmK,CACpK,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|