@elsikora/git-branch-lint 1.0.1-dev.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/bin/application/create-branch-tool/createBranch.d.ts +1 -0
- package/bin/application/create-branch-tool/utils/alignChoices.d.ts +8 -0
- package/bin/application/create-branch-tool/utils/branchNameQuiz.d.ts +2 -0
- package/bin/application/create-branch-tool/utils/runGitCommand.d.ts +1 -0
- package/bin/application/use-cases/get-branch-config-use-case.d.ts +2 -2
- package/bin/application/use-cases/get-current-branch-use-case.d.ts +1 -2
- package/bin/application/use-cases/lint-branch-name-use-case.d.ts +2 -2
- package/bin/domain/entities/branch.d.ts +2 -3
- package/bin/domain/interfaces/branch.type.d.ts +5 -0
- package/bin/domain/interfaces/config.type.d.ts +7 -0
- package/bin/domain/interfaces/repositories/ibranch-repository.d.ts +1 -2
- package/bin/domain/interfaces/repositories/iconfig-repository.d.ts +2 -2
- package/bin/domain/interfaces/rules.type.d.ts +7 -0
- package/bin/domain/repositories/branch-repository.d.ts +1 -2
- package/bin/domain/repositories/config-repository.d.ts +2 -2
- package/bin/index.d.ts +1 -1
- package/bin/index.js +233 -125
- package/bin/index.js.map +1 -1
- package/bin/infrastructure/config/cosmiconfig-repository.d.ts +6 -2
- package/bin/infrastructure/git/git-branch-repository.d.ts +1 -2
- package/bin/presentation/cli/formatters/hint-formatter.d.ts +2 -2
- package/package.json +15 -4
- package/bin/domain/interfaces/branch-interfaces.d.ts +0 -22
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createBranch: (appName: string) => Promise<void>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BranchList } from "../../../domain/interfaces/branch.type";
|
|
2
|
+
interface IAlignChoicesResult {
|
|
3
|
+
name: string;
|
|
4
|
+
short: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const alignChoices: (branchList: BranchList) => Array<IAlignChoicesResult>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const runGitCommand: (command: string) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BranchLintConfig } from "../../domain/interfaces/config.type";
|
|
2
2
|
import type { IConfigRepository } from "../../domain/interfaces/repository-interfaces";
|
|
3
3
|
/**
|
|
4
4
|
* Use case for getting branch configuration
|
|
@@ -15,5 +15,5 @@ export declare class GetBranchConfigUseCase {
|
|
|
15
15
|
* @param appName The application name
|
|
16
16
|
* @returns The branch configuration
|
|
17
17
|
*/
|
|
18
|
-
execute(appName: string): Promise<
|
|
18
|
+
execute(appName: string): Promise<BranchLintConfig>;
|
|
19
19
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TBranchName } from "../../domain/interfaces/branch-interfaces";
|
|
2
1
|
import type { IBranchRepository } from "../../domain/interfaces/repository-interfaces";
|
|
3
2
|
/**
|
|
4
3
|
* Use case for getting the current branch name
|
|
@@ -14,5 +13,5 @@ export declare class GetCurrentBranchUseCase {
|
|
|
14
13
|
* Execute the use case
|
|
15
14
|
* @returns The current branch name
|
|
16
15
|
*/
|
|
17
|
-
execute(): Promise<
|
|
16
|
+
execute(): Promise<string>;
|
|
18
17
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BranchLintConfig } from "../../domain/interfaces/config.type";
|
|
2
2
|
/**
|
|
3
3
|
* Use case for linting a branch name
|
|
4
4
|
*/
|
|
@@ -12,7 +12,7 @@ export declare class LintBranchNameUseCase {
|
|
|
12
12
|
* @throws {BranchTooShortError} When branch name is shorter than the minimum length
|
|
13
13
|
* @throws {BranchTooLongError} When branch name is longer than the maximum length
|
|
14
14
|
*/
|
|
15
|
-
execute(branchName:
|
|
15
|
+
execute(branchName: string, config: BranchLintConfig): void;
|
|
16
16
|
/**
|
|
17
17
|
* Validate the branch name against the pattern
|
|
18
18
|
* @param branchName The branch name to validate
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { TBranchName } from "../interfaces/branch-interfaces";
|
|
2
1
|
/**
|
|
3
2
|
* Domain entity representing a Git branch
|
|
4
3
|
*/
|
|
5
4
|
export declare class Branch {
|
|
6
5
|
private readonly VALUE;
|
|
7
|
-
constructor(name:
|
|
8
|
-
getName():
|
|
6
|
+
constructor(name: string);
|
|
7
|
+
getName(): string;
|
|
9
8
|
isProhibited(prohibitedNames: ReadonlyArray<string>): boolean;
|
|
10
9
|
isTooLong(maxLength?: number): boolean;
|
|
11
10
|
isTooShort(minLength?: number): boolean;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TBranchName } from "../branch-interfaces";
|
|
2
1
|
/**
|
|
3
2
|
* Repository interface for branch operations
|
|
4
3
|
*/
|
|
@@ -6,5 +5,5 @@ export interface IBranchRepository {
|
|
|
6
5
|
/**
|
|
7
6
|
* Get the current branch name
|
|
8
7
|
*/
|
|
9
|
-
getCurrentBranchName(): Promise<
|
|
8
|
+
getCurrentBranchName(): Promise<string>;
|
|
10
9
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BranchLintConfig } from "../config.type";
|
|
2
2
|
/**
|
|
3
3
|
* Repository interface for configuration operations
|
|
4
4
|
*/
|
|
@@ -7,5 +7,5 @@ export interface IConfigRepository {
|
|
|
7
7
|
* Get the branch configuration
|
|
8
8
|
* @param appName The name of the application
|
|
9
9
|
*/
|
|
10
|
-
getConfig(appName: string): Promise<
|
|
10
|
+
getConfig(appName: string): Promise<BranchLintConfig>;
|
|
11
11
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TBranchName } from "../interfaces/branch-interfaces";
|
|
2
1
|
/**
|
|
3
2
|
* Repository interface for branch operations
|
|
4
3
|
* @deprecated Use IBranchRepository instead
|
|
@@ -7,5 +6,5 @@ export interface BranchRepository {
|
|
|
7
6
|
/**
|
|
8
7
|
* Get the current branch name
|
|
9
8
|
*/
|
|
10
|
-
getCurrentBranchName(): Promise<
|
|
9
|
+
getCurrentBranchName(): Promise<string>;
|
|
11
10
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { IBranchConfig } from "../interfaces/branch-interfaces";
|
|
2
1
|
/**
|
|
3
2
|
* Repository interface for configuration operations
|
|
4
3
|
* @deprecated Use IConfigRepository instead
|
|
5
4
|
*/
|
|
5
|
+
import type { BranchLintConfig } from "../interfaces/config.type";
|
|
6
6
|
export interface ConfigRepository {
|
|
7
7
|
/**
|
|
8
8
|
* Get the branch configuration
|
|
9
9
|
* @param appName The name of the application
|
|
10
10
|
*/
|
|
11
|
-
getConfig(appName: string): Promise<
|
|
11
|
+
getConfig(appName: string): Promise<BranchLintConfig>;
|
|
12
12
|
}
|
package/bin/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export type { BranchLintConfig } from "./domain/interfaces/config.type";
|
package/bin/index.js
CHANGED
|
@@ -1,9 +1,172 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import yargs from 'yargs';
|
|
3
|
+
import { execSync, exec } from 'node:child_process';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
2
5
|
import { cosmiconfig } from 'cosmiconfig';
|
|
3
|
-
import { exec } from 'node:child_process';
|
|
4
6
|
import { promisify } from 'node:util';
|
|
5
7
|
import chalk from 'chalk';
|
|
6
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Default configuration for branch linting
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_CONFIG = {
|
|
13
|
+
branches: {
|
|
14
|
+
bugfix: { description: "🐞 Fixing issues in existing functionality", title: "Bugfix" },
|
|
15
|
+
feature: { description: "🆕 Integration of new functionality", title: "Feature" },
|
|
16
|
+
hotfix: { description: "🚑 Critical fixes for urgent issues", title: "Hotfix" },
|
|
17
|
+
release: { description: "📦 Preparing a new release version", title: "Release" },
|
|
18
|
+
support: { description: "🛠️ Support and maintenance tasks", title: "Support" },
|
|
19
|
+
},
|
|
20
|
+
ignore: ["dev"],
|
|
21
|
+
rules: {
|
|
22
|
+
"branch-max-length": 50,
|
|
23
|
+
"branch-min-length": 5,
|
|
24
|
+
"branch-pattern": ":type/:name",
|
|
25
|
+
"branch-prohibited": ["main", "master", "release"],
|
|
26
|
+
"branch-subject-pattern": "[a-z0-9-]+",
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Cosmiconfig implementation of ConfigRepository
|
|
31
|
+
*/
|
|
32
|
+
class CosmiconfigRepository {
|
|
33
|
+
/**
|
|
34
|
+
* Get the branch configuration
|
|
35
|
+
* @param appName The name of the application
|
|
36
|
+
* @returns A promise that resolves to the branch configuration
|
|
37
|
+
*/
|
|
38
|
+
async getConfig(appName) {
|
|
39
|
+
const configExplorer = cosmiconfig(appName, {
|
|
40
|
+
packageProp: `elsikora.${appName}`,
|
|
41
|
+
searchPlaces: ["package.json", `.elsikora/.${appName}rc`, `.elsikora/.${appName}rc.json`, `.elsikora/.${appName}rc.yaml`, `.elsikora/.${appName}rc.yml`, `.elsikora/.${appName}rc.js`, `.elsikora/.${appName}rc.ts`, `.elsikora/.${appName}rc.mjs`, `.elsikora/.${appName}rc.cjs`, `.elsikora/${appName}.config.js`, `.elsikora/${appName}.config.ts`, `.elsikora/${appName}.config.mjs`, `.elsikora/${appName}.config.cjs`],
|
|
42
|
+
});
|
|
43
|
+
const result = await configExplorer.search();
|
|
44
|
+
if (!result || result.isEmpty) {
|
|
45
|
+
return DEFAULT_CONFIG;
|
|
46
|
+
}
|
|
47
|
+
// Convert the config to match our interfaces
|
|
48
|
+
const providedConfig = result.config;
|
|
49
|
+
const mergedConfig = {
|
|
50
|
+
...DEFAULT_CONFIG,
|
|
51
|
+
...providedConfig,
|
|
52
|
+
};
|
|
53
|
+
return mergedConfig;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const EMPTY_SPACING_OFFSET = 5; // in spaces
|
|
58
|
+
// Функция для выравнивания текста
|
|
59
|
+
const alignChoices = (branchList) => {
|
|
60
|
+
if (Array.isArray(branchList)) {
|
|
61
|
+
return branchList.map((branchName) => {
|
|
62
|
+
return {
|
|
63
|
+
name: branchName,
|
|
64
|
+
short: branchName,
|
|
65
|
+
value: branchName,
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const nameOfBranchesArray = Object.keys(branchList);
|
|
71
|
+
const maxNameLength = Math.max(...nameOfBranchesArray.map((branchName) => branchName.length));
|
|
72
|
+
// Формируем choices с выравниванием
|
|
73
|
+
return nameOfBranchesArray.map((branchName) => {
|
|
74
|
+
const padding = " ".repeat(maxNameLength - branchName.length + EMPTY_SPACING_OFFSET);
|
|
75
|
+
return {
|
|
76
|
+
name: `${branchList[branchName].title}:${padding}${branchList[branchName].description}`,
|
|
77
|
+
short: branchList[branchName].title,
|
|
78
|
+
value: branchName,
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const branchNameQuiz = async (branchList) => {
|
|
85
|
+
const { branchType } = await inquirer.prompt([
|
|
86
|
+
{
|
|
87
|
+
choices: alignChoices(branchList),
|
|
88
|
+
message: "Select the type of branch you're creating:",
|
|
89
|
+
name: "branchType",
|
|
90
|
+
type: "list",
|
|
91
|
+
},
|
|
92
|
+
]);
|
|
93
|
+
const { branchName } = await inquirer.prompt([
|
|
94
|
+
{
|
|
95
|
+
message: "Enter the branch name (e.g., authorization):",
|
|
96
|
+
name: "branchName",
|
|
97
|
+
type: "input",
|
|
98
|
+
// Валидация названия ветки
|
|
99
|
+
// eslint-disable-next-line @elsikora/sonar/function-return-type
|
|
100
|
+
validate: (input) => {
|
|
101
|
+
if (!input.trim()) {
|
|
102
|
+
return "Branch name cannot be empty!";
|
|
103
|
+
}
|
|
104
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
105
|
+
return "Branch name can only contain lowercase letters, numbers, and hyphens!";
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
]);
|
|
111
|
+
const fullBranchName = `${branchType}/${branchName}`;
|
|
112
|
+
console.log(`\n⌛️ Creating branch: ${fullBranchName}`);
|
|
113
|
+
return fullBranchName;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/* eslint-disable @elsikora/sonar/os-command */
|
|
117
|
+
/* eslint-disable @elsikora/unicorn/no-process-exit */
|
|
118
|
+
// Функция для выполнения Git-команд
|
|
119
|
+
const runGitCommand = (command) => {
|
|
120
|
+
try {
|
|
121
|
+
execSync(command, { stdio: "inherit" });
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(`❌ Error executing command: ${command}`);
|
|
125
|
+
console.error(error.message);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/* eslint-disable @elsikora/sonar/no-os-command-from-path */
|
|
131
|
+
/* eslint-disable @elsikora/unicorn/no-process-exit */
|
|
132
|
+
/* eslint-disable @elsikora/node/no-extraneous-import */
|
|
133
|
+
// Основная функция для создания ветки
|
|
134
|
+
const createBranch = async (appName) => {
|
|
135
|
+
const configRepository = new CosmiconfigRepository();
|
|
136
|
+
const { branches } = await configRepository.getConfig(appName);
|
|
137
|
+
// Проверка чистоты рабочей директории (есть ли незакомиченные файлы)
|
|
138
|
+
const status = execSync("git status --porcelain", { encoding: "utf8" });
|
|
139
|
+
if (status) {
|
|
140
|
+
console.log("⚠️ You have uncommitted changes. Please commit or stash them before creating a new branch.");
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
//
|
|
144
|
+
console.log("🌿 Creating a new branch...\n");
|
|
145
|
+
const branchName = await branchNameQuiz(branches);
|
|
146
|
+
// Проверка, не создается ли дубликат
|
|
147
|
+
const currentBranch = execSync("git rev-parse --abbrev-ref HEAD", { encoding: "utf8" }).trim();
|
|
148
|
+
if (currentBranch === branchName) {
|
|
149
|
+
console.log(`⚠️ You are already on branch ${branchName}!`);
|
|
150
|
+
process.exit(0);
|
|
151
|
+
}
|
|
152
|
+
runGitCommand(`git checkout -b ${branchName}`);
|
|
153
|
+
const { shouldPush } = await inquirer.prompt([
|
|
154
|
+
{
|
|
155
|
+
default: false,
|
|
156
|
+
message: "Do you want to push the branch to the remote repository?",
|
|
157
|
+
name: "shouldPush",
|
|
158
|
+
type: "confirm",
|
|
159
|
+
},
|
|
160
|
+
]);
|
|
161
|
+
if (shouldPush) {
|
|
162
|
+
runGitCommand(`git push --set-upstream origin ${branchName}`);
|
|
163
|
+
console.log(`✅ Branch ${branchName} pushed to remote repository!`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
console.log(`✅ Branch ${branchName} created locally!`);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
7
170
|
/**
|
|
8
171
|
* Use case for getting branch configuration
|
|
9
172
|
*/
|
|
@@ -89,7 +252,7 @@ class LintError extends Error {
|
|
|
89
252
|
*/
|
|
90
253
|
class BranchTooLongError extends LintError {
|
|
91
254
|
constructor(branchName, maxLength) {
|
|
92
|
-
// eslint-disable-next-line @elsikora
|
|
255
|
+
// eslint-disable-next-line @elsikora/typescript/restrict-template-expressions
|
|
93
256
|
super(`Branch name "${branchName}" is too long (maximum length: ${maxLength})`);
|
|
94
257
|
this.name = "BranchTooLongError";
|
|
95
258
|
}
|
|
@@ -99,7 +262,7 @@ class BranchTooLongError extends LintError {
|
|
|
99
262
|
*/
|
|
100
263
|
class BranchTooShortError extends LintError {
|
|
101
264
|
constructor(branchName, minLength) {
|
|
102
|
-
// eslint-disable-next-line @elsikora
|
|
265
|
+
// eslint-disable-next-line @elsikora/typescript/restrict-template-expressions
|
|
103
266
|
super(`Branch name "${branchName}" is too short (minimum length: ${minLength})`);
|
|
104
267
|
this.name = "BranchTooShortError";
|
|
105
268
|
}
|
|
@@ -138,18 +301,19 @@ class LintBranchNameUseCase {
|
|
|
138
301
|
*/
|
|
139
302
|
execute(branchName, config) {
|
|
140
303
|
const branch = new Branch(branchName);
|
|
141
|
-
|
|
304
|
+
const configRules = config.rules;
|
|
305
|
+
const ignoreList = config.ignore ?? [];
|
|
306
|
+
if (configRules?.["branch-prohibited"] && branch.isProhibited(configRules["branch-prohibited"])) {
|
|
142
307
|
throw new ProhibitedBranchError(branchName);
|
|
143
308
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
309
|
+
if (ignoreList.length > 0 && ignoreList.includes(branchName)) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (configRules?.["branch-min-length"] && branch.isTooShort(configRules["branch-min-length"])) {
|
|
313
|
+
throw new BranchTooShortError(branchName, configRules["branch-min-length"]);
|
|
148
314
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
// @ts-ignore
|
|
152
|
-
throw new BranchTooLongError(branchName, config.MAXLENGTH);
|
|
315
|
+
if (configRules?.["branch-max-length"] && branch.isTooLong(configRules["branch-max-length"])) {
|
|
316
|
+
throw new BranchTooLongError(branchName, configRules["branch-max-length"]);
|
|
153
317
|
}
|
|
154
318
|
this.validatePattern(branch.getName(), config);
|
|
155
319
|
}
|
|
@@ -161,16 +325,22 @@ class LintBranchNameUseCase {
|
|
|
161
325
|
*/
|
|
162
326
|
validatePattern(branchName, config) {
|
|
163
327
|
// Start with original pattern
|
|
164
|
-
let
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
328
|
+
let branchNamePattern = config.rules?.["branch-pattern"];
|
|
329
|
+
const subjectNamePattern = config.rules?.["branch-subject-pattern"];
|
|
330
|
+
if (!branchNamePattern) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const parameters = {
|
|
334
|
+
type: Object.keys(config.branches),
|
|
335
|
+
// Если branch-name-pattern не определён, не добавляем name в params
|
|
336
|
+
...(subjectNamePattern && { name: [subjectNamePattern] }),
|
|
337
|
+
};
|
|
338
|
+
// Обрабатываем параметры, если они есть
|
|
339
|
+
for (const [key, values] of Object.entries(parameters)) {
|
|
168
340
|
const placeholder = `:${key.toLowerCase()}`;
|
|
169
|
-
const parameterValues = values;
|
|
170
341
|
let replacement = "(";
|
|
171
|
-
for (let index = 0; index <
|
|
172
|
-
const value =
|
|
173
|
-
// Add the value to the replacement pattern
|
|
342
|
+
for (let index = 0; index < values.length; index++) {
|
|
343
|
+
const value = values[index];
|
|
174
344
|
if (value.startsWith("[")) {
|
|
175
345
|
replacement += value;
|
|
176
346
|
}
|
|
@@ -178,17 +348,15 @@ class LintBranchNameUseCase {
|
|
|
178
348
|
const escapedValue = value.replaceAll(/[-/\\^$*+?.()|[\]{}]/g, String.raw `\$&`);
|
|
179
349
|
replacement += escapedValue;
|
|
180
350
|
}
|
|
181
|
-
|
|
182
|
-
if (index < parameterValues.length - 1) {
|
|
351
|
+
if (index < values.length - 1) {
|
|
183
352
|
replacement += "|";
|
|
184
353
|
}
|
|
185
354
|
}
|
|
186
355
|
replacement += ")";
|
|
187
|
-
|
|
188
|
-
pattern = pattern.replaceAll(new RegExp(placeholder, "g"), replacement);
|
|
356
|
+
branchNamePattern = branchNamePattern.replaceAll(new RegExp(placeholder, "g"), replacement);
|
|
189
357
|
}
|
|
190
358
|
// Create the regular expression
|
|
191
|
-
const regexp = new RegExp(`^${
|
|
359
|
+
const regexp = new RegExp(`^${branchNamePattern}$`);
|
|
192
360
|
// Test the branch name against the pattern
|
|
193
361
|
if (!regexp.test(branchName)) {
|
|
194
362
|
throw new PatternMatchError(branchName);
|
|
@@ -196,86 +364,6 @@ class LintBranchNameUseCase {
|
|
|
196
364
|
}
|
|
197
365
|
}
|
|
198
366
|
|
|
199
|
-
/**
|
|
200
|
-
* Default configuration for branch linting
|
|
201
|
-
*/
|
|
202
|
-
const DEFAULT_CONFIG = {
|
|
203
|
-
// eslint-disable-next-line @elsikora-typescript/no-magic-numbers
|
|
204
|
-
MAXLENGTH: 50,
|
|
205
|
-
// eslint-disable-next-line @elsikora-typescript/no-magic-numbers
|
|
206
|
-
MINLENGTH: 5,
|
|
207
|
-
PARAMS: {
|
|
208
|
-
NAME: ["[a-z0-9-]+"],
|
|
209
|
-
TYPE: ["feature", "hotfix", "support", "bugfix", "release"],
|
|
210
|
-
},
|
|
211
|
-
PATTERN: ":type/:name",
|
|
212
|
-
PROHIBITED: ["ci", "wip", "main", "test", "build", "master", "release", "dev", "develop"],
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Cosmiconfig implementation of ConfigRepository
|
|
216
|
-
*/
|
|
217
|
-
class CosmiconfigRepository {
|
|
218
|
-
/**
|
|
219
|
-
* Get the branch configuration
|
|
220
|
-
* @param appName The name of the application
|
|
221
|
-
* @returns A promise that resolves to the branch configuration
|
|
222
|
-
*/
|
|
223
|
-
async getConfig(appName) {
|
|
224
|
-
const configExplorer = cosmiconfig(appName, {
|
|
225
|
-
packageProp: `elsikora.${appName}`,
|
|
226
|
-
searchPlaces: ["package.json", `.elsikora/.${appName}rc`, `.elsikora/.${appName}rc.json`, `.elsikora/.${appName}rc.yaml`, `.elsikora/.${appName}rc.yml`, `.elsikora/.${appName}rc.js`, `.elsikora/.${appName}rc.ts`, `.elsikora/.${appName}rc.mjs`, `.elsikora/.${appName}rc.cjs`, `.elsikora/${appName}.config.js`, `.elsikora/${appName}.config.ts`, `.elsikora/${appName}.config.mjs`, `.elsikora/${appName}.config.cjs`],
|
|
227
|
-
});
|
|
228
|
-
const result = await configExplorer.search();
|
|
229
|
-
if (!result || result.isEmpty) {
|
|
230
|
-
return DEFAULT_CONFIG;
|
|
231
|
-
}
|
|
232
|
-
// Convert the config to match our interfaces
|
|
233
|
-
const providedConfig = result.config;
|
|
234
|
-
const uppercasedConfig = {};
|
|
235
|
-
// Create a new object with uppercase keys instead of modifying the original
|
|
236
|
-
for (const key of Object.keys(providedConfig)) {
|
|
237
|
-
const uppercaseKey = key.toUpperCase();
|
|
238
|
-
const value = providedConfig[key];
|
|
239
|
-
if (Array.isArray(value)) {
|
|
240
|
-
// Preserve arrays
|
|
241
|
-
// eslint-disable-next-line @elsikora-typescript/no-unsafe-assignment
|
|
242
|
-
uppercasedConfig[uppercaseKey] = [...value];
|
|
243
|
-
}
|
|
244
|
-
else if (typeof value === "object" && value !== null) {
|
|
245
|
-
// Handle nested objects
|
|
246
|
-
const nestedObject = {};
|
|
247
|
-
for (const subKey of Object.keys(value)) {
|
|
248
|
-
const subValue = value[subKey];
|
|
249
|
-
if (Array.isArray(subValue)) {
|
|
250
|
-
// Preserve nested arrays
|
|
251
|
-
// eslint-disable-next-line @elsikora-typescript/no-unsafe-assignment
|
|
252
|
-
nestedObject[subKey.toUpperCase()] = [...subValue];
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
nestedObject[subKey.toUpperCase()] = subValue;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
uppercasedConfig[uppercaseKey] = nestedObject;
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
// Handle primitive values
|
|
262
|
-
uppercasedConfig[uppercaseKey] = value;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
const mergedConfig = {
|
|
266
|
-
...DEFAULT_CONFIG,
|
|
267
|
-
...uppercasedConfig,
|
|
268
|
-
};
|
|
269
|
-
if (uppercasedConfig.PARAMS && DEFAULT_CONFIG.PARAMS) {
|
|
270
|
-
mergedConfig.PARAMS = {
|
|
271
|
-
...DEFAULT_CONFIG.PARAMS,
|
|
272
|
-
...uppercasedConfig.PARAMS,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
return mergedConfig;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
367
|
const execAsync = promisify(exec);
|
|
280
368
|
/**
|
|
281
369
|
* Git implementation of BranchRepository
|
|
@@ -333,12 +421,11 @@ class HintFormatter {
|
|
|
333
421
|
*/
|
|
334
422
|
formatPatternMatchHint(config) {
|
|
335
423
|
let output = "";
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
424
|
+
const branchNamePattern = config.rules?.["branch-pattern"];
|
|
425
|
+
const branchTypeList = Array.isArray(config.branches) ? config.branches : Object.keys(config.branches);
|
|
426
|
+
output += branchNamePattern ? `${chalk.blue("Expected pattern:")} ${chalk.yellow(branchNamePattern)}\n` : "";
|
|
427
|
+
const valuesList = branchTypeList.map((value) => chalk.yellow(value)).join(", ");
|
|
428
|
+
output += chalk.blue(`Valid branch types:`) + " " + valuesList + "\n";
|
|
342
429
|
return output.trim();
|
|
343
430
|
}
|
|
344
431
|
/**
|
|
@@ -347,7 +434,7 @@ class HintFormatter {
|
|
|
347
434
|
* @returns The formatted hint
|
|
348
435
|
*/
|
|
349
436
|
formatProhibitedBranchHint(config) {
|
|
350
|
-
const prohibitedList = config.
|
|
437
|
+
const prohibitedList = config.rules?.["branch-prohibited"]?.map((name) => chalk.yellow(name)).join(", ") ?? "";
|
|
351
438
|
return `${chalk.blue("Prohibited branch names:")} ${prohibitedList}`;
|
|
352
439
|
}
|
|
353
440
|
}
|
|
@@ -404,13 +491,13 @@ class CliController {
|
|
|
404
491
|
console.log(this.HINT_FORMATTER.format(error, config));
|
|
405
492
|
// Since this is a CLI tool, it's appropriate to exit the process on validation errors
|
|
406
493
|
// ESLint wants us to throw instead, but this is a CLI application where exit is acceptable
|
|
407
|
-
// eslint-disable-next-line elsikora
|
|
494
|
+
// eslint-disable-next-line @elsikora/unicorn/no-process-exit
|
|
408
495
|
process.exit(1);
|
|
409
496
|
}
|
|
410
497
|
catch {
|
|
411
498
|
console.error(this.ERROR_FORMATTER.format("Failed to load configuration for error hint"));
|
|
412
499
|
console.error(this.ERROR_FORMATTER.format(error.message));
|
|
413
|
-
// eslint-disable-next-line elsikora
|
|
500
|
+
// eslint-disable-next-line @elsikora/unicorn/no-process-exit
|
|
414
501
|
process.exit(1);
|
|
415
502
|
}
|
|
416
503
|
}
|
|
@@ -422,21 +509,42 @@ class CliController {
|
|
|
422
509
|
* Application name used for configuration
|
|
423
510
|
*/
|
|
424
511
|
const APP_NAME = "git-branch-lint";
|
|
512
|
+
const argv = yargs(process.argv.slice(2))
|
|
513
|
+
.option("branch", {
|
|
514
|
+
alias: "b",
|
|
515
|
+
description: "Run branch creation tool",
|
|
516
|
+
type: "boolean",
|
|
517
|
+
})
|
|
518
|
+
.help()
|
|
519
|
+
.usage("Usage: $0 [-b] to create a branch or lint the current branch")
|
|
520
|
+
.parseSync();
|
|
425
521
|
/**
|
|
426
522
|
* Main function that bootstraps the application
|
|
427
523
|
*/
|
|
428
524
|
const main = async () => {
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
525
|
+
if (argv.branch) {
|
|
526
|
+
try {
|
|
527
|
+
await createBranch(APP_NAME);
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
console.error("❌ Failed to create branch:", error.message);
|
|
531
|
+
// eslint-disable-next-line @elsikora/unicorn/no-process-exit
|
|
532
|
+
process.exit(1);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
// Infrastructure layer
|
|
537
|
+
const configRepository = new CosmiconfigRepository();
|
|
538
|
+
const branchRepository = new GitBranchRepository();
|
|
539
|
+
// Application layer
|
|
540
|
+
const getBranchConfigUseCase = new GetBranchConfigUseCase(configRepository);
|
|
541
|
+
const getCurrentBranchUseCase = new GetCurrentBranchUseCase(branchRepository);
|
|
542
|
+
const lintBranchNameUseCase = new LintBranchNameUseCase();
|
|
543
|
+
// Presentation layer
|
|
544
|
+
const cliController = new CliController(getBranchConfigUseCase, getCurrentBranchUseCase, lintBranchNameUseCase);
|
|
545
|
+
// Execute the application
|
|
546
|
+
await cliController.execute(APP_NAME);
|
|
547
|
+
}
|
|
440
548
|
};
|
|
441
549
|
// Bootstrap the application and handle errors
|
|
442
550
|
main().catch((error) => {
|
package/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/application/use-cases/get-branch-config-use-case.ts","../src/application/use-cases/get-current-branch-use-case.ts","../src/domain/entities/branch.ts","../src/domain/errors/lint-errors.ts","../src/application/use-cases/lint-branch-name-use-case.ts","../src/infrastructure/config/cosmiconfig-repository.ts","../src/infrastructure/git/git-branch-repository.ts","../src/presentation/cli/formatters/error-formatter.ts","../src/presentation/cli/formatters/hint-formatter.ts","../src/presentation/cli/cli-controller.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/infrastructure/config/cosmiconfig-repository.ts","../src/application/create-branch-tool/utils/alignChoices.ts","../src/application/create-branch-tool/utils/branchNameQuiz.ts","../src/application/create-branch-tool/utils/runGitCommand.ts","../src/application/create-branch-tool/createBranch.ts","../src/application/use-cases/get-branch-config-use-case.ts","../src/application/use-cases/get-current-branch-use-case.ts","../src/domain/entities/branch.ts","../src/domain/errors/lint-errors.ts","../src/application/use-cases/lint-branch-name-use-case.ts","../src/infrastructure/git/git-branch-repository.ts","../src/presentation/cli/formatters/error-formatter.ts","../src/presentation/cli/formatters/hint-formatter.ts","../src/presentation/cli/cli-controller.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BranchLintConfig } from "../../domain/interfaces/config.type";
|
|
2
2
|
import type { IConfigRepository } from "../../domain/interfaces/repository-interfaces";
|
|
3
|
+
/**
|
|
4
|
+
* Default configuration for branch linting
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_CONFIG: BranchLintConfig;
|
|
3
7
|
/**
|
|
4
8
|
* Cosmiconfig implementation of ConfigRepository
|
|
5
9
|
*/
|
|
@@ -9,5 +13,5 @@ export declare class CosmiconfigRepository implements IConfigRepository {
|
|
|
9
13
|
* @param appName The name of the application
|
|
10
14
|
* @returns A promise that resolves to the branch configuration
|
|
11
15
|
*/
|
|
12
|
-
getConfig(appName: string): Promise<
|
|
16
|
+
getConfig(appName: string): Promise<BranchLintConfig>;
|
|
13
17
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TBranchName } from "../../domain/interfaces/branch-interfaces";
|
|
2
1
|
import type { IBranchRepository } from "../../domain/interfaces/repository-interfaces";
|
|
3
2
|
/**
|
|
4
3
|
* Git implementation of BranchRepository
|
|
@@ -8,5 +7,5 @@ export declare class GitBranchRepository implements IBranchRepository {
|
|
|
8
7
|
* Get the current branch name
|
|
9
8
|
* @returns A promise that resolves to the current branch name
|
|
10
9
|
*/
|
|
11
|
-
getCurrentBranchName(): Promise<
|
|
10
|
+
getCurrentBranchName(): Promise<string>;
|
|
12
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BranchLintConfig } from "../../../domain/interfaces/config.type";
|
|
2
2
|
/**
|
|
3
3
|
* Format hint messages for CLI output
|
|
4
4
|
*/
|
|
@@ -9,7 +9,7 @@ export declare class HintFormatter {
|
|
|
9
9
|
* @param config The branch configuration
|
|
10
10
|
* @returns The formatted hint message
|
|
11
11
|
*/
|
|
12
|
-
format(error: unknown, config:
|
|
12
|
+
format(error: unknown, config: BranchLintConfig): string;
|
|
13
13
|
/**
|
|
14
14
|
* Format a hint for pattern match errors
|
|
15
15
|
* @param config The branch configuration
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elsikora/git-branch-lint",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Lint your git branch names",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lint",
|
|
@@ -18,7 +18,13 @@
|
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"author": "ElsiKora",
|
|
20
20
|
"type": "module",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./bin/index.d.ts"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
21
26
|
"main": "bin/index.js",
|
|
27
|
+
"types": "./bin/index.d.ts",
|
|
22
28
|
"bin": {
|
|
23
29
|
"git-branch-lint": "./bin/index.js"
|
|
24
30
|
},
|
|
@@ -48,7 +54,8 @@
|
|
|
48
54
|
"dependencies": {
|
|
49
55
|
"chalk": "^5.4.1",
|
|
50
56
|
"cosmiconfig": "^9.0.0",
|
|
51
|
-
"path-to-regexp": "^8.2.0"
|
|
57
|
+
"path-to-regexp": "^8.2.0",
|
|
58
|
+
"yargs": "^17.7.2"
|
|
52
59
|
},
|
|
53
60
|
"devDependencies": {
|
|
54
61
|
"@commitlint/cli": "^19.7.1",
|
|
@@ -63,7 +70,9 @@
|
|
|
63
70
|
"@semantic-release/github": "^11.0.1",
|
|
64
71
|
"@semantic-release/npm": "^12.0.1",
|
|
65
72
|
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
66
|
-
"@types/
|
|
73
|
+
"@types/inquirer": "^9.0.7",
|
|
74
|
+
"@types/node": "^22.14.1",
|
|
75
|
+
"@types/yargs": "^17.0.33",
|
|
67
76
|
"commitizen": "^4.3.1",
|
|
68
77
|
"conventional-changelog-conventionalcommits": "^8.0.0",
|
|
69
78
|
"eslint": "^9.21.0",
|
|
@@ -74,8 +83,10 @@
|
|
|
74
83
|
"rimraf": "^6.0.1",
|
|
75
84
|
"rollup": "^4.34.9",
|
|
76
85
|
"semantic-release": "^24.2.3",
|
|
86
|
+
"ts-node": "^10.9.2",
|
|
77
87
|
"tslib": "^2.8.1",
|
|
78
|
-
"
|
|
88
|
+
"tsx": "^4.19.3",
|
|
89
|
+
"typescript": "^5.8.3"
|
|
79
90
|
},
|
|
80
91
|
"publishConfig": {
|
|
81
92
|
"access": "public"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interface for branch configuration
|
|
3
|
-
*/
|
|
4
|
-
export interface IBranchConfig {
|
|
5
|
-
readonly MAXLENGTH?: number;
|
|
6
|
-
readonly MINLENGTH?: number;
|
|
7
|
-
PARAMS: IBranchParameters;
|
|
8
|
-
readonly PATTERN: string;
|
|
9
|
-
readonly PROHIBITED: ReadonlyArray<string>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Interface for branch parameters
|
|
13
|
-
*/
|
|
14
|
-
export interface IBranchParameters {
|
|
15
|
-
readonly NAME: ReadonlyArray<string>;
|
|
16
|
-
readonly TYPE: ReadonlyArray<string>;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Type definition for a branch name
|
|
20
|
-
* We explicitly keep this type for semantic clarity
|
|
21
|
-
*/
|
|
22
|
-
export type TBranchName = string;
|