git-easy-worktree 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,9 +18,12 @@ npm link
18
18
  ## Usage
19
19
 
20
20
  ```bash
21
- git-wt <repo-url> <branch-name> [options]
21
+ git-wt [repo-url] [branch-name] [options]
22
22
  ```
23
23
 
24
+ > In an interactive terminal, `git-wt` always launches the full-screen TUI.
25
+ > Optional `repo-url` and `branch-name` are used as prefilled values.
26
+
24
27
  ### Options
25
28
 
26
29
  - `-d, --dir <directory>`: Base directory for worktrees (default: current directory)
@@ -28,13 +31,11 @@ git-wt <repo-url> <branch-name> [options]
28
31
  ### Example
29
32
 
30
33
  ```bash
31
- # Create a worktree for the 'master' branch of Hello-World
32
- git-wt https://github.com/octocat/Hello-World.git master
34
+ # Launch TUI with empty fields
35
+ git-wt
33
36
 
34
- # Resulting structure:
35
- # ./Hello-World/
36
- # .bare/ (Bare repository)
37
- # master/ (Worktree)
37
+ # Launch TUI with prefilled repository and branch
38
+ git-wt https://github.com/octocat/Hello-World.git master
38
39
  ```
39
40
 
40
41
  ## Development
package/dist/index.js CHANGED
@@ -4,111 +4,146 @@ import { simpleGit } from 'simple-git';
4
4
  import chalk from 'chalk';
5
5
  import fs from 'fs-extra';
6
6
  import * as path from 'path';
7
- import inquirer from 'inquirer';
8
7
  import ora from 'ora';
9
8
  import boxen from 'boxen';
10
9
  import figlet from 'figlet';
11
10
  import gradient from 'gradient-string';
11
+ import { createRequire } from 'node:module';
12
+ import { collectInputsWithTui } from './tui.js';
13
+ const require = createRequire(import.meta.url);
14
+ const { version } = require('../package.json');
15
+ const MISSING_BRANCH_PATTERNS = ['invalid reference', 'not a valid object name'];
12
16
  const program = new Command();
13
17
  const printBanner = () => {
14
18
  const title = figlet.textSync('Git Easy WT', { font: 'Standard' });
15
19
  console.log(gradient.pastel.multiline(title));
16
20
  };
