@bretwardjames/ghp-cli 0.1.2 → 0.1.4

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.
@@ -1,15 +1,37 @@
1
- interface BranchLink {
2
- branch: string;
3
- issueNumber: number;
4
- issueTitle: string;
5
- itemId: string;
6
- repo: string;
7
- linkedAt: string;
8
- }
1
+ /**
2
+ * CLI-specific branch linker with file-based storage.
3
+ *
4
+ * This module wraps the core BranchLinker with a file-based StorageAdapter
5
+ * that stores links in ~/.config/ghp-cli/branch-links.json
6
+ */
7
+ import { BranchLinker, type StorageAdapter, type BranchLink } from '@bretwardjames/ghp-core';
8
+ /**
9
+ * File-based storage adapter for CLI usage
10
+ */
11
+ declare const fileStorageAdapter: StorageAdapter;
12
+ declare const linker: BranchLinker;
13
+ /**
14
+ * Create a link between a branch and an issue.
15
+ * Backwards-compatible function signature for existing CLI code.
16
+ */
9
17
  export declare function linkBranch(branch: string, issueNumber: number, issueTitle: string, itemId: string, repo: string): void;
18
+ /**
19
+ * Remove the link for an issue.
20
+ * @returns true if a link was removed, false if no link existed
21
+ */
10
22
  export declare function unlinkBranch(repo: string, issueNumber: number): boolean;
23
+ /**
24
+ * Get the branch linked to an issue.
25
+ */
11
26
  export declare function getBranchForIssue(repo: string, issueNumber: number): string | null;
27
+ /**
28
+ * Get the full link info for a branch.
29
+ */
12
30
  export declare function getIssueForBranch(repo: string, branch: string): BranchLink | null;
31
+ /**
32
+ * Get all links for a repository.
33
+ */
13
34
  export declare function getAllLinksForRepo(repo: string): BranchLink[];
14
- export {};
35
+ export type { BranchLink } from '@bretwardjames/ghp-core';
36
+ export { linker, fileStorageAdapter };
15
37
  //# sourceMappingURL=branch-linker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-linker.d.ts","sourceRoot":"","sources":["../src/branch-linker.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,IAAI,CAkBN;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAUvE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAGjF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAG7D"}
