@radkode/neo 0.11.6 → 0.12.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.
@@ -0,0 +1,268 @@
1
+ import { AppError, ErrorSeverity, ErrorCategory, failure, } from '../core/errors/index.js';
2
+ export var GitErrorCode;
3
+ (function (GitErrorCode) {
4
+ GitErrorCode["NOT_A_REPOSITORY"] = "GIT_NOT_A_REPOSITORY";
5
+ GitErrorCode["NO_UPSTREAM"] = "GIT_NO_UPSTREAM";
6
+ GitErrorCode["AUTHENTICATION_FAILED"] = "GIT_AUTHENTICATION_FAILED";
7
+ GitErrorCode["NETWORK_ERROR"] = "GIT_NETWORK_ERROR";
8
+ GitErrorCode["MERGE_CONFLICT"] = "GIT_MERGE_CONFLICT";
9
+ GitErrorCode["REBASE_CONFLICT"] = "GIT_REBASE_CONFLICT";
10
+ GitErrorCode["NON_FAST_FORWARD"] = "GIT_NON_FAST_FORWARD";
11
+ GitErrorCode["NOTHING_TO_COMMIT"] = "GIT_NOTHING_TO_COMMIT";
12
+ GitErrorCode["NO_STAGED_CHANGES"] = "GIT_NO_STAGED_CHANGES";
13
+ GitErrorCode["REMOTE_BRANCH_DELETED"] = "GIT_REMOTE_BRANCH_DELETED";
14
+ GitErrorCode["UNKNOWN"] = "GIT_UNKNOWN_ERROR";
15
+ })(GitErrorCode || (GitErrorCode = {}));
16
+ export class GitError extends AppError {
17
+ gitErrorCode;
18
+ commandName;
19
+ code;
20
+ severity = ErrorSeverity.MEDIUM;
21
+ category = ErrorCategory.COMMAND;
22
+ constructor(message, gitErrorCode, commandName, options) {
23
+ super(message, options);
24
+ this.gitErrorCode = gitErrorCode;
25
+ this.commandName = commandName;
26
+ this.code = gitErrorCode;
27
+ }
28
+ }
29
+ const GIT_ERROR_PATTERNS = [
30
+ {
31
+ code: GitErrorCode.NOT_A_REPOSITORY,
32
+ patterns: ['not a git repository', 'fatal: not a git repository'],
33
+ message: 'Not a git repository!',
34
+ getSuggestions: () => ['Make sure you are in a git repository directory'],
35
+ },
36
+ {
37
+ code: GitErrorCode.AUTHENTICATION_FAILED,
38
+ patterns: ['authentication', 'permission denied', 'could not read from remote'],
39
+ message: 'Authentication failed!',
40
+ getSuggestions: () => ['Check your git credentials or SSH keys'],
41
+ },
42
+ {
43
+ code: GitErrorCode.NO_UPSTREAM,
44
+ patterns: ['no upstream branch', 'no tracking information', 'no such ref was fetched'],
45
+ message: 'No upstream branch configured!',
46
+ getSuggestions: (ctx) => [
47
+ `Set an upstream branch: git branch --set-upstream-to=origin/${ctx.branchName || 'your-branch'} ${ctx.branchName || 'your-branch'}`,
48
+ `Or push with upstream: git push -u origin ${ctx.branchName || 'your-branch'}`,
49
+ ],
50
+ },
51
+ {
52
+ code: GitErrorCode.NETWORK_ERROR,
53
+ patterns: ['could not resolve host', 'network is unreachable', 'connection refused'],
54
+ message: 'Network error!',
55
+ getSuggestions: () => ['Check your internet connection'],
56
+ },
57
+ {
58
+ code: GitErrorCode.MERGE_CONFLICT,
59
+ patterns: ['merge conflict', 'automatic merge failed', 'fix conflicts'],
60
+ message: 'Merge conflicts detected!',
61
+ getSuggestions: () => [
62
+ 'Fix conflicts in your editor',
63
+ 'Stage resolved files: git add <files>',
64
+ 'Commit the merge: git commit',
65
+ ],
66
+ },
67
+ {
68
+ code: GitErrorCode.REBASE_CONFLICT,
69
+ patterns: ['rebase', 'conflict'],
70
+ message: 'Rebase hit conflicts.',
71
+ getSuggestions: () => [
72
+ 'Fix conflicts in your editor',
73
+ 'Stage resolved files: git add <files>',
74
+ 'Continue rebase: git rebase --continue',
75
+ 'Or abort the rebase: git rebase --abort',
76
+ ],
77
+ },
78
+ {
79
+ code: GitErrorCode.NON_FAST_FORWARD,
80
+ patterns: [
81
+ 'non-fast-forward',
82
+ 'fetch first',
83
+ 'behind',
84
+ 'remote contains',
85
+ 'tip of your current branch is behind',
86
+ 'divergent',
87
+ 'diverging',
88
+ 'not possible to fast-forward',
89
+ ],
90
+ message: 'Push was rejected because the remote has new commits.',
91
+ getSuggestions: () => [
92
+ 'Pull the latest changes: git pull --rebase',
93
+ 'Or force push if intentional: git push --force',
94
+ ],
95
+ },
96
+ {
97
+ code: GitErrorCode.NOTHING_TO_COMMIT,
98
+ patterns: ['nothing to commit', 'working tree clean'],
99
+ message: 'Nothing to commit',
100
+ getSuggestions: () => ['All changes are already committed'],
101
+ },
102
+ {
103
+ code: GitErrorCode.NO_STAGED_CHANGES,
104
+ patterns: ['no changes added to commit', 'nothing added to commit'],
105
+ message: 'No files staged for commit',
106
+ getSuggestions: () => [
107
+ 'Stage specific files: git add <file>',
108
+ 'Stage all changes: git add .',
109
+ 'Use --all flag: neo git commit --all',
110
+ ],
111
+ },
112
+ {
113
+ code: GitErrorCode.REMOTE_BRANCH_DELETED,
114
+ patterns: ['no such ref was fetched', 'but no such ref was fetched'],
115
+ message: 'Remote branch no longer exists!',
116
+ getSuggestions: (ctx) => [
117
+ `Your local branch "${ctx.branchName}" is tracking a remote branch that has been deleted`,
118
+ 'Switch to main: git checkout main',
119
+ `Or set a new upstream: git branch --set-upstream-to=origin/${ctx.branchName} ${ctx.branchName}`,
120
+ ],
121
+ },
122
+ ];
123
+ function extractErrorMessage(error) {
124
+ if (error instanceof Error) {
125
+ const stderr = error.stderr ?? '';
126
+ const shortMessage = error.shortMessage ?? '';
127
+ return `${error.message} ${stderr} ${shortMessage}`.toLowerCase();
128
+ }
129
+ return String(error).toLowerCase();
130
+ }
131
+ export function detectGitError(error, context) {
132
+ const errorMessage = extractErrorMessage(error);
133
+ for (const pattern of GIT_ERROR_PATTERNS) {
134
+ const matches = pattern.patterns.some((p) => errorMessage.includes(p.toLowerCase()));
135
+ if (matches) {
136
+ const options = {
137
+ suggestions: pattern.getSuggestions(context),
138
+ context: { error: error instanceof Error ? error.message : String(error) },
139
+ };
140
+ if (error instanceof Error) {
141
+ options.originalError = error;
142
+ }
143
+ return new GitError(pattern.message, pattern.code, context.commandName, options);
144
+ }
145
+ }
146
+ const unknownOptions = {
147
+ context: { error: error instanceof Error ? error.message : String(error) },
148
+ };
149
+ if (error instanceof Error) {
150
+ unknownOptions.originalError = error;
151
+ }
152
+ return new GitError(`Git command failed: ${context.commandName}`, GitErrorCode.UNKNOWN, context.commandName, unknownOptions);
153
+ }
154
+ export function isGitError(error, code) {
155
+ const errorMessage = extractErrorMessage(error);
156
+ const pattern = GIT_ERROR_PATTERNS.find((p) => p.code === code);
157
+ if (!pattern)
158
+ return false;
159
+ return pattern.patterns.some((p) => errorMessage.includes(p.toLowerCase()));
160
+ }
161
+ export function gitFailure(error, context) {
162
+ const gitError = detectGitError(error, context);
163
+ return failure(gitError);
164
+ }
165
+ export function isNotGitRepository(error) {
166
+ return isGitError(error, GitErrorCode.NOT_A_REPOSITORY);
167
+ }
168
+ export function isAuthenticationError(error) {
169
+ return isGitError(error, GitErrorCode.AUTHENTICATION_FAILED);
170
+ }
171
+ export function isNoUpstreamError(error) {
172
+ return isGitError(error, GitErrorCode.NO_UPSTREAM);
173
+ }
174
+ export function isNetworkError(error) {
175
+ return isGitError(error, GitErrorCode.NETWORK_ERROR);
176
+ }
177
+ export function isConflictError(error) {
178
+ return isGitError(error, GitErrorCode.MERGE_CONFLICT) || isGitError(error, GitErrorCode.REBASE_CONFLICT);
179
+ }
180
+ export function isNonFastForwardError(error) {
181
+ return isGitError(error, GitErrorCode.NON_FAST_FORWARD);
182
+ }
183
+ export const GitErrors = {
184
+ notARepository(commandName) {
185
+ return new GitError('Not a git repository!', GitErrorCode.NOT_A_REPOSITORY, commandName, {
186
+ suggestions: ['Make sure you are in a git repository directory'],
187
+ });
188
+ },
189
+ authenticationFailed(commandName) {
190
+ return new GitError('Authentication failed!', GitErrorCode.AUTHENTICATION_FAILED, commandName, {
191
+ suggestions: ['Check your git credentials or SSH keys'],
192
+ });
193
+ },
194
+ noUpstream(commandName, branchName) {
195
+ return new GitError('No upstream branch configured!', GitErrorCode.NO_UPSTREAM, commandName, {
196
+ suggestions: [
197
+ `Set an upstream branch: git branch --set-upstream-to=origin/${branchName || 'your-branch'} ${branchName || 'your-branch'}`,
198
+ `Or push with upstream: git push -u origin ${branchName || 'your-branch'}`,
199
+ ],
200
+ });
201
+ },
202
+ networkError(commandName) {
203
+ return new GitError('Network error!', GitErrorCode.NETWORK_ERROR, commandName, {
204
+ suggestions: ['Check your internet connection'],
205
+ });
206
+ },
207
+ mergeConflict(commandName) {
208
+ return new GitError('Merge conflicts detected!', GitErrorCode.MERGE_CONFLICT, commandName, {
209
+ suggestions: [
210
+ 'Fix conflicts in your editor',
211
+ 'Stage resolved files: git add <files>',
212
+ 'Commit the merge: git commit',
213
+ ],
214
+ });
215
+ },
216
+ rebaseConflict(commandName) {
217
+ return new GitError('Rebase hit conflicts.', GitErrorCode.REBASE_CONFLICT, commandName, {
218
+ suggestions: [
219
+ 'Fix conflicts in your editor',
220
+ 'Stage resolved files: git add <files>',
221
+ 'Continue rebase: git rebase --continue',
222
+ 'Or abort the rebase: git rebase --abort',
223
+ ],
224
+ });
225
+ },
226
+ nonFastForward(commandName) {
227
+ return new GitError('Push was rejected because the remote has new commits.', GitErrorCode.NON_FAST_FORWARD, commandName, {
228
+ suggestions: [
229
+ 'Pull the latest changes: git pull --rebase',
230
+ 'Or force push if intentional: git push --force',
231
+ ],
232
+ });
233
+ },
234
+ nothingToCommit(commandName) {
235
+ return new GitError('Nothing to commit', GitErrorCode.NOTHING_TO_COMMIT, commandName, {
236
+ suggestions: ['All changes are already committed'],
237
+ });
238
+ },
239
+ noStagedChanges(commandName) {
240
+ return new GitError('No files staged for commit', GitErrorCode.NO_STAGED_CHANGES, commandName, {
241
+ suggestions: [
242
+ 'Stage specific files: git add <file>',
243
+ 'Stage all changes: git add .',
244
+ 'Use --all flag: neo git commit --all',
245
+ ],
246
+ });
247
+ },
248
+ remoteBranchDeleted(commandName, branchName) {
249
+ return new GitError('Remote branch no longer exists!', GitErrorCode.REMOTE_BRANCH_DELETED, commandName, {
250
+ suggestions: [
251
+ `Your local branch "${branchName}" is tracking a remote branch that has been deleted`,
252
+ 'Switch to main: git checkout main',
253
+ `Or set a new upstream: git branch --set-upstream-to=origin/${branchName} ${branchName}`,
254
+ ],
255
+ });
256
+ },
257
+ unknown(commandName, error) {
258
+ const options = {};
259
+ if (error) {
260
+ options.context = { error: error instanceof Error ? error.message : String(error) };
261
+ }
262
+ if (error instanceof Error) {
263
+ options.originalError = error;
264
+ }
265
+ return new GitError(`Git command failed: ${commandName}`, GitErrorCode.UNKNOWN, commandName, options);
266
+ },
267
+ };
268
+ //# sourceMappingURL=git-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-errors.js","sourceRoot":"","sources":["../../src/utils/git-errors.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EACR,aAAa,EACb,aAAa,EAEb,OAAO,GACR,MAAM,wBAAwB,CAAC;AAKhC,MAAM,CAAN,IAAY,YAYX;AAZD,WAAY,YAAY;IACtB,yDAAyC,CAAA;IACzC,+CAA+B,CAAA;IAC/B,mEAAmD,CAAA;IACnD,mDAAmC,CAAA;IACnC,qDAAqC,CAAA;IACrC,uDAAuC,CAAA;IACvC,yDAAyC,CAAA;IACzC,2DAA2C,CAAA;IAC3C,2DAA2C,CAAA;IAC3C,mEAAmD,CAAA;IACnD,6CAA6B,CAAA;AAC/B,CAAC,EAZW,YAAY,KAAZ,YAAY,QAYvB;AAKD,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAOlB;IACA;IAPT,IAAI,CAAS;IACb,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;IAChC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;IAE1C,YACE,OAAe,EACC,YAA0B,EAC1B,WAAmB,EACnC,OAIC;QAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QARR,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAAQ;QAQnC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAwBD,MAAM,kBAAkB,GAAsB;IAC5C;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;QACjE,OAAO,EAAE,uBAAuB;QAChC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,iDAAiD,CAAC;KAC1E;IACD;QACE,IAAI,EAAE,YAAY,CAAC,qBAAqB;QACxC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,4BAA4B,CAAC;QAC/E,OAAO,EAAE,wBAAwB;QACjC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,wCAAwC,CAAC;KACjE;IACD;QACE,IAAI,EAAE,YAAY,CAAC,WAAW;QAC9B,QAAQ,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;QACtF,OAAO,EAAE,gCAAgC;QACzC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;YACvB,+DAA+D,GAAG,CAAC,UAAU,IAAI,aAAa,IAAI,GAAG,CAAC,UAAU,IAAI,aAAa,EAAE;YACnI,6CAA6C,GAAG,CAAC,UAAU,IAAI,aAAa,EAAE;SAC/E;KACF;IACD;QACE,IAAI,EAAE,YAAY,CAAC,aAAa;QAChC,QAAQ,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,oBAAoB,CAAC;QACpF,OAAO,EAAE,gBAAgB;QACzB,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,gCAAgC,CAAC;KACzD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,cAAc;QACjC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,eAAe,CAAC;QACvE,OAAO,EAAE,2BAA2B;QACpC,cAAc,EAAE,GAAG,EAAE,CAAC;YACpB,8BAA8B;YAC9B,uCAAuC;YACvC,8BAA8B;SAC/B;KACF;IACD;QACE,IAAI,EAAE,YAAY,CAAC,eAAe;QAClC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAChC,OAAO,EAAE,uBAAuB;QAChC,cAAc,EAAE,GAAG,EAAE,CAAC;YACpB,8BAA8B;YAC9B,uCAAuC;YACvC,wCAAwC;YACxC,yCAAyC;SAC1C;KACF;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,QAAQ,EAAE;YACR,kBAAkB;YAClB,aAAa;YACb,QAAQ;YACR,iBAAiB;YACjB,sCAAsC;YACtC,WAAW;YACX,WAAW;YACX,8BAA8B;SAC/B;QACD,OAAO,EAAE,uDAAuD;QAChE,cAAc,EAAE,GAAG,EAAE,CAAC;YACpB,4CAA4C;YAC5C,gDAAgD;SACjD;KACF;IACD;QACE,IAAI,EAAE,YAAY,CAAC,iBAAiB;QACpC,QAAQ,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;QACrD,OAAO,EAAE,mBAAmB;QAC5B,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,mCAAmC,CAAC;KAC5D;IACD;QACE,IAAI,EAAE,YAAY,CAAC,iBAAiB;QACpC,QAAQ,EAAE,CAAC,4BAA4B,EAAE,yBAAyB,CAAC;QACnE,OAAO,EAAE,4BAA4B;QACrC,cAAc,EAAE,GAAG,EAAE,CAAC;YACpB,sCAAsC;YACtC,8BAA8B;YAC9B,sCAAsC;SACvC;KACF;IACD;QACE,IAAI,EAAE,YAAY,CAAC,qBAAqB;QACxC,QAAQ,EAAE,CAAC,yBAAyB,EAAE,6BAA6B,CAAC;QACpE,OAAO,EAAE,iCAAiC;QAC1C,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;YACvB,sBAAsB,GAAG,CAAC,UAAU,qDAAqD;YACzF,mCAAmC;YACnC,8DAA8D,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE;SACjG;KACF;CACF,CAAC;AAKF,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAI,KAA6B,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAI,KAAmC,CAAC,YAAY,IAAI,EAAE,CAAC;QAC7E,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,IAAI,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACrC,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,OAAwB;IACrE,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAIT;gBACF,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC3E,CAAC;YACF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;YAChC,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAGD,MAAM,cAAc,GAGhB;QACF,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;KAC3E,CAAC;IACF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,cAAc,CAAC,aAAa,GAAG,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,QAAQ,CACjB,uBAAuB,OAAO,CAAC,WAAW,EAAE,EAC5C,YAAY,CAAC,OAAO,EACpB,OAAO,CAAC,WAAW,EACnB,cAAc,CACf,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,IAAkB;IAC3D,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC;AAKD,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,OAAwB;IACjE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC1D,CAAC;AAKD,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAC/D,CAAC;AAKD,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACrD,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;AACvD,CAAC;AAKD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;AAC3G,CAAC;AAKD,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC1D,CAAC;AAKD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,cAAc,CAAC,WAAmB;QAChC,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,YAAY,CAAC,gBAAgB,EAAE,WAAW,EAAE;YACvF,WAAW,EAAE,CAAC,iDAAiD,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,WAAmB;QACtC,OAAO,IAAI,QAAQ,CAAC,wBAAwB,EAAE,YAAY,CAAC,qBAAqB,EAAE,WAAW,EAAE;YAC7F,WAAW,EAAE,CAAC,wCAAwC,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,WAAmB,EAAE,UAAmB;QACjD,OAAO,IAAI,QAAQ,CAAC,gCAAgC,EAAE,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE;YAC3F,WAAW,EAAE;gBACX,+DAA+D,UAAU,IAAI,aAAa,IAAI,UAAU,IAAI,aAAa,EAAE;gBAC3H,6CAA6C,UAAU,IAAI,aAAa,EAAE;aAC3E;SACF,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,WAAmB;QAC9B,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC,aAAa,EAAE,WAAW,EAAE;YAC7E,WAAW,EAAE,CAAC,gCAAgC,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,OAAO,IAAI,QAAQ,CAAC,2BAA2B,EAAE,YAAY,CAAC,cAAc,EAAE,WAAW,EAAE;YACzF,WAAW,EAAE;gBACX,8BAA8B;gBAC9B,uCAAuC;gBACvC,8BAA8B;aAC/B;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,YAAY,CAAC,eAAe,EAAE,WAAW,EAAE;YACtF,WAAW,EAAE;gBACX,8BAA8B;gBAC9B,uCAAuC;gBACvC,wCAAwC;gBACxC,yCAAyC;aAC1C;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,IAAI,QAAQ,CACjB,uDAAuD,EACvD,YAAY,CAAC,gBAAgB,EAC7B,WAAW,EACX;YACE,WAAW,EAAE;gBACX,4CAA4C;gBAC5C,gDAAgD;aACjD;SACF,CACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC,iBAAiB,EAAE,WAAW,EAAE;YACpF,WAAW,EAAE,CAAC,mCAAmC,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,OAAO,IAAI,QAAQ,CAAC,4BAA4B,EAAE,YAAY,CAAC,iBAAiB,EAAE,WAAW,EAAE;YAC7F,WAAW,EAAE;gBACX,sCAAsC;gBACtC,8BAA8B;gBAC9B,sCAAsC;aACvC;SACF,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,WAAmB,EAAE,UAAkB;QACzD,OAAO,IAAI,QAAQ,CAAC,iCAAiC,EAAE,YAAY,CAAC,qBAAqB,EAAE,WAAW,EAAE;YACtG,WAAW,EAAE;gBACX,sBAAsB,UAAU,qDAAqD;gBACrF,mCAAmC;gBACnC,8DAA8D,UAAU,IAAI,UAAU,EAAE;aACzF;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,KAAe;QAC1C,MAAM,OAAO,GAGT,EAAE,CAAC;QACP,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,uBAAuB,WAAW,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACxG,CAAC;CACF,CAAC"}
@@ -1,12 +1,16 @@
1
- declare class Logger {
2
- private verbose;
1
+ import { type ILogger, LogLevel } from '../core/interfaces/index.js';
2
+ declare class Logger implements ILogger {
3
+ private level;
4
+ setLevel(level: LogLevel): void;
5
+ getLevel(): LogLevel;
3
6
  setVerbose(verbose: boolean): void;
4
- info(message: string): void;
5
- success(message: string): void;
6
- warn(message: string): void;
7
- error(message: string): void;
8
- debug(message: string): void;
7
+ info(message: string, context?: Record<string, unknown>): void;
8
+ success(message: string, context?: Record<string, unknown>): void;
9
+ warn(message: string, context?: Record<string, unknown>): void;
10
+ error(message: string, context?: Record<string, unknown>): void;
11
+ debug(message: string, context?: Record<string, unknown>): void;
9
12
  log(message: string): void;
13
+ private formatMessage;
10
14
  }
11
15
  export declare const logger: Logger;
12
16
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAkB;IAEjC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG3B;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEpE,cAAM,MAAO,YAAW,OAAO;IAC7B,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,QAAQ,IAAI,QAAQ;IAOpB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMjE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM/D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,OAAO,CAAC,aAAa;CAMtB;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -1,30 +1,51 @@
1
1
  import chalk from 'chalk';
2
2
  import { Colors } from './ui-types.js';
3
+ import { LogLevel } from '../core/interfaces/index.js';
3
4
  class Logger {
4
- verbose = false;
5
+ level = LogLevel.INFO;
6
+ setLevel(level) {
7
+ this.level = level;
8
+ }
9
+ getLevel() {
10
+ return this.level;
11
+ }
5
12
  setVerbose(verbose) {
6
- this.verbose = verbose;
13
+ this.level = verbose ? LogLevel.DEBUG : LogLevel.INFO;
7
14
  }
8
- info(message) {
9
- console.log(chalk.hex(Colors.muted)('ℹ'), message);
15
+ info(message, context) {
16
+ if (this.level <= LogLevel.INFO) {
17
+ console.log(chalk.hex(Colors.muted)('ℹ'), this.formatMessage(message, context));
18
+ }
10
19
  }
11
- success(message) {
12
- console.log(chalk.hex(Colors.success)('✓'), message);
20
+ success(message, context) {
21
+ if (this.level <= LogLevel.INFO) {
22
+ console.log(chalk.hex(Colors.success)('✓'), this.formatMessage(message, context));
23
+ }
13
24
  }
14
- warn(message) {
15
- console.log(chalk.hex(Colors.error)('⚠'), message);
25
+ warn(message, context) {
26
+ if (this.level <= LogLevel.WARN) {
27
+ console.log(chalk.hex(Colors.error)('⚠'), this.formatMessage(message, context));
28
+ }
16
29
  }
17
- error(message) {
18
- console.error(chalk.hex(Colors.error)('✖'), message);
30
+ error(message, context) {
31
+ if (this.level <= LogLevel.ERROR) {
32
+ console.error(chalk.hex(Colors.error)('✖'), this.formatMessage(message, context));
33
+ }
19
34
  }
20
- debug(message) {
21
- if (this.verbose) {
22
- console.log(chalk.hex(Colors.muted)('[DEBUG]'), message);
35
+ debug(message, context) {
36
+ if (this.level <= LogLevel.DEBUG) {
37
+ console.log(chalk.hex(Colors.muted)('[DEBUG]'), this.formatMessage(message, context));
23
38
  }
24
39
  }
25
40
  log(message) {
26
41
  console.log(message);
27
42
  }
43
+ formatMessage(message, context) {
44
+ if (!context || Object.keys(context).length === 0) {
45
+ return message;
46
+ }
47
+ return `${message} ${chalk.hex(Colors.muted)(JSON.stringify(context))}`;
48
+ }
28
49
  }
29
50
  export const logger = new Logger();
30
51
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,MAAM,MAAM;IACF,OAAO,GAAY,KAAK,CAAC;IAEjC,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radkode/neo",
3
- "version": "0.11.6",
3
+ "version": "0.12.0",
4
4
  "description": "Modern CLI toolkit with intelligent git workflows and configuration management",
5
5
  "author": "Jacek Radko",
6
6
  "license": "MIT",