avil13-co 1.1.4 → 2.0.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
@@ -6,8 +6,26 @@
6
6
 
7
7
  Install:
8
8
 
9
- ```bash
9
+ ```sh
10
10
  npm install -g avil13-co
11
11
  ```
12
12
 
13
- Type alias "`co`" for switch branch.
13
+ Type alias "`co`" for switch branch.
14
+
15
+ # Usage
16
+
17
+ ```sh
18
+ # Shows a list of branches that can be switched to
19
+ co
20
+ ```
21
+
22
+ ```sh
23
+ # Shows help message
24
+ co -h
25
+ ```
26
+
27
+ ```sh
28
+ # Choosing a branch to delete
29
+ co -D
30
+ ```
31
+
package/dist/ask.d.ts CHANGED
@@ -1 +1,3 @@
1
- export declare const ask: (message: string, choices: string[]) => Promise<any>;
1
+ export declare const ask: (message: string, choices: string[]) => Promise<{
2
+ branch: any;
3
+ }>;
package/dist/ask.js CHANGED
@@ -1,61 +1,27 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var inquirer = require('inquirer');
40
- inquirer.registerPrompt('autocomplete', require('inquirer-autocomplete-prompt'));
41
- var specSymbols = {
6
+ exports.ask = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ inquirer_1.default.registerPrompt('autocomplete', require('inquirer-autocomplete-prompt'));
9
+ const specSymbols = {
42
10
  _saveCursor: '\x1b7',
43
11
  _restoreCursor: '\x1b8',
44
12
  _clear: '\x1b[H\x1b[2J',
45
13
  };
46
- exports.ask = function (message, choices) { return __awaiter(void 0, void 0, void 0, function () {
47
- var prompt;
48
- return __generator(this, function (_a) {
49
- prompt = inquirer.prompt({
50
- type: 'autocomplete',
51
- name: 'branch',
52
- message: message,
53
- source: function (answersSoFar, input) {
54
- if (input === void 0) { input = ''; }
55
- var list = choices.filter(function (str) { return str.indexOf(input) > -1; });
56
- return Promise.resolve(list);
57
- }
58
- });
59
- return [2 /*return*/, prompt];
14
+ const ask = async (message, choices) => {
15
+ const prompt = inquirer_1.default.prompt({
16
+ //@ts-ignore
17
+ type: 'autocomplete',
18
+ name: 'branch',
19
+ message,
20
+ source(answersSoFar, input = '') {
21
+ const list = choices.filter(str => str.indexOf(input) > -1);
22
+ return Promise.resolve(list);
23
+ }
60
24
  });
61
- }); };
25
+ return prompt;
26
+ };
27
+ exports.ask = ask;
@@ -0,0 +1,7 @@
1
+ export declare enum Commands {
2
+ Unknown = 0,
3
+ Help = 1,
4
+ DeleteBranch = 2
5
+ }
6
+ export declare const getWishOfUser: (firstArg?: string | undefined) => Commands;
7
+ export declare const getHelp: () => string;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHelp = exports.getWishOfUser = exports.Commands = void 0;
4
+ const args = process.argv.slice(2);
5
+ var Commands;
6
+ (function (Commands) {
7
+ Commands[Commands["Unknown"] = 0] = "Unknown";
8
+ Commands[Commands["Help"] = 1] = "Help";
9
+ Commands[Commands["DeleteBranch"] = 2] = "DeleteBranch";
10
+ })(Commands = exports.Commands || (exports.Commands = {}));
11
+ ;
12
+ const getWishOfUser = (firstArg) => {
13
+ const arg = firstArg || args[0];
14
+ switch (true) {
15
+ case ['help', '-h', '--h', '--help'].includes(arg):
16
+ return Commands.Help;
17
+ case ['D', '-D', 'rm'].includes(arg):
18
+ return Commands.DeleteBranch;
19
+ default:
20
+ return Commands.Unknown;
21
+ }
22
+ };
23
+ exports.getWishOfUser = getWishOfUser;
24
+ const getHelp = () => {
25
+ return `
26
+ DESCRIPTION:
27
+ A console program for quickly switching between branches
28
+
29
+ OPTIONS:
30
+ help, -h, --h, --help
31
+ Showing this message
32
+
33
+ D, D', 'rm
34
+ Delete the selected branch
35
+ `;
36
+ };
37
+ exports.getHelp = getHelp;
package/dist/color.d.ts CHANGED
@@ -0,0 +1,27 @@
1
+ export declare const clc: {
2
+ _red: string;
3
+ _green: string;
4
+ _yellow: string;
5
+ _blue: string;
6
+ _greenBg: string;
7
+ _redBg: string;
8
+ _blueBg: string;
9
+ _cyan: string;
10
+ _white: string;
11
+ _gray: string;
12
+ _right: string;
13
+ _off: string;
14
+ color(...args: any[]): string;
15
+ greenOrRed(isVal: any, ...strList: any[]): string;
16
+ greenOrRedBg(isVal: any, ...strList: any): string;
17
+ greenBg(str1: any, str2: any): string;
18
+ redBg(str1: any, str2: any): string;
19
+ blueBg(str1: any, str2: any): string;
20
+ green(...args: any[]): string;
21
+ red(...args: any[]): string;
22
+ yellow(...args: any[]): string;
23
+ blue(...args: any[]): string;
24
+ cyan(...args: any[]): string;
25
+ white(...args: any[]): string;
26
+ gray(...args: any[]): string;
27
+ };
package/dist/color.js CHANGED
@@ -1,12 +1,7 @@
1
1
  "use strict";
2
- var __spreadArrays = (this && this.__spreadArrays) || function () {
3
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
5
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6
- r[k] = a[j];
7
- return r;
8
- };
9
- module.exports = {
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clc = void 0;
4
+ exports.clc = {
10
5
  _red: '\x1b[31m',
11
6
  _green: '\x1b[32m',
12
7
  _yellow: '\x1b[33m',
@@ -19,102 +14,62 @@ module.exports = {
19
14
  _gray: '\x1b[0;90m',
20
15
  _right: '\x1b[46G',
21
16
  _off: '\x1b[0m',
22
- color: function () {
23
- var args = [];
24
- for (var _i = 0; _i < arguments.length; _i++) {
25
- args[_i] = arguments[_i];
26
- }
27
- var color = args[0];
28
- var str = args[1];
29
- var left = args.splice(2);
30
- return ("" + color + str + this._off + (left.length ? ' ' + left.join(' ') : ''));
17
+ color(...args) {
18
+ const color = args[0];
19
+ const str = args[1];
20
+ const left = args.splice(2);
21
+ return (`${color}${str}${this._off}` + (left.length ? ' ' + left.join(' ') : ''));
31
22
  },
32
- greenOrRed: function (isVal) {
33
- var strList = [];
34
- for (var _i = 1; _i < arguments.length; _i++) {
35
- strList[_i - 1] = arguments[_i];
36
- }
23
+ greenOrRed(isVal, ...strList) {
37
24
  return isVal === true
38
25
  ? this.green.apply(this, strList)
39
26
  : this.red.apply(this, strList);
40
27
  },
41
- greenOrRedBg: function (isVal) {
42
- var strList = [];
43
- for (var _i = 1; _i < arguments.length; _i++) {
44
- strList[_i - 1] = arguments[_i];
45
- }
28
+ greenOrRedBg(isVal, ...strList) {
46
29
  return isVal === true
47
30
  ? this.greenBg.apply(this, strList)
48
31
  : this.redBg.apply(this, strList);
49
32
  },
50
- greenBg: function (str1, str2) {
51
- var str = this.color(this._greenBg, " " + str1 + " ");
33
+ greenBg(str1, str2) {
34
+ let str = this.color(this._greenBg, ` ${str1} `);
52
35
  if (str2) {
53
36
  str += ' ' + this.color(this._green, str2);
54
37
  }
55
38
  return str;
56
39
  },
57
- redBg: function (str1, str2) {
58
- var str = this.color(this._redBg, " " + str1 + " ");
40
+ redBg(str1, str2) {
41
+ let str = this.color(this._redBg, ` ${str1} `);
59
42
  if (str2) {
60
43
  str += ' ' + this.color(this._red, str2);
61
44
  }
62
45
  return str;
63
46
  },
64
- blueBg: function (str1, str2) {
65
- var str = this.color(this._blueBg, " " + str1 + " ");
47
+ blueBg(str1, str2) {
48
+ let str = this.color(this._blueBg, ` ${str1} `);
66
49
  if (str2) {
67
50
  str += ' ' + this.color(this._blue, str2);
68
51
  }
69
52
  return str;
70
53
  },
71
- green: function () {
72
- var args = [];
73
- for (var _i = 0; _i < arguments.length; _i++) {
74
- args[_i] = arguments[_i];
75
- }
76
- return this.color.apply(this, __spreadArrays([this._green], args));
54
+ green(...args) {
55
+ return this.color.apply(this, [this._green, ...args]);
77
56
  },
78
- red: function () {
79
- var args = [];
80
- for (var _i = 0; _i < arguments.length; _i++) {
81
- args[_i] = arguments[_i];
82
- }
83
- return this.color.apply(this, __spreadArrays([this._red], args));
57
+ red(...args) {
58
+ return this.color.apply(this, [this._red, ...args]);
84
59
  },
85
- yellow: function () {
86
- var args = [];
87
- for (var _i = 0; _i < arguments.length; _i++) {
88
- args[_i] = arguments[_i];
89
- }
90
- return this.color.apply(this, __spreadArrays([this._yellow], args));
60
+ yellow(...args) {
61
+ return this.color.apply(this, [this._yellow, ...args]);
91
62
  },
92
- blue: function () {
93
- var args = [];
94
- for (var _i = 0; _i < arguments.length; _i++) {
95
- args[_i] = arguments[_i];
96
- }
97
- return this.color.apply(this, __spreadArrays([this._blue], args));
63
+ blue(...args) {
64
+ return this.color.apply(this, [this._blue, ...args]);
98
65
  },
99
- cyan: function () {
100
- var args = [];
101
- for (var _i = 0; _i < arguments.length; _i++) {
102
- args[_i] = arguments[_i];
103
- }
104
- return this.color.apply(this, __spreadArrays([this._cyan], args));
66
+ cyan(...args) {
67
+ return this.color.apply(this, [this._cyan, ...args]);
105
68
  },
106
- white: function () {
107
- var args = [];
108
- for (var _i = 0; _i < arguments.length; _i++) {
109
- args[_i] = arguments[_i];
110
- }
111
- return this.color.apply(this, __spreadArrays([this._white], args));
69
+ white(...args) {
70
+ return this.color.apply(this, [this._white, ...args]);
112
71
  },
113
- gray: function () {
114
- var args = [];
115
- for (var _i = 0; _i < arguments.length; _i++) {
116
- args[_i] = arguments[_i];
117
- }
118
- return this.color.apply(this, __spreadArrays([this._gray], args));
72
+ gray(...args) {
73
+ return this.color.apply(this, [this._gray, ...args]);
119
74
  },
120
75
  };
@@ -0,0 +1 @@
1
+ export declare function checkoutBranch(branchName: string): Promise<void>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkoutBranch = void 0;
4
+ const exec_1 = require("./exec");
5
+ const color_1 = require("../color");
6
+ //
7
+ async function checkoutBranch(branchName) {
8
+ if (!branchName) {
9
+ throw new Error('No branch...');
10
+ }
11
+ const checkoutCommand = `git checkout ${branchName}`;
12
+ console.log(' ' + color_1.clc.green('git checkout', branchName) + '\n');
13
+ const checkoutCommandResult = await (0, exec_1.exec)(checkoutCommand);
14
+ console.log(checkoutCommandResult);
15
+ }
16
+ exports.checkoutBranch = checkoutBranch;
@@ -0,0 +1 @@
1
+ export declare function deleteBranch(branchName: string): Promise<void>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteBranch = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const exec_1 = require("./exec");
9
+ const color_1 = require("../color");
10
+ async function deleteBranch(branchName) {
11
+ if (!branchName) {
12
+ throw new Error('No branch...');
13
+ }
14
+ const res = await inquirer_1.default.prompt({
15
+ type: 'confirm',
16
+ name: 'answer',
17
+ message: color_1.clc.yellow('Are you sure you want to delete the branch "') + color_1.clc.red(branchName) + color_1.clc.yellow('"?'),
18
+ default: false,
19
+ });
20
+ if (res.answer === true) {
21
+ const command = `git branch -D ${branchName}`;
22
+ console.log(' ' + color_1.clc.redBg(`git branch -D ${branchName}`, '') + '\n');
23
+ const checkoutCommandResult = await (0, exec_1.exec)(command);
24
+ console.log(checkoutCommandResult);
25
+ console.log(color_1.clc.yellow('Branch'), color_1.clc.red(branchName), color_1.clc.yellow('has been deleted'));
26
+ return;
27
+ }
28
+ console.log(color_1.clc.yellow('The branch was not deleted'));
29
+ }
30
+ exports.deleteBranch = deleteBranch;
@@ -0,0 +1 @@
1
+ export declare function exec(command: any): Promise<string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exec = void 0;
4
+ const child_process_1 = require("child_process");
5
+ function exec(command) {
6
+ return new Promise((resolve, reject) => (0, child_process_1.exec)(command, (err, stdout) => err ? reject(err) : resolve(stdout)));
7
+ }
8
+ exports.exec = exec;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * get branch list
3
+ */
4
+ export declare function getBranches(): Promise<string[]>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBranches = void 0;
4
+ const exec_1 = require("./exec");
5
+ /**
6
+ * get branch list
7
+ */
8
+ function getBranches() {
9
+ return (0, exec_1.exec)('git branch --all')
10
+ .then(parseBranches)
11
+ .then(branches => {
12
+ if (branches.length) {
13
+ return branches;
14
+ }
15
+ throw new Error('No branches found...');
16
+ });
17
+ }
18
+ exports.getBranches = getBranches;
19
+ function parseBranches(stdout) {
20
+ return stdout
21
+ .split('\n')
22
+ .filter(s => !/\s->\s/.test(s))
23
+ .map(cleanBranchName)
24
+ .filter(Boolean)
25
+ .filter(onlyUnique);
26
+ }
27
+ function cleanBranchName(name) {
28
+ return name
29
+ .replace(/^\*/, '')
30
+ .replace(/remotes\/origin\//, '')
31
+ .trim();
32
+ }
33
+ function onlyUnique(value, index, self) {
34
+ return self.indexOf(value) === index;
35
+ }
@@ -0,0 +1 @@
1
+ export declare function getCurrentBranchName(): Promise<void>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCurrentBranchName = void 0;
4
+ const exec_1 = require("./exec");
5
+ async function getCurrentBranchName() {
6
+ const currentBranchName = `git rev-parse --abbrev-ref HEAD`;
7
+ const stdout = await (0, exec_1.exec)(currentBranchName);
8
+ console.log(stdout);
9
+ }
10
+ exports.getCurrentBranchName = getCurrentBranchName;
@@ -0,0 +1,3 @@
1
+ export * from './checkout-branch';
2
+ export * from './get-branches';
3
+ export * from './get-current-branch-name';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./checkout-branch"), exports);
18
+ __exportStar(require("./get-branches"), exports);
19
+ __exportStar(require("./get-current-branch-name"), exports);
package/dist/index.js CHANGED
@@ -1,64 +1,22 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ask_1 = require("./ask");
4
+ const cli_commands_1 = require("./cli-commands");
5
+ const commands_1 = require("./commands");
6
+ const delete_barnch_1 = require("./commands/delete-barnch");
7
+ const run = async () => {
8
+ const userWish = (0, cli_commands_1.getWishOfUser)();
9
+ if (cli_commands_1.Commands.Help === userWish) {
10
+ console.log((0, cli_commands_1.getHelp)());
11
+ return;
36
12
  }
13
+ const branches = await (0, commands_1.getBranches)();
14
+ const { branch } = await (0, ask_1.ask)('Select branch', branches);
15
+ if (cli_commands_1.Commands.DeleteBranch === userWish) {
16
+ (0, delete_barnch_1.deleteBranch)(branch);
17
+ return;
18
+ }
19
+ await (0, commands_1.checkoutBranch)(branch);
20
+ await (0, commands_1.getCurrentBranchName)();
37
21
  };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- var commands_1 = require("./commands");
40
- var ask_1 = require("./ask");
41
- var run = function () { return __awaiter(void 0, void 0, void 0, function () {
42
- var branches, branch, stdout;
43
- return __generator(this, function (_a) {
44
- switch (_a.label) {
45
- case 0: return [4 /*yield*/, commands_1.getBranches()];
46
- case 1:
47
- branches = _a.sent();
48
- return [4 /*yield*/, ask_1.ask('Select branch', branches)];
49
- case 2:
50
- branch = (_a.sent()).branch;
51
- return [4 /*yield*/, commands_1.checkoutBranch(branch)];
52
- case 3:
53
- stdout = _a.sent();
54
- console.log(stdout);
55
- return [2 /*return*/];
56
- }
57
- });
58
- }); };
59
- try {
60
- run();
61
- }
62
- catch (err) {
63
- console.log(err);
64
- }
22
+ run();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "avil13-co",
3
- "version": "1.1.4",
3
+ "version": "2.0.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "public": true,
@@ -14,13 +14,13 @@
14
14
  "assets"
15
15
  ],
16
16
  "scripts": {
17
- "prepublish": "npm run build",
17
+ "prepublishOnly": "npm run build",
18
18
  "start": "npm run build && node dist/index.js",
19
19
  "dev": "ts-node --project tsconfig.json src/index.ts",
20
20
  "dev:watch": "nodemon",
21
21
  "lint:fix": "eslint --fix --ext .js,.ts .",
22
- "test": "jest",
23
- "test:watch": "jest --watch",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
24
  "type-check": "tsc -p . --noEmit",
25
25
  "type-check:watch": "npm run type-check -- --watch",
26
26
  "build": "rm -rf ./dist && tsc -p ."
@@ -37,12 +37,13 @@
37
37
  "url": "git@github.com:avil13/avil13-git-co.git"
38
38
  },
39
39
  "dependencies": {
40
- "inquirer": "^7.0.4",
41
- "inquirer-autocomplete-prompt": "^1.0.2"
40
+ "inquirer": "^8.2.2",
41
+ "inquirer-autocomplete-prompt": "^2.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^13.7.0",
45
- "ts-node": "^8.6.2",
46
- "typescript": "^3.7.5"
44
+ "@types/inquirer": "^8.2.1",
45
+ "@types/node": "^17.0.23",
46
+ "ts-node": "^10.7.0",
47
+ "typescript": "^4.6.3"
47
48
  }
48
49
  }
package/src/ask.ts CHANGED
@@ -1,4 +1,4 @@
1
- const inquirer = require('inquirer');
1
+ import inquirer from 'inquirer';
2
2
 
3
3
  inquirer.registerPrompt(
4
4
  'autocomplete',
@@ -13,6 +13,7 @@ const specSymbols = {
13
13
 
14
14
  export const ask = async (message: string, choices: string[]) => {
15
15
  const prompt = inquirer.prompt({
16
+ //@ts-ignore
16
17
  type: 'autocomplete',
17
18
  name: 'branch',
18
19
  message,
@@ -0,0 +1,39 @@
1
+
2
+
3
+ const args = process.argv.slice(2);
4
+
5
+ export enum Commands {
6
+ Unknown,
7
+ Help,
8
+ DeleteBranch,
9
+ };
10
+
11
+ export const getWishOfUser = (firstArg?: string): Commands => {
12
+ const arg: string = firstArg || args[0];
13
+
14
+ switch (true) {
15
+ case ['help', '-h', '--h', '--help'].includes(arg):
16
+ return Commands.Help;
17
+
18
+ case ['D', '-D', 'rm'].includes(arg):
19
+ return Commands.DeleteBranch;
20
+
21
+ default:
22
+ return Commands.Unknown;
23
+ }
24
+ }
25
+
26
+
27
+ export const getHelp = (): string => {
28
+ return `
29
+ DESCRIPTION:
30
+ A console program for quickly switching between branches
31
+
32
+ OPTIONS:
33
+ help, -h, --h, --help
34
+ Showing this message
35
+
36
+ D, D', 'rm
37
+ Delete the selected branch
38
+ `;
39
+ }
package/src/color.ts CHANGED
@@ -1,4 +1,4 @@
1
- module.exports = {
1
+ export const clc = {
2
2
  _red: '\x1b[31m',
3
3
  _green: '\x1b[32m',
4
4
  _yellow: '\x1b[33m',
@@ -27,7 +27,7 @@ module.exports = {
27
27
  ? this.green.apply(this, strList)
28
28
  : this.red.apply(this, strList);
29
29
  },
30
- greenOrRedBg(isVal, ...strList) {
30
+ greenOrRedBg(isVal, ...strList: any) {
31
31
  return isVal === true
32
32
  ? this.greenBg.apply(this, strList)
33
33
  : this.redBg.apply(this, strList);
@@ -0,0 +1,16 @@
1
+ import { exec } from './exec';
2
+ import { clc } from '../color';
3
+
4
+ //
5
+ export async function checkoutBranch(branchName: string) {
6
+ if (!branchName) {
7
+ throw new Error('No branch...');
8
+ }
9
+
10
+ const checkoutCommand = `git checkout ${branchName}`;
11
+
12
+ console.log(' ' + clc.green('git checkout', branchName) + '\n');
13
+
14
+ const checkoutCommandResult = await exec(checkoutCommand);
15
+ console.log(checkoutCommandResult);
16
+ }
@@ -0,0 +1,31 @@
1
+ import inquirer from 'inquirer';
2
+ import { exec } from './exec';
3
+ import { clc } from '../color';
4
+
5
+ export async function deleteBranch(branchName: string) {
6
+ if (!branchName) {
7
+ throw new Error('No branch...');
8
+ }
9
+
10
+ const res = await inquirer.prompt({
11
+ type: 'confirm',
12
+ name: 'answer',
13
+ message: clc.yellow('Are you sure you want to delete the branch "') + clc.red(branchName) + clc.yellow('"?'),
14
+ default: false,
15
+ });
16
+
17
+ if (res.answer === true) {
18
+ const command = `git branch -D ${branchName}`;
19
+
20
+ console.log(' ' + clc.redBg(`git branch -D ${branchName}`, '') + '\n');
21
+
22
+ const checkoutCommandResult = await exec(command);
23
+
24
+ console.log(checkoutCommandResult);
25
+ console.log(clc.yellow('Branch'), clc.red(branchName), clc.yellow('has been deleted'));
26
+
27
+ return;
28
+ }
29
+
30
+ console.log(clc.yellow('The branch was not deleted'));
31
+ }
@@ -0,0 +1,9 @@
1
+ import { exec as exe } from 'child_process';
2
+
3
+ export function exec(command): Promise<string> {
4
+ return new Promise((resolve, reject) =>
5
+ exe(command, (err, stdout) =>
6
+ err ? reject(err) : resolve(stdout)
7
+ )
8
+ );
9
+ }
@@ -0,0 +1,35 @@
1
+ import { exec } from './exec';
2
+
3
+ /**
4
+ * get branch list
5
+ */
6
+ export function getBranches(): Promise<string[]> {
7
+ return exec('git branch --all')
8
+ .then(parseBranches)
9
+ .then(branches => {
10
+ if (branches.length) {
11
+ return branches;
12
+ }
13
+ throw new Error('No branches found...');
14
+ });
15
+ }
16
+
17
+ function parseBranches(stdout) {
18
+ return stdout
19
+ .split('\n')
20
+ .filter(s => !/\s->\s/.test(s))
21
+ .map(cleanBranchName)
22
+ .filter(Boolean)
23
+ .filter(onlyUnique);
24
+ }
25
+
26
+ function cleanBranchName(name) {
27
+ return name
28
+ .replace(/^\*/, '')
29
+ .replace(/remotes\/origin\//, '')
30
+ .trim();
31
+ }
32
+
33
+ function onlyUnique(value, index, self) {
34
+ return self.indexOf(value) === index;
35
+ }
@@ -0,0 +1,9 @@
1
+ import { exec } from './exec';
2
+
3
+ export async function getCurrentBranchName(){
4
+ const currentBranchName = `git rev-parse --abbrev-ref HEAD`;
5
+
6
+ const stdout = await exec(currentBranchName);
7
+ console.log(stdout);
8
+ }
9
+
@@ -0,0 +1,3 @@
1
+ export * from './checkout-branch';
2
+ export * from './get-branches';
3
+ export * from './get-current-branch-name';
package/src/index.ts CHANGED
@@ -1,17 +1,28 @@
1
- import { getBranches, checkoutBranch } from './commands';
2
1
  import { ask } from './ask';
2
+ import { Commands, getHelp, getWishOfUser } from './cli-commands';
3
+ import { checkoutBranch, getBranches, getCurrentBranchName } from './commands';
4
+ import { deleteBranch } from './commands/delete-barnch';
3
5
 
4
6
  const run = async () => {
7
+ const userWish = getWishOfUser();
8
+
9
+ if (Commands.Help === userWish) {
10
+ console.log(getHelp());
11
+ return;
12
+ }
13
+
5
14
  const branches = await getBranches();
6
15
 
7
16
  const { branch } = await ask('Select branch', branches);
8
17
 
9
- const stdout = await checkoutBranch(branch);
10
- console.log(stdout);
18
+ if (Commands.DeleteBranch === userWish) {
19
+ deleteBranch(branch);
20
+ return;
21
+ }
22
+
23
+ await checkoutBranch(branch);
24
+
25
+ await getCurrentBranchName()
11
26
  };
12
27
 
13
- try {
14
- run();
15
- } catch (err) {
16
- console.log(err);
17
- }
28
+ run();
@@ -1,8 +0,0 @@
1
- /**
2
- * get branch list
3
- */
4
- export declare function getBranches(): Promise<string[]>;
5
- /**
6
- * checkout branch
7
- */
8
- export declare function checkoutBranch(branchName: string): Promise<string>;
package/dist/commands.js DELETED
@@ -1,108 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- var child_process = require('child_process');
40
- var clc = require('./color');
41
- function exec(command) {
42
- return new Promise(function (resolve, reject) {
43
- return child_process.exec(command, function (err, stdout) {
44
- return err ? reject(err) : resolve(stdout);
45
- });
46
- });
47
- }
48
- /**
49
- * get branch list
50
- */
51
- function getBranches() {
52
- return exec('git branch --all')
53
- .then(parseBranches)
54
- .then(function (branches) {
55
- if (branches.length) {
56
- return branches;
57
- }
58
- throw new Error('No branches found...');
59
- });
60
- }
61
- exports.getBranches = getBranches;
62
- function parseBranches(stdout) {
63
- return stdout
64
- .split('\n')
65
- .filter(function (s) { return !/\s->\s/.test(s); })
66
- .map(cleanBranchName)
67
- .filter(Boolean)
68
- .filter(onlyUnique);
69
- }
70
- function cleanBranchName(name) {
71
- return name
72
- .replace(/^\*/, '')
73
- .replace(/remotes\/origin\//, '')
74
- .trim();
75
- }
76
- function onlyUnique(value, index, self) {
77
- return self.indexOf(value) === index;
78
- }
79
- /**
80
- * checkout branch
81
- */
82
- function checkoutBranch(branchName) {
83
- return __awaiter(this, void 0, void 0, function () {
84
- var stdoutStrings, checkoutCommand, currentBranchName, checkoutCommandResult, currentBranchNameResult;
85
- return __generator(this, function (_a) {
86
- switch (_a.label) {
87
- case 0:
88
- if (!branchName) {
89
- throw new Error('No branch...');
90
- }
91
- stdoutStrings = [];
92
- checkoutCommand = "git checkout " + branchName;
93
- currentBranchName = "git rev-parse --abbrev-ref HEAD";
94
- stdoutStrings.push(' ' + clc.green('git checkout', branchName) + '\n');
95
- return [4 /*yield*/, exec(checkoutCommand)];
96
- case 1:
97
- checkoutCommandResult = _a.sent();
98
- stdoutStrings.push(checkoutCommandResult);
99
- return [4 /*yield*/, exec(currentBranchName)];
100
- case 2:
101
- currentBranchNameResult = _a.sent();
102
- stdoutStrings.push(' ' + clc.green(currentBranchNameResult));
103
- return [2 /*return*/, stdoutStrings.join('\n')];
104
- }
105
- });
106
- });
107
- }
108
- exports.checkoutBranch = checkoutBranch;
package/src/commands.ts DELETED
@@ -1,67 +0,0 @@
1
- const child_process = require('child_process');
2
- const clc = require('./color');
3
-
4
- function exec(command): Promise<string> {
5
- return new Promise((resolve, reject) =>
6
- child_process.exec(command, (err, stdout) =>
7
- err ? reject(err) : resolve(stdout)
8
- )
9
- );
10
- }
11
-
12
- /**
13
- * get branch list
14
- */
15
- export function getBranches(): Promise<string[]> {
16
- return exec('git branch --all')
17
- .then(parseBranches)
18
- .then(branches => {
19
- if (branches.length) {
20
- return branches;
21
- }
22
- throw new Error('No branches found...');
23
- });
24
- }
25
-
26
- function parseBranches(stdout) {
27
- return stdout
28
- .split('\n')
29
- .filter(s => !/\s->\s/.test(s))
30
- .map(cleanBranchName)
31
- .filter(Boolean)
32
- .filter(onlyUnique);
33
- }
34
-
35
- function cleanBranchName(name) {
36
- return name
37
- .replace(/^\*/, '')
38
- .replace(/remotes\/origin\//, '')
39
- .trim();
40
- }
41
-
42
- function onlyUnique(value, index, self) {
43
- return self.indexOf(value) === index;
44
- }
45
-
46
- /**
47
- * checkout branch
48
- */
49
- export async function checkoutBranch(branchName: string): Promise<string> {
50
- if (!branchName) {
51
- throw new Error('No branch...');
52
- }
53
-
54
- const stdoutStrings: string[] = [];
55
- const checkoutCommand = `git checkout ${branchName}`;
56
- const currentBranchName = `git rev-parse --abbrev-ref HEAD`;
57
-
58
- stdoutStrings.push(' ' + clc.green('git checkout', branchName) + '\n');
59
-
60
- const checkoutCommandResult = await exec(checkoutCommand);
61
- stdoutStrings.push(checkoutCommandResult);
62
-
63
- const currentBranchNameResult = await exec(currentBranchName);
64
- stdoutStrings.push(' ' + clc.green(currentBranchNameResult));
65
-
66
- return stdoutStrings.join('\n');
67
- }