21
+ const toErrorMessage = (error) => {
22
+ if (error instanceof Error) {
23
+ return error.message;
24
+ }
25
+ return String(error);
26
+ };
27
+ const resolveRepoName = (url) => {
28
+ const repoNameMatch = url.match(/\/([^\/]+?)(\.git)?$/);
29
+ const repoName = repoNameMatch?.[1];
30
+ if (!repoName) {
31
+ throw new Error('Invalid Git URL. Could not extract repository name.');
32
+ }
33
+ return repoName;
34
+ };
35
+ const resolveInputs = async (urlArg, branchArg, dirArg) => {
36
+ const url = urlArg?.trim();
37
+ const branch = branchArg?.trim();
38
+ const dir = dirArg.trim() || process.cwd();
39
+ if (process.stdin.isTTY && process.stdout.isTTY) {
40
+ const initialValues = { dir };
41
+ if (url) {
42
+ initialValues.url = url;
43
+ }
44
+ if (branch) {
45
+ initialValues.branch = branch;
46
+ }
47
+ return collectInputsWithTui(initialValues);
48
+ }
49
+ // Non-interactive environments cannot render TUI, so keep a script-friendly fallback.
50
+ if (url && branch) {
51
+ return { url, branch, dir };
52
+ }
53
+ throw new Error('TUI requires an interactive terminal. In non-interactive mode, pass <repo-url> <branch-name>.');
54
+ };
55
+ const ensureBareRepository = async (url, bareRepoPath, spinner) => {
56
+ const git = simpleGit();
57
+ if (fs.existsSync(bareRepoPath)) {
58
+ spinner.start(`Checking bare repository at ${chalk.dim(bareRepoPath)}`);
59
+ spinner.succeed('Bare repository found');
60
+ spinner.start('Fetching latest updates from remote...');
61
+ await simpleGit(bareRepoPath)
62
+ .outputHandler((_command, _stdout, stderr) => {
63
+ stderr.on('data', (data) => {
64
+ const line = data.toString().trim();
65
+ if (line) {
66
+ spinner.text = `Fetching: ${line}`;
67
+ }
68
+ });
69
+ })
70
+ .fetch('origin');
71
+ spinner.succeed('Repository updated');
72
+ return;
73
+ }
74
+ spinner.start(`Cloning bare repository to ${chalk.dim(bareRepoPath)}...`);
75
+ await git
76
+ .outputHandler((_command, _stdout, stderr) => {
77
+ stderr.on('data', (data) => {
78
+ const line = data.toString().trim();
79
+ if (line) {
80
+ spinner.text = `Cloning: ${line}`;
81
+ }
82
+ });
83
+ })
84
+ .clone(url, bareRepoPath, ['--bare', '--progress']);
85
+ spinner.succeed('Repository cloned successfully');
86
+ };
87
+ const isMissingBranchError = (error) => {
88
+ const message = toErrorMessage(error).toLowerCase();
89
+ return MISSING_BRANCH_PATTERNS.some((pattern) => message.includes(pattern));
90
+ };
91
+ const createWorktree = async (bareRepoPath, worktreePath, branch, spinner) => {
92
+ if (fs.existsSync(worktreePath)) {
93
+ throw new Error(`Worktree path ${worktreePath} already exists.`);
94
+ }
95
+ spinner.start(`Creating worktree for branch ${chalk.green(branch)}...`);
96
+ const bareGit = simpleGit(bareRepoPath);
97
+ try {
98
+ await bareGit.raw(['worktree', 'add', worktreePath, branch]);
99
+ spinner.succeed('Worktree created successfully!');
100
+ }
101
+ catch (error) {
102
+ if (!isMissingBranchError(error)) {
103
+ throw error;
104
+ }
105
+ spinner.text = `Branch ${branch} not found. Creating new branch...`;
106
+ await bareGit.raw(['worktree', 'add', '-b', branch, worktreePath]);
107
+ spinner.succeed('New branch worktree created!');
108
+ }
109
+ };
17
110
  const run = async () => {
18
111
  printBanner();
19
112
  program
20
113
  .name('git-wt')
21
114
  .description('A CLI tool to create git worktrees from a repository URL and branch name')
22
- .version('1.0.0')
23
- .argument('[url]', 'Git repository URL')
24
- .argument('[branch]', 'Branch name to checkout')
115
+ .version(version)
116
+ .argument('[url]', 'Optional: prefill Git repository URL in TUI')
117
+ .argument('[branch]', 'Optional: prefill branch name in TUI')
25
118
  .option('-d, --dir <directory>', 'Base directory for worktrees', process.cwd())
26
119
  .action(async (urlArg, branchArg, options) => {
27
- let url = urlArg;
28
- let branch = branchArg;
29
- // Interactive Mode if args missing
30
- if (!url || !branch) {
31
- console.log(boxen(chalk.cyan('Welcome to Git Easy Worktree! 🚀\nLet\'s set up your workspace.'), { padding: 1, borderStyle: 'round', borderColor: 'cyan' }));
32
- const answers = await inquirer.prompt([
33
- {
34
- type: 'input',
35
- name: 'url',
36
- message: 'Enter Git Repository URL:',
37
- when: !url,
38
- validate: (input) => input ? true : 'URL is required'
39
- },
40
- {
41
- type: 'input',
42
- name: 'branch',
43
- message: 'Enter Branch Name:',
44
- when: !branch,
45
- validate: (input) => input ? true : 'Branch name is required'
46
- }
47
- ]);
48
- if (!url)
49
- url = answers.url;
50
- if (!branch)
51
- branch = answers.branch;
52
- }
120
+ const spinner = ora();
53
121
  try {
54
- // 1. Extract repo name
55
- const repoNameMatch = url.match(/\/([^\/]+?)(\.git)?$/);
56
- if (!repoNameMatch) {
57
- throw new Error('Invalid Git URL. Could not extract repository name.');
58
- }
59
- const repoName = repoNameMatch[1];
60
- const baseDir = path.resolve(options.dir);
122
+ const { url, branch, dir } = await resolveInputs(urlArg, branchArg, options.dir);
123
+ const repoName = resolveRepoName(url);
124
+ const baseDir = path.resolve(dir);
61
125
  const repoDir = path.join(baseDir, repoName);
62
126
  const bareRepoPath = path.join(repoDir, '.bare');
63
127
  const worktreePath = path.join(repoDir, branch);
64
128
  await fs.ensureDir(repoDir);
65
- const git = simpleGit();
66
- const spinner = ora();
67
- // 2. Check/Clone Bare Repo
68
- if (fs.existsSync(bareRepoPath)) {
69
- spinner.start(`Checking bare repository at ${chalk.dim(bareRepoPath)}`);
70
- spinner.succeed('Bare repository found');
71
- spinner.start('Fetching latest updates from remote...');
72
- await simpleGit(bareRepoPath).fetch('origin');
73
- spinner.succeed('Repository updated');
74
- }
75
- else {
76
- spinner.start(`Cloning bare repository to ${chalk.dim(bareRepoPath)}...`);
77
- await git.clone(url, bareRepoPath, ['--bare']);
78
- spinner.succeed('Repository cloned successfully');
79
- }
80
- // 3. Create Worktree
81
- if (fs.existsSync(worktreePath)) {
82
- spinner.fail(`Worktree path ${worktreePath} already exists.`);
83
- return;
84
- }
85
- spinner.start(`Creating worktree for branch ${chalk.green(branch)}...`);
86
- const bareGit = simpleGit(bareRepoPath);
87
- try {
88
- await bareGit.raw(['worktree', 'add', worktreePath, branch]);
89
- spinner.succeed('Worktree created successfully!');
90
- }
91
- catch (err) {
92
- if (err.message.includes('invalid reference') || err.message.includes('not a valid object name')) {
93
- spinner.text = `Branch ${branch} not found. Creating new branch...`;
94
- await bareGit.raw(['worktree', 'add', '-b', branch, worktreePath]);
95
- spinner.succeed('New branch worktree created!');
96
- }
97
- else {
98
- throw err;
99
- }
100
- }
101
- console.log('\n' + boxen(chalk.green(`🎉 All done! \n\n`) +
102
- `📂 Worktree: ${chalk.cyan(worktreePath)}\n` +
103
- `🌿 Branch: ${chalk.cyan(branch)}\n\n` +
104
- chalk.dim(`cd ${path.relative(process.cwd(), worktreePath)}`), { padding: 1, borderStyle: 'round', borderColor: 'green' }));
129
+ await ensureBareRepository(url, bareRepoPath, spinner);
130
+ await createWorktree(bareRepoPath, worktreePath, branch, spinner);
131
+ const relativeWorktreePath = path.relative(process.cwd(), worktreePath) || '.';
132
+ console.log('\n' +
133
+ boxen(chalk.green('🎉 All done! \n\n') +
134
+ `📂 Worktree: ${chalk.cyan(worktreePath)}\n` +
135
+ `🌿 Branch: ${chalk.cyan(branch)}\n\n` +
136
+ chalk.dim(`cd ${relativeWorktreePath}`), { padding: 1, borderStyle: 'round', borderColor: 'green' }));
105
137
  }
106
138
  catch (error) {
107
- ora().fail(chalk.red(error.message));
108
- process.exit(1);
139
+ spinner.fail(chalk.red(toErrorMessage(error)));
140
+ process.exitCode = 1;
109
141
  }
110
142
  });
111
- program.parse(process.argv);
143
+ await program.parseAsync(process.argv);
112
144
  };