1
+ {"version":3,"file":"branch-linker.d.ts","sourceRoot":"","sources":["../src/branch-linker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACH,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,UAAU,EAClB,MAAM,yBAAyB,CAAC;AAKjC;;GAEG;AACH,QAAA,MAAM,kBAAkB,EAAE,cAmBzB,CAAC;AAGF,QAAA,MAAM,MAAM,cAAuC,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAcvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAGjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAG7D;AAGD,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,60 +1,86 @@
1
+ /**
2
+ * CLI-specific branch linker with file-based storage.
3
+ *
4
+ * This module wraps the core BranchLinker with a file-based StorageAdapter
5
+ * that stores links in ~/.config/ghp-cli/branch-links.json
6
+ */
1
7
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
2
8
  import { homedir } from 'os';
3
9
  import { join } from 'path';
10
+ import { BranchLinker, } from '@bretwardjames/ghp-core';
4
11
  const DATA_DIR = join(homedir(), '.config', 'ghp-cli');
5
12
  const LINKS_FILE = join(DATA_DIR, 'branch-links.json');
6
- function loadLinks() {
7
- try {
8
- if (existsSync(LINKS_FILE)) {
9
- const data = readFileSync(LINKS_FILE, 'utf-8');
10
- return JSON.parse(data);
13
+ /**
14
+ * File-based storage adapter for CLI usage
15
+ */
16
+ const fileStorageAdapter = {
17
+ load() {
18
+ try {
19
+ if (existsSync(LINKS_FILE)) {
20
+ const data = readFileSync(LINKS_FILE, 'utf-8');
21
+ return JSON.parse(data);
22
+ }
11
23
  }
12
- }
13
- catch {
14
- // Ignore errors
15
- }
16
- return [];
17
- }
18
- function saveLinks(links) {
19
- if (!existsSync(DATA_DIR)) {
20
- mkdirSync(DATA_DIR, { recursive: true });
21
- }
22
- writeFileSync(LINKS_FILE, JSON.stringify(links, null, 2));
23
- }
24
+ catch {
25
+ // Ignore errors, return empty array
26
+ }
27
+ return [];
28
+ },
29
+ save(links) {
30
+ if (!existsSync(DATA_DIR)) {
31
+ mkdirSync(DATA_DIR, { recursive: true });
32
+ }
33
+ writeFileSync(LINKS_FILE, JSON.stringify(links, null, 2));
34
+ },
35
+ };
36
+ // Create singleton linker instance
37
+ const linker = new BranchLinker(fileStorageAdapter);
38
+ /**
39
+ * Create a link between a branch and an issue.
40
+ * Backwards-compatible function signature for existing CLI code.
41
+ */
24
42
  export function linkBranch(branch, issueNumber, issueTitle, itemId, repo) {
25
- const links = loadLinks();
26
- // Remove existing link for this branch or issue in this repo
27
- const filtered = links.filter(l => !(l.repo === repo && (l.branch === branch || l.issueNumber === issueNumber)));
28
- filtered.push({
29
- branch,
30
- issueNumber,
31
- issueTitle,
32
- itemId,
33
- repo,
34
- linkedAt: new Date().toISOString(),
35
- });
36
- saveLinks(filtered);
43
+ // Use sync-like behavior for backwards compatibility
44
+ // The file adapter is synchronous so this works
45
+ linker.link(branch, issueNumber, issueTitle, itemId, repo);
37
46
  }
47
+ /**
48
+ * Remove the link for an issue.
49
+ * @returns true if a link was removed, false if no link existed
50
+ */
38
51
  export function unlinkBranch(repo, issueNumber) {
39
- const links = loadLinks();
52
+ // Load, filter, and save synchronously for backwards compatibility
53
+ const adapter = fileStorageAdapter;
54
+ const links = adapter.load();
40
55
  const filtered = links.filter(l => !(l.repo === repo && l.issueNumber === issueNumber));
41
56
  if (filtered.length === links.length) {
42
- return false; // Nothing was removed
57
+ return false;
43
58
  }
44
- saveLinks(filtered);
59
+ adapter.save(filtered);
45
60
  return true;
46
61
  }
62
+ /**
63
+ * Get the branch linked to an issue.
64
+ */
47
65
  export function getBranchForIssue(repo, issueNumber) {
48
- const links = loadLinks();
66
+ const links = fileStorageAdapter.load();
49
67
  const link = links.find(l => l.repo === repo && l.issueNumber === issueNumber);
50
68
  return link?.branch || null;
51
69
  }
70
+ /**
71
+ * Get the full link info for a branch.
72
+ */
52
73
  export function getIssueForBranch(repo, branch) {
53
- const links = loadLinks();
74
+ const links = fileStorageAdapter.load();
54
75
  return links.find(l => l.repo === repo && l.branch === branch) || null;
55
76
  }
77
+ /**
78
+ * Get all links for a repository.
79
+ */
56
80
  export function getAllLinksForRepo(repo) {
57
- const links = loadLinks();
81
+ const links = fileStorageAdapter.load();
58
82
  return links.filter(l => l.repo === repo);
59
83
  }
84
+ // Also export the linker instance and adapter for advanced usage
85
+ export { linker, fileStorageAdapter };
60
86
  //# sourceMappingURL=branch-linker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-linker.js","sourceRoot":"","sources":["../src/branch-linker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAEvD,SAAS,SAAS;IACd,IAAI,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,gBAAgB;IACpB,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB;IAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,UAAU,CACtB,MAAc,EACd,WAAmB,EACnB,UAAkB,EAClB,MAAc,EACd,IAAY;IAEZ,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAC/E,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC;QACV,MAAM;QACN,WAAW;QACX,UAAU;QACV,MAAM;QACN,IAAI;QACJ,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,WAAmB;IAC1D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC;IAExF,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,sBAAsB;IACxC,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAmB;IAC/D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAC/E,OAAO,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc;IAC1D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"branch-linker.js","sourceRoot":"","sources":["../src/branch-linker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function editCommand(issue: string): Promise<void>;
2
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D9D"}
@@ -0,0 +1,126 @@
1
+ import chalk from 'chalk';
2
+ import { api } from '../github-api.js';
3
+ import { detectRepository } from '../git-utils.js';
4
+ import { spawn } from 'child_process';
5
+ import { writeFileSync, readFileSync, unlinkSync, existsSync } from 'fs';
6
+ import { tmpdir } from 'os';
7
+ import { join } from 'path';
8
+ export async function editCommand(issue) {
9
+ const repo = await detectRepository();
10
+ if (!repo) {
11
+ console.error(chalk.red('Error:'), 'Not in a git repository with a GitHub remote');
12
+ process.exit(1);
13
+ }
14
+ const authenticated = await api.authenticate();
15
+ if (!authenticated) {
16
+ console.error(chalk.red('Error:'), 'Not authenticated. Run', chalk.cyan('ghp auth'));
17
+ process.exit(1);
18
+ }
19
+ const issueNumber = parseInt(issue.replace(/^#/, ''), 10);
20
+ if (isNaN(issueNumber)) {
21
+ console.error(chalk.red('Invalid issue number:'), issue);
22
+ process.exit(1);
23
+ }
24
+ // Fetch current issue details
25
+ const details = await api.getIssueDetails(repo, issueNumber);
26
+ if (!details) {
27
+ console.error(chalk.red('Issue not found:'), `#${issueNumber}`);
28
+ process.exit(1);
29
+ }
30
+ console.log(chalk.dim(`Editing #${issueNumber}: ${details.title}`));
31
+ // Open editor with current title and description
32
+ const result = await openEditor(issueNumber, details.title, details.body || '');
33
+ // Check if anything changed
34
+ const titleChanged = result.title !== details.title;
35
+ const bodyChanged = result.body !== (details.body || '');
36
+ if (!titleChanged && !bodyChanged) {
37
+ console.log(chalk.yellow('No changes made'));
38
+ return;
39
+ }
40
+ // Check if title is empty
41
+ if (!result.title.trim()) {
42
+ console.error(chalk.red('Error:'), 'Title cannot be empty');
43
+ process.exit(1);
44
+ }
45
+ // Update the issue
46
+ console.log(chalk.dim('Updating issue...'));
47
+ const success = await api.updateIssue(repo, issueNumber, {
48
+ title: titleChanged ? result.title : undefined,
49
+ body: bodyChanged ? result.body : undefined,
50
+ });
51
+ if (success) {
52
+ const changes = [];
53
+ if (titleChanged)
54
+ changes.push('title');
55
+ if (bodyChanged)
56
+ changes.push('description');
57
+ console.log(chalk.green('Updated'), `#${issueNumber}`, chalk.dim(`(${changes.join(', ')})`));
58
+ }
59
+ else {
60
+ console.error(chalk.red('Failed to update issue'));
61
+ process.exit(1);
62
+ }
63
+ }
64
+ async function openEditor(issueNumber, currentTitle, currentBody) {
65
+ const editor = process.env.EDITOR || process.env.VISUAL || 'vim';
66
+ const tmpFile = join(tmpdir(), `ghp-edit-${issueNumber}-${Date.now()}.md`);
67
+ // Create temp file with editable title, instructions, and body
68
+ const content = [
69
+ currentTitle,
70
+ '',
71
+ '# ─────────────────────────────────────────────',
72
+ `# Editing Issue #${issueNumber}`,
73
+ '# First line = title, everything below = description',
74
+ '# Lines starting with # are ignored',
75
+ '# ─────────────────────────────────────────────',
76
+ '',
77
+ currentBody,
78
+ ].join('\n');
79
+ writeFileSync(tmpFile, content);
80
+ return new Promise((resolve, reject) => {
81
+ const child = spawn(editor, [tmpFile], {
82
+ stdio: 'inherit',
83
+ });
84
+ child.on('exit', (code) => {
85
+ if (code !== 0) {
86
+ if (existsSync(tmpFile))
87
+ unlinkSync(tmpFile);
88
+ reject(new Error(`Editor exited with code ${code}`));
89
+ return;
90
+ }
91
+ try {
92
+ const fileContent = readFileSync(tmpFile, 'utf-8');
93
+ unlinkSync(tmpFile);
94
+ // Parse the content
95
+ const lines = fileContent.split('\n');
96
+ const nonCommentLines = [];
97
+ for (const line of lines) {
98
+ if (!line.startsWith('#')) {
99
+ nonCommentLines.push(line);
100
+ }
101
+ }
102
+ // First non-empty line is the title
103
+ let title = '';
104
+ let bodyStartIndex = 0;
105
+ for (let i = 0; i < nonCommentLines.length; i++) {
106
+ if (nonCommentLines[i].trim()) {
107
+ title = nonCommentLines[i].trim();
108
+ bodyStartIndex = i + 1;
109
+ break;
110
+ }
111
+ }
112
+ // Skip empty lines between title and body
113
+ while (bodyStartIndex < nonCommentLines.length && !nonCommentLines[bodyStartIndex].trim()) {
114
+ bodyStartIndex++;
115
+ }
116
+ // Rest is the body
117
+ const body = nonCommentLines.slice(bodyStartIndex).join('\n').trimEnd();
118
+ resolve({ title, body });
119
+ }
120
+ catch (err) {
121
+ reject(err);
122
+ }
123
+ });
124
+ });
125
+ }
126
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -1,55 +1,9 @@
1
- import type { RepoInfo } from './types.js';
2
1
  /**
3
- * Detect the GitHub repository from the current directory's git remote
2
+ * Git utilities re-exported from core library.
3
+ *
4
+ * For CLI usage, all functions use process.cwd() by default.
5
+ * The core library accepts an optional { cwd } parameter for IDE integrations.
4
6
  */
5
- export declare function detectRepository(): Promise<RepoInfo | null>;
6
- /**
7
- * Parse a GitHub URL into owner and repo name
8
- */
9
- export declare function parseGitHubUrl(url: string): RepoInfo | null;
10
- /**
11
- * Get the current git branch
12
- */
13
- export declare function getCurrentBranch(): Promise<string | null>;
14
- /**
15
- * Check if there are uncommitted changes
16
- */
17
- export declare function hasUncommittedChanges(): Promise<boolean>;
18
- /**
19
- * Check if a branch exists locally
20
- */
21
- export declare function branchExists(branchName: string): Promise<boolean>;
22
- /**
23
- * Create and checkout a new branch
24
- */
25
- export declare function createBranch(branchName: string): Promise<void>;
26
- /**
27
- * Checkout an existing branch
28
- */
29
- export declare function checkoutBranch(branchName: string): Promise<void>;
30
- /**
31
- * Pull latest from origin
32
- */
33
- export declare function pullLatest(): Promise<void>;
34
- /**
35
- * Fetch from origin
36
- */
37
- export declare function fetchOrigin(): Promise<void>;
38
- /**
39
- * Get number of commits behind origin
40
- */
41
- export declare function getCommitsBehind(branch: string): Promise<number>;
42
- /**
43
- * Sanitize a string for use in a branch name
44
- */
45
- export declare function sanitizeForBranchName(str: string): string;
46
- /**
47
- * Generate a branch name from a pattern
48
- */
49
- export declare function generateBranchName(pattern: string, vars: {
50
- user: string;
51
- number: number | null;
52
- title: string;
53
- repo: string;
54
- }, maxLength?: number): string;
7
+ export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, parseGitHubUrl, } from '@bretwardjames/ghp-core';
8
+ export type { RepoInfo, GitOptions } from '@bretwardjames/ghp-core';
55
9
  //# sourceMappingURL=git-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAsB3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1E,SAAS,GAAE,MAAW,GACvB,MAAM,CAcR"}
1
+ {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/git-utils.js CHANGED
@@ -1,140 +1,10 @@
1
- import { exec } from 'child_process';
2
- import { promisify } from 'util';
3
- const execAsync = promisify(exec);
4
1
  /**
5
- * Detect the GitHub repository from the current directory's git remote
2
+ * Git utilities re-exported from core library.
3
+ *
4
+ * For CLI usage, all functions use process.cwd() by default.
5
+ * The core library accepts an optional { cwd } parameter for IDE integrations.
6
6
  */
7
- export async function detectRepository() {
8
- try {
9
- const { stdout } = await execAsync('git remote get-url origin');
10
- const url = stdout.trim();
11
- return parseGitHubUrl(url);
12
- }
13
- catch {
14
- return null;
15
- }
16
- }
17
- /**
18
- * Parse a GitHub URL into owner and repo name
19
- */
20
- export function parseGitHubUrl(url) {
21
- // Handle SSH format: git@github.com:owner/repo.git
22
- const sshMatch = url.match(/git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/);
23
- if (sshMatch) {
24
- return {
25
- owner: sshMatch[1],
26
- name: sshMatch[2],
27
- fullName: `${sshMatch[1]}/${sshMatch[2]}`,
28
- };
29
- }
30
- // Handle HTTPS format: https://github.com/owner/repo.git
31
- const httpsMatch = url.match(/https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?$/);
32
- if (httpsMatch) {
33
- return {
34
- owner: httpsMatch[1],
35
- name: httpsMatch[2],
36
- fullName: `${httpsMatch[1]}/${httpsMatch[2]}`,
37
- };
38
- }
39
- return null;
40
- }
41
- /**
42
- * Get the current git branch
43
- */
44
- export async function getCurrentBranch() {
45
- try {
46
- const { stdout } = await execAsync('git branch --show-current');
47
- return stdout.trim() || null;
48
- }
49
- catch {
50
- return null;
51
- }
52
- }
53
- /**
54
- * Check if there are uncommitted changes
55
- */
56
- export async function hasUncommittedChanges() {
57
- try {
58
- const { stdout } = await execAsync('git status --porcelain');
59
- return stdout.trim().length > 0;
60
- }
61
- catch {
62
- return false;
63
- }
64
- }
65
- /**
66
- * Check if a branch exists locally
67
- */
68
- export async function branchExists(branchName) {
69
- try {
70
- await execAsync(`git show-ref --verify --quiet refs/heads/${branchName}`);
71
- return true;
72
- }
73
- catch {
74
- return false;
75
- }
76
- }
77
- /**
78
- * Create and checkout a new branch
79
- */
80
- export async function createBranch(branchName) {
81
- await execAsync(`git checkout -b "${branchName}"`);
82
- }
83
- /**
84
- * Checkout an existing branch
85
- */
86
- export async function checkoutBranch(branchName) {
87
- await execAsync(`git checkout "${branchName}"`);
88
- }
89
- /**
90
- * Pull latest from origin
91
- */
92
- export async function pullLatest() {
93
- await execAsync('git pull');
94
- }
95
- /**
96
- * Fetch from origin
97
- */
98
- export async function fetchOrigin() {
99
- await execAsync('git fetch origin');
100
- }
101
- /**
102
- * Get number of commits behind origin
103
- */
104
- export async function getCommitsBehind(branch) {
105
- try {
106
- await fetchOrigin();
107
- const { stdout } = await execAsync(`git rev-list --count ${branch}..origin/${branch}`);
108
- return parseInt(stdout.trim(), 10) || 0;
109
- }
110
- catch {
111
- return 0;
112
- }
113
- }
114
- /**
115
- * Sanitize a string for use in a branch name
116
- */
117
- export function sanitizeForBranchName(str) {
118
- return str
119
- .toLowerCase()
120
- .replace(/[^a-z0-9-]/g, '-')
121
- .replace(/-+/g, '-')
122
- .replace(/^-|-$/g, '')
123
- .substring(0, 50);
124
- }
125
- /**
126
- * Generate a branch name from a pattern
127
- */
128
- export function generateBranchName(pattern, vars, maxLength = 60) {
129
- const sanitizedTitle = sanitizeForBranchName(vars.title);
130
- let branch = pattern
131
- .replace('{user}', vars.user)
132
- .replace('{number}', vars.number?.toString() || 'draft')
133
- .replace('{title}', sanitizedTitle)
134
- .replace('{repo}', vars.repo);
135
- if (branch.length > maxLength) {
136
- branch = branch.substring(0, maxLength).replace(/-$/, '');
137
- }
138
- return branch;
139
- }
7
+ // Re-export all git utilities from core
8
+ // These all use process.cwd() by default, which is correct for CLI usage
9
+ export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, parseGitHubUrl, } from '@bretwardjames/ghp-core';
140
10
  //# sourceMappingURL=git-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACtC,mDAAmD;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACxE,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO;YACH,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjB,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;SAC5C,CAAC;IACN,CAAC;IAED,yDAAyD;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACjF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO;YACH,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACnB,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;SAChD,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACvC,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACjD,IAAI,CAAC;QACD,MAAM,SAAS,CAAC,4CAA4C,UAAU,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACjD,MAAM,SAAS,CAAC,oBAAoB,UAAU,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACnD,MAAM,SAAS,CAAC,iBAAiB,UAAU,GAAG,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACjD,IAAI,CAAC;QACD,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,MAAM,YAAY,MAAM,EAAE,CAAC,CAAC;QACvF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,CAAC;IACb,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC7C,OAAO,GAAG;SACL,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,OAAe,EACf,IAA0E,EAC1E,YAAoB,EAAE;IAEtB,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,MAAM,GAAG,OAAO;SACf,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,OAAO,CAAC;SACvD,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;SAClC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,yEAAyE;AACzE,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,yBAAyB,CAAC"}