113
- run();
145
+ run().catch((error) => {
146
+ ora().fail(chalk.red(toErrorMessage(error)));
147
+ process.exitCode = 1;
148
+ });
114
149
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACrB,WAAW,EAAE,CAAC;IAEd,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,0EAA0E,CAAC;SACvF,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;SACvC,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;SAC/C,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3C,IAAI,GAAG,GAAG,MAAM,CAAC;QACjB,IAAI,MAAM,GAAG,SAAS,CAAC;QAEvB,mCAAmC;QACnC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAE7J,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACtC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,2BAA2B;oBACpC,IAAI,EAAE,CAAC,GAAG;oBACV,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;iBAC9D;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,oBAAoB;oBAC7B,IAAI,EAAE,CAAC,MAAM;oBACb,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;iBACtE;aACF,CAAC,CAAC;YAED,IAAI,CAAC,GAAG;gBAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YAC5B,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;QAED,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEhD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAE5B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YAEtB,2BAA2B;YAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACxE,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBAEzC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC9C,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC1E,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YAED,qBAAqB;YACrB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,iBAAiB,YAAY,kBAAkB,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAExE,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAExC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBAC9F,OAAO,CAAC,IAAI,GAAG,UAAU,MAAM,oCAAoC,CAAC;oBACpE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBACnE,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CACtB,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAChC,gBAAgB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI;gBAC5C,gBAAgB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;gBACxC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,EAC7D,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAC3D,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/tui.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ type WorkspaceInputs = {
2
+ url: string;
3
+ branch: string;
4
+ dir: string;
5
+ };
6
+ type PartialInputs = Partial<WorkspaceInputs>;
7
+ export declare const collectInputsWithTui: (initial: PartialInputs) => Promise<WorkspaceInputs>;
8
+ export {};
9
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAoD9C,eAAO,MAAM,oBAAoB,GAAI,SAAS,aAAa,KAAG,OAAO,CAAC,eAAe,CA0KjF,CAAC"}
package/dist/tui.js ADDED
@@ -0,0 +1,183 @@
1
+ import blessed from 'blessed';
2
+ const createLabeledInput = (screen, parent, label, top, value) => {
3
+ blessed.text({
4
+ parent,
5
+ top,
6
+ left: 2,
7
+ width: 16,
8
+ height: 1,
9
+ content: label,
10
+ style: {
11
+ fg: 'cyan',
12
+ },
13
+ });
14
+ const input = blessed.textbox({
15
+ parent,
16
+ inputOnFocus: true,
17
+ mouse: true,
18
+ keys: true,
19
+ top,
20
+ left: 20,
21
+ right: 2,
22
+ height: 3,
23
+ border: 'line',
24
+ value,
25
+ style: {
26
+ fg: 'white',
27
+ border: { fg: 'gray' },
28
+ focus: { border: { fg: 'green' } },
29
+ },
30
+ });
31
+ input.on('focus', () => {
32
+ screen.render();
33
+ });
34
+ return input;
35
+ };
36
+ const toInitialValue = (value) => value?.trim() ?? '';
37
+ export const collectInputsWithTui = (initial) => new Promise((resolve, reject) => {
38
+ const screen = blessed.screen({
39
+ smartCSR: true,
40
+ title: 'Git Easy WT',
41
+ fullUnicode: true,
42
+ });
43
+ const root = blessed.box({
44
+ parent: screen,
45
+ top: 'center',
46
+ left: 'center',
47
+ width: '90%',
48
+ height: '90%',
49
+ border: 'line',
50
+ style: {
51
+ border: { fg: 'blue' },
52
+ },
53
+ });
54
+ blessed.box({
55
+ parent: root,
56
+ top: 1,
57
+ left: 2,
58
+ right: 2,
59
+ height: 2,
60
+ tags: true,
61
+ content: '{bold}Git Easy Worktree TUI{/bold} | Fill values and press Enter to continue',
62
+ style: {
63
+ fg: 'white',
64
+ },
65
+ });
66
+ const form = blessed.form({
67
+ parent: root,
68
+ top: 4,
69
+ left: 1,
70
+ right: 1,
71
+ bottom: 4,
72
+ keys: true,
73
+ mouse: true,
74
+ });
75
+ const urlInput = createLabeledInput(screen, form, 'Repository URL', 0, toInitialValue(initial.url));
76
+ const branchInput = createLabeledInput(screen, form, 'Branch', 4, toInitialValue(initial.branch));
77
+ const dirInput = createLabeledInput(screen, form, 'Base Dir', 8, toInitialValue(initial.dir || process.cwd()));
78
+ const message = blessed.box({
79
+ parent: root,
80
+ left: 2,
81
+ right: 2,
82
+ bottom: 2,
83
+ height: 1,
84
+ tags: true,
85
+ content: '{gray-fg}Tab/Shift+Tab switch focus · Enter submit · Esc cancel{/gray-fg}',
86
+ });
87
+ const submitButton = blessed.button({
88
+ parent: form,
89
+ mouse: true,
90
+ keys: true,
91
+ shrink: true,
92
+ top: 13,
93
+ left: 20,
94
+ padding: { left: 2, right: 2 },
95
+ name: 'submit',
96
+ content: 'Submit',
97
+ style: {
98
+ fg: 'black',
99
+ bg: 'green',
100
+ focus: { bg: 'white', fg: 'black' },
101
+ },
102
+ });
103
+ const cancelButton = blessed.button({
104
+ parent: form,
105
+ mouse: true,
106
+ keys: true,
107
+ shrink: true,
108
+ top: 13,
109
+ left: 34,
110
+ padding: { left: 2, right: 2 },
111
+ name: 'cancel',
112
+ content: 'Cancel',
113
+ style: {
114
+ fg: 'white',
115
+ bg: 'red',
116
+ focus: { bg: 'white', fg: 'black' },
117
+ },
118
+ });
119
+ const focusables = [urlInput, branchInput, dirInput, submitButton, cancelButton];
120
+ let focusIndex = 0;
121
+ let settled = false;
122
+ const focusAt = (index) => {
123
+ const normalized = (index + focusables.length) % focusables.length;
124
+ const target = focusables[normalized];
125
+ if (!target) {
126
+ return;
127
+ }
128
+ focusIndex = normalized;
129
+ target.focus();
130
+ screen.render();
131
+ };
132
+ const setError = (content) => {
133
+ message.setContent(`{red-fg}${content}{/red-fg}`);
134
+ screen.render();
135
+ };
136
+ const cleanup = () => {
137
+ screen.destroy();
138
+ };
139
+ const settle = (handler) => {
140
+ if (settled) {
141
+ return;
142
+ }
143
+ settled = true;
144
+ cleanup();
145
+ handler();
146
+ };
147
+ const cancel = () => {
148
+ settle(() => reject(new Error('Cancelled by user.')));
149
+ };
150
+ const submit = () => {
151
+ const url = urlInput.getValue().trim();
152
+ const branch = branchInput.getValue().trim();
153
+ const dir = dirInput.getValue().trim();
154
+ if (!url) {
155
+ setError('Repository URL is required.');
156
+ focusAt(0);
157
+ return;
158
+ }
159
+ if (!branch) {
160
+ setError('Branch is required.');
161
+ focusAt(1);
162
+ return;
163
+ }
164
+ if (!dir) {
165
+ setError('Base directory is required.');
166
+ focusAt(2);
167
+ return;
168
+ }
169
+ settle(() => resolve({ url, branch, dir }));
170
+ };
171
+ screen.key(['tab'], () => focusAt(focusIndex + 1));
172
+ screen.key(['S-tab'], () => focusAt(focusIndex - 1));
173
+ screen.key(['escape', 'q', 'C-c'], cancel);
174
+ screen.key(['C-s'], submit);
175
+ urlInput.key('enter', () => focusAt(1));
176
+ branchInput.key('enter', () => focusAt(2));
177
+ dirInput.key('enter', submit);
178
+ submitButton.on('press', submit);
179
+ cancelButton.on('press', cancel);
180
+ form.on('submit', submit);
181
+ focusAt(0);
182
+ });
183
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "git-easy-worktree",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "CLI tool to create git worktrees from URL",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,7 +12,7 @@
12
12
  "start": "node dist/index.js",
13
13
  "dev": "ts-node src/index.ts",
14
14
  "prepublishOnly": "npm run build",
15
- "test": "echo \"Error: no test specified\" && exit 1"
15
+ "test": "npm run build && node --test"
16
16
  },
17
17
  "keywords": [
18
18
  "git",
@@ -28,19 +28,18 @@
28
28
  "author": "",
29
29
  "license": "ISC",
30
30
  "dependencies": {
31
- "@inquirer/prompts": "^8.2.0",
32
- "@types/inquirer": "^9.0.9",
31
+ "blessed": "^0.1.81",
33
32
  "boxen": "^8.0.1",
34
33
  "chalk": "^4.1.2",
35
34
  "commander": "^14.0.3",
36
35
  "figlet": "^1.10.0",
37
36
  "fs-extra": "^11.3.3",
38
37
  "gradient-string": "^3.0.0",
39
- "inquirer": "^9.3.8",
40
38
  "ora": "^9.3.0",
41
39
  "simple-git": "^3.30.0"
42
40
  },
43
41
  "devDependencies": {
42
+ "@types/blessed": "^0.1.25",
44
43
  "@types/figlet": "^1.7.0",
45
44
  "@types/fs-extra": "^11.0.4",
46
45
  "@types/gradient-string": "^1.1.6",