@mono-labs/tracker 0.1.269
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 +1196 -0
- package/bin/tracker.js +2 -0
- package/dist/dashboard/cli.d.ts +2 -0
- package/dist/dashboard/cli.d.ts.map +1 -0
- package/dist/dashboard/cli.js +38 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +5 -0
- package/dist/dashboard/server.d.ts +3 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +130 -0
- package/dist/dashboard/types.d.ts +13 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +2 -0
- package/dist/dashboard/watcher.d.ts +7 -0
- package/dist/dashboard/watcher.d.ts.map +1 -0
- package/dist/dashboard/watcher.js +44 -0
- package/dist/executor/action-executor.d.ts +10 -0
- package/dist/executor/action-executor.d.ts.map +1 -0
- package/dist/executor/action-executor.js +19 -0
- package/dist/executor/actions/index.d.ts +4 -0
- package/dist/executor/actions/index.d.ts.map +1 -0
- package/dist/executor/actions/index.js +9 -0
- package/dist/executor/actions/remove-action.d.ts +4 -0
- package/dist/executor/actions/remove-action.d.ts.map +1 -0
- package/dist/executor/actions/remove-action.js +10 -0
- package/dist/executor/actions/rename-action.d.ts +4 -0
- package/dist/executor/actions/rename-action.d.ts.map +1 -0
- package/dist/executor/actions/rename-action.js +10 -0
- package/dist/executor/actions/replace-action.d.ts +4 -0
- package/dist/executor/actions/replace-action.d.ts.map +1 -0
- package/dist/executor/actions/replace-action.js +10 -0
- package/dist/executor/index.d.ts +4 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +10 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/manager/index.d.ts +7 -0
- package/dist/manager/index.d.ts.map +1 -0
- package/dist/manager/index.js +19 -0
- package/dist/manager/notation-manager.d.ts +18 -0
- package/dist/manager/notation-manager.d.ts.map +1 -0
- package/dist/manager/notation-manager.js +137 -0
- package/dist/manager/notation-manager.test.d.ts +2 -0
- package/dist/manager/notation-manager.test.d.ts.map +1 -0
- package/dist/manager/notation-manager.test.js +211 -0
- package/dist/manager/notation-updater.d.ts +6 -0
- package/dist/manager/notation-updater.d.ts.map +1 -0
- package/dist/manager/notation-updater.js +20 -0
- package/dist/manager/relationship-manager.d.ts +5 -0
- package/dist/manager/relationship-manager.d.ts.map +1 -0
- package/dist/manager/relationship-manager.js +46 -0
- package/dist/manager/stats.d.ts +3 -0
- package/dist/manager/stats.d.ts.map +1 -0
- package/dist/manager/stats.js +41 -0
- package/dist/manager/validator.d.ts +9 -0
- package/dist/manager/validator.d.ts.map +1 -0
- package/dist/manager/validator.js +62 -0
- package/dist/scanner/action-parser.d.ts +3 -0
- package/dist/scanner/action-parser.d.ts.map +1 -0
- package/dist/scanner/action-parser.js +97 -0
- package/dist/scanner/action-parser.test.d.ts +2 -0
- package/dist/scanner/action-parser.test.d.ts.map +1 -0
- package/dist/scanner/action-parser.test.js +94 -0
- package/dist/scanner/attribute-parser.d.ts +15 -0
- package/dist/scanner/attribute-parser.d.ts.map +1 -0
- package/dist/scanner/attribute-parser.js +183 -0
- package/dist/scanner/attribute-parser.test.d.ts +2 -0
- package/dist/scanner/attribute-parser.test.d.ts.map +1 -0
- package/dist/scanner/attribute-parser.test.js +93 -0
- package/dist/scanner/file-scanner.d.ts +3 -0
- package/dist/scanner/file-scanner.d.ts.map +1 -0
- package/dist/scanner/file-scanner.js +58 -0
- package/dist/scanner/index.d.ts +6 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +11 -0
- package/dist/scanner/notation-parser.d.ts +3 -0
- package/dist/scanner/notation-parser.d.ts.map +1 -0
- package/dist/scanner/notation-parser.js +88 -0
- package/dist/scanner/notation-parser.test.d.ts +2 -0
- package/dist/scanner/notation-parser.test.d.ts.map +1 -0
- package/dist/scanner/notation-parser.test.js +153 -0
- package/dist/storage/config-loader.d.ts +3 -0
- package/dist/storage/config-loader.d.ts.map +1 -0
- package/dist/storage/config-loader.js +55 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/jsonl-storage.d.ts +11 -0
- package/dist/storage/jsonl-storage.d.ts.map +1 -0
- package/dist/storage/jsonl-storage.js +88 -0
- package/dist/storage/jsonl-storage.test.d.ts +2 -0
- package/dist/storage/jsonl-storage.test.d.ts.map +1 -0
- package/dist/storage/jsonl-storage.test.js +126 -0
- package/dist/types/action.d.ts +57 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +13 -0
- package/dist/types/config.d.ts +11 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +11 -0
- package/dist/types/enums.d.ts +40 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +37 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/notation.d.ts +64 -0
- package/dist/types/notation.d.ts.map +1 -0
- package/dist/types/notation.js +2 -0
- package/dist/utils/date-parser.d.ts +3 -0
- package/dist/utils/date-parser.d.ts.map +1 -0
- package/dist/utils/date-parser.js +51 -0
- package/dist/utils/date-parser.test.d.ts +2 -0
- package/dist/utils/date-parser.test.d.ts.map +1 -0
- package/dist/utils/date-parser.test.js +34 -0
- package/dist/utils/id-generator.d.ts +3 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +12 -0
- package/dist/utils/id-generator.test.d.ts +2 -0
- package/dist/utils/id-generator.test.d.ts.map +1 -0
- package/dist/utils/id-generator.test.js +30 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/package.json +60 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_CONFIG = void 0;
|
|
4
|
+
exports.DEFAULT_CONFIG = {
|
|
5
|
+
rootDir: '.',
|
|
6
|
+
include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
|
|
7
|
+
exclude: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
|
|
8
|
+
markers: ['TODO', 'FIXME', 'BUG', 'HACK', 'NOTE', 'OPTIMIZE', 'SECURITY'],
|
|
9
|
+
storagePath: '.tracker/notations.jsonl',
|
|
10
|
+
idPrefix: 'N',
|
|
11
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const MarkerType: {
|
|
2
|
+
readonly TODO: "TODO";
|
|
3
|
+
readonly FIXME: "FIXME";
|
|
4
|
+
readonly BUG: "BUG";
|
|
5
|
+
readonly HACK: "HACK";
|
|
6
|
+
readonly NOTE: "NOTE";
|
|
7
|
+
readonly OPTIMIZE: "OPTIMIZE";
|
|
8
|
+
readonly SECURITY: "SECURITY";
|
|
9
|
+
};
|
|
10
|
+
export type MarkerType = (typeof MarkerType)[keyof typeof MarkerType];
|
|
11
|
+
export declare const Priority: {
|
|
12
|
+
readonly MINIMAL: "minimal";
|
|
13
|
+
readonly LOW: "low";
|
|
14
|
+
readonly MEDIUM: "medium";
|
|
15
|
+
readonly HIGH: "high";
|
|
16
|
+
readonly CRITICAL: "critical";
|
|
17
|
+
};
|
|
18
|
+
export type Priority = (typeof Priority)[keyof typeof Priority];
|
|
19
|
+
export declare const RiskLevel: {
|
|
20
|
+
readonly MINIMAL: "minimal";
|
|
21
|
+
readonly LOW: "low";
|
|
22
|
+
readonly MODERATE: "moderate";
|
|
23
|
+
readonly SEVERE: "severe";
|
|
24
|
+
readonly CRITICAL: "critical";
|
|
25
|
+
};
|
|
26
|
+
export type RiskLevel = (typeof RiskLevel)[keyof typeof RiskLevel];
|
|
27
|
+
export declare const Status: {
|
|
28
|
+
readonly OPEN: "open";
|
|
29
|
+
readonly IN_PROGRESS: "in_progress";
|
|
30
|
+
readonly BLOCKED: "blocked";
|
|
31
|
+
readonly RESOLVED: "resolved";
|
|
32
|
+
};
|
|
33
|
+
export type Status = (typeof Status)[keyof typeof Status];
|
|
34
|
+
export declare const CompoundingRate: {
|
|
35
|
+
readonly LOW: "low";
|
|
36
|
+
readonly MEDIUM: "medium";
|
|
37
|
+
readonly HIGH: "high";
|
|
38
|
+
};
|
|
39
|
+
export type CompoundingRate = (typeof CompoundingRate)[keyof typeof CompoundingRate];
|
|
40
|
+
//# sourceMappingURL=enums.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/types/enums.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAA;AACV,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAErE,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAA;AACV,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAA;AAE/D,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAA;AACV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAElE,eAAO,MAAM,MAAM;;;;;CAKT,CAAA;AACV,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAA;AAEzD,eAAO,MAAM,eAAe;;;;CAIlB,CAAA;AACV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompoundingRate = exports.Status = exports.RiskLevel = exports.Priority = exports.MarkerType = void 0;
|
|
4
|
+
exports.MarkerType = {
|
|
5
|
+
TODO: 'TODO',
|
|
6
|
+
FIXME: 'FIXME',
|
|
7
|
+
BUG: 'BUG',
|
|
8
|
+
HACK: 'HACK',
|
|
9
|
+
NOTE: 'NOTE',
|
|
10
|
+
OPTIMIZE: 'OPTIMIZE',
|
|
11
|
+
SECURITY: 'SECURITY',
|
|
12
|
+
};
|
|
13
|
+
exports.Priority = {
|
|
14
|
+
MINIMAL: 'minimal',
|
|
15
|
+
LOW: 'low',
|
|
16
|
+
MEDIUM: 'medium',
|
|
17
|
+
HIGH: 'high',
|
|
18
|
+
CRITICAL: 'critical',
|
|
19
|
+
};
|
|
20
|
+
exports.RiskLevel = {
|
|
21
|
+
MINIMAL: 'minimal',
|
|
22
|
+
LOW: 'low',
|
|
23
|
+
MODERATE: 'moderate',
|
|
24
|
+
SEVERE: 'severe',
|
|
25
|
+
CRITICAL: 'critical',
|
|
26
|
+
};
|
|
27
|
+
exports.Status = {
|
|
28
|
+
OPEN: 'open',
|
|
29
|
+
IN_PROGRESS: 'in_progress',
|
|
30
|
+
BLOCKED: 'blocked',
|
|
31
|
+
RESOLVED: 'resolved',
|
|
32
|
+
};
|
|
33
|
+
exports.CompoundingRate = {
|
|
34
|
+
LOW: 'low',
|
|
35
|
+
MEDIUM: 'medium',
|
|
36
|
+
HIGH: 'high',
|
|
37
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { MarkerType, Priority, RiskLevel, Status, CompoundingRate } from './enums';
|
|
2
|
+
export type { ActionVerb, NotationAction, ActionArgs, ReplaceArgs, RemoveArgs, RenameArgs, InsertArgs, ExtractArgs, MoveArgs, WrapInArgs, GenericArgs, } from './action';
|
|
3
|
+
export { ActionVerb as ActionVerbEnum } from './action';
|
|
4
|
+
export type { Notation, SourceLocation, PerformanceImpact, TechnicalDebt, NotationQuery, NotationStats, } from './notation';
|
|
5
|
+
export type { TrackerConfig } from './config';
|
|
6
|
+
export { DEFAULT_CONFIG } from './config';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAClF,YAAY,EACX,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,GACX,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,UAAU,CAAA;AACvD,YAAY,EACX,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_CONFIG = exports.ActionVerbEnum = exports.CompoundingRate = exports.Status = exports.RiskLevel = exports.Priority = exports.MarkerType = void 0;
|
|
4
|
+
var enums_1 = require("./enums");
|
|
5
|
+
Object.defineProperty(exports, "MarkerType", { enumerable: true, get: function () { return enums_1.MarkerType; } });
|
|
6
|
+
Object.defineProperty(exports, "Priority", { enumerable: true, get: function () { return enums_1.Priority; } });
|
|
7
|
+
Object.defineProperty(exports, "RiskLevel", { enumerable: true, get: function () { return enums_1.RiskLevel; } });
|
|
8
|
+
Object.defineProperty(exports, "Status", { enumerable: true, get: function () { return enums_1.Status; } });
|
|
9
|
+
Object.defineProperty(exports, "CompoundingRate", { enumerable: true, get: function () { return enums_1.CompoundingRate; } });
|
|
10
|
+
var action_1 = require("./action");
|
|
11
|
+
Object.defineProperty(exports, "ActionVerbEnum", { enumerable: true, get: function () { return action_1.ActionVerb; } });
|
|
12
|
+
var config_1 = require("./config");
|
|
13
|
+
Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return config_1.DEFAULT_CONFIG; } });
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { MarkerType, Priority, RiskLevel, Status, CompoundingRate } from './enums';
|
|
2
|
+
import type { NotationAction } from './action';
|
|
3
|
+
export interface SourceLocation {
|
|
4
|
+
file: string;
|
|
5
|
+
line: number;
|
|
6
|
+
column: number;
|
|
7
|
+
endLine?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface PerformanceImpact {
|
|
10
|
+
before: string;
|
|
11
|
+
after: string;
|
|
12
|
+
unit: string;
|
|
13
|
+
}
|
|
14
|
+
export interface TechnicalDebt {
|
|
15
|
+
hours: number;
|
|
16
|
+
compounding: CompoundingRate;
|
|
17
|
+
}
|
|
18
|
+
export interface Notation {
|
|
19
|
+
id: string;
|
|
20
|
+
type: MarkerType;
|
|
21
|
+
description: string;
|
|
22
|
+
body: string[];
|
|
23
|
+
codeContext: string[];
|
|
24
|
+
location: SourceLocation;
|
|
25
|
+
author?: string;
|
|
26
|
+
assignee?: string;
|
|
27
|
+
priority?: Priority;
|
|
28
|
+
risk?: RiskLevel;
|
|
29
|
+
status: Status;
|
|
30
|
+
tags: string[];
|
|
31
|
+
dueDate?: string;
|
|
32
|
+
createdDate?: string;
|
|
33
|
+
performance?: PerformanceImpact;
|
|
34
|
+
debt?: TechnicalDebt;
|
|
35
|
+
actions: NotationAction[];
|
|
36
|
+
relationships: string[];
|
|
37
|
+
rawBlock: string;
|
|
38
|
+
scannedAt: string;
|
|
39
|
+
}
|
|
40
|
+
export interface NotationQuery {
|
|
41
|
+
type?: MarkerType | MarkerType[];
|
|
42
|
+
tags?: string[];
|
|
43
|
+
priority?: Priority | Priority[];
|
|
44
|
+
status?: Status | Status[];
|
|
45
|
+
file?: string;
|
|
46
|
+
assignee?: string;
|
|
47
|
+
overdue?: boolean;
|
|
48
|
+
blocked?: boolean;
|
|
49
|
+
search?: string;
|
|
50
|
+
dueBefore?: string;
|
|
51
|
+
dueAfter?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface NotationStats {
|
|
54
|
+
total: number;
|
|
55
|
+
byType: Record<string, number>;
|
|
56
|
+
byPriority: Record<string, number>;
|
|
57
|
+
byStatus: Record<string, number>;
|
|
58
|
+
byTag: Record<string, number>;
|
|
59
|
+
byAssignee: Record<string, number>;
|
|
60
|
+
overdue: number;
|
|
61
|
+
blocked: number;
|
|
62
|
+
totalDebtHours: number;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=notation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../../src/types/notation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-parser.d.ts","sourceRoot":"","sources":["../../src/utils/date-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4CtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDate = parseDate;
|
|
4
|
+
exports.isOverdue = isOverdue;
|
|
5
|
+
function parseDate(input) {
|
|
6
|
+
const trimmed = input.trim();
|
|
7
|
+
// Relative date: +2w, +3d, +1m
|
|
8
|
+
const relativeMatch = trimmed.match(/^\+(\d+)([dwmy])$/);
|
|
9
|
+
if (relativeMatch) {
|
|
10
|
+
const amount = parseInt(relativeMatch[1], 10);
|
|
11
|
+
const unit = relativeMatch[2];
|
|
12
|
+
const date = new Date();
|
|
13
|
+
switch (unit) {
|
|
14
|
+
case 'd':
|
|
15
|
+
date.setDate(date.getDate() + amount);
|
|
16
|
+
break;
|
|
17
|
+
case 'w':
|
|
18
|
+
date.setDate(date.getDate() + amount * 7);
|
|
19
|
+
break;
|
|
20
|
+
case 'm':
|
|
21
|
+
date.setMonth(date.getMonth() + amount);
|
|
22
|
+
break;
|
|
23
|
+
case 'y':
|
|
24
|
+
date.setFullYear(date.getFullYear() + amount);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
return date.toISOString().split('T')[0];
|
|
28
|
+
}
|
|
29
|
+
// ISO format: 2026-02-24
|
|
30
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(trimmed)) {
|
|
31
|
+
const parsed = new Date(trimmed + 'T00:00:00');
|
|
32
|
+
if (!isNaN(parsed.getTime()))
|
|
33
|
+
return trimmed;
|
|
34
|
+
}
|
|
35
|
+
// US format: 2/24/2026 or 02/24/2026
|
|
36
|
+
const usMatch = trimmed.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
|
|
37
|
+
if (usMatch) {
|
|
38
|
+
const month = usMatch[1].padStart(2, '0');
|
|
39
|
+
const day = usMatch[2].padStart(2, '0');
|
|
40
|
+
const year = usMatch[3];
|
|
41
|
+
const iso = `${year}-${month}-${day}`;
|
|
42
|
+
const parsed = new Date(iso + 'T00:00:00');
|
|
43
|
+
if (!isNaN(parsed.getTime()))
|
|
44
|
+
return iso;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
function isOverdue(dateStr) {
|
|
49
|
+
const due = new Date(dateStr + 'T23:59:59');
|
|
50
|
+
return due.getTime() < Date.now();
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-parser.test.d.ts","sourceRoot":"","sources":["../../src/utils/date-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const date_parser_1 = require("./date-parser");
|
|
5
|
+
(0, vitest_1.describe)('parseDate', () => {
|
|
6
|
+
(0, vitest_1.it)('parses ISO format', () => {
|
|
7
|
+
(0, vitest_1.expect)((0, date_parser_1.parseDate)('2026-02-24')).toBe('2026-02-24');
|
|
8
|
+
});
|
|
9
|
+
(0, vitest_1.it)('parses US format', () => {
|
|
10
|
+
(0, vitest_1.expect)((0, date_parser_1.parseDate)('2/24/2026')).toBe('2026-02-24');
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.it)('parses US format with leading zeros', () => {
|
|
13
|
+
(0, vitest_1.expect)((0, date_parser_1.parseDate)('02/24/2026')).toBe('2026-02-24');
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('parses relative days', () => {
|
|
16
|
+
const result = (0, date_parser_1.parseDate)('+3d');
|
|
17
|
+
(0, vitest_1.expect)(result).toMatch(/^\d{4}-\d{2}-\d{2}$/);
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('parses relative weeks', () => {
|
|
20
|
+
const result = (0, date_parser_1.parseDate)('+2w');
|
|
21
|
+
(0, vitest_1.expect)(result).toMatch(/^\d{4}-\d{2}-\d{2}$/);
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.it)('returns null for invalid input', () => {
|
|
24
|
+
(0, vitest_1.expect)((0, date_parser_1.parseDate)('not-a-date')).toBeNull();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.describe)('isOverdue', () => {
|
|
28
|
+
(0, vitest_1.it)('returns true for past dates', () => {
|
|
29
|
+
(0, vitest_1.expect)((0, date_parser_1.isOverdue)('2020-01-01')).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('returns false for future dates', () => {
|
|
32
|
+
(0, vitest_1.expect)((0, date_parser_1.isOverdue)('2099-12-31')).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../../src/utils/id-generator.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,GAAE,MAAY,GAAG,MAAM,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateId = generateId;
|
|
4
|
+
exports.generateStableId = generateStableId;
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
function generateId(prefix = 'N') {
|
|
7
|
+
return `${prefix}-${(0, crypto_1.randomUUID)().slice(0, 8)}`;
|
|
8
|
+
}
|
|
9
|
+
function generateStableId(prefix, file, line) {
|
|
10
|
+
const hash = (0, crypto_1.createHash)('sha256').update(`${file}:${line}`).digest('hex').slice(0, 8);
|
|
11
|
+
return `${prefix}-${hash}`;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-generator.test.d.ts","sourceRoot":"","sources":["../../src/utils/id-generator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const id_generator_1 = require("./id-generator");
|
|
5
|
+
(0, vitest_1.describe)('generateId', () => {
|
|
6
|
+
(0, vitest_1.it)('generates an id with default prefix', () => {
|
|
7
|
+
const id = (0, id_generator_1.generateId)();
|
|
8
|
+
(0, vitest_1.expect)(id).toMatch(/^N-[a-f0-9]{8}$/);
|
|
9
|
+
});
|
|
10
|
+
(0, vitest_1.it)('generates an id with custom prefix', () => {
|
|
11
|
+
const id = (0, id_generator_1.generateId)('T');
|
|
12
|
+
(0, vitest_1.expect)(id).toMatch(/^T-[a-f0-9]{8}$/);
|
|
13
|
+
});
|
|
14
|
+
(0, vitest_1.it)('generates unique ids', () => {
|
|
15
|
+
const ids = new Set(Array.from({ length: 100 }, () => (0, id_generator_1.generateId)()));
|
|
16
|
+
(0, vitest_1.expect)(ids.size).toBe(100);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.describe)('generateStableId', () => {
|
|
20
|
+
(0, vitest_1.it)('generates deterministic id for same file and line', () => {
|
|
21
|
+
const id1 = (0, id_generator_1.generateStableId)('N', 'src/foo.ts', 10);
|
|
22
|
+
const id2 = (0, id_generator_1.generateStableId)('N', 'src/foo.ts', 10);
|
|
23
|
+
(0, vitest_1.expect)(id1).toBe(id2);
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('generates different ids for different lines', () => {
|
|
26
|
+
const id1 = (0, id_generator_1.generateStableId)('N', 'src/foo.ts', 10);
|
|
27
|
+
const id2 = (0, id_generator_1.generateStableId)('N', 'src/foo.ts', 20);
|
|
28
|
+
(0, vitest_1.expect)(id1).not.toBe(id2);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isOverdue = exports.parseDate = exports.generateStableId = exports.generateId = void 0;
|
|
4
|
+
var id_generator_1 = require("./id-generator");
|
|
5
|
+
Object.defineProperty(exports, "generateId", { enumerable: true, get: function () { return id_generator_1.generateId; } });
|
|
6
|
+
Object.defineProperty(exports, "generateStableId", { enumerable: true, get: function () { return id_generator_1.generateStableId; } });
|
|
7
|
+
var date_parser_1 = require("./date-parser");
|
|
8
|
+
Object.defineProperty(exports, "parseDate", { enumerable: true, get: function () { return date_parser_1.parseDate; } });
|
|
9
|
+
Object.defineProperty(exports, "isOverdue", { enumerable: true, get: function () { return date_parser_1.isOverdue; } });
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mono-labs/tracker",
|
|
3
|
+
"version": "0.1.269",
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"description": "Code notation tracker for scanning, parsing, and managing structured comment markers",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"tracker": "./bin/tracker.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"require": "./dist/index.js",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./dashboard": {
|
|
18
|
+
"types": "./dist/dashboard/index.d.ts",
|
|
19
|
+
"require": "./dist/dashboard/index.js",
|
|
20
|
+
"default": "./dist/dashboard/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist/",
|
|
25
|
+
"dist-dashboard/",
|
|
26
|
+
"bin/"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"build:dashboard": "cd dashboard-app && npx vite build",
|
|
31
|
+
"build:all": "tsc && cd dashboard-app && npx vite build",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"deploy": "tsc && npm publish --access public --registry https://registry.npmjs.org/",
|
|
34
|
+
"release:patch": "npm version patch -m \"chore: release %s\" && npm publish --access public",
|
|
35
|
+
"release:minor": "npm version minor -m \"chore: release %s\" && npm publish --access public",
|
|
36
|
+
"release:major": "npm version major -m \"chore: release %s\" && npm publish --access public"
|
|
37
|
+
},
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@mono-labs/shared": "0.1.269",
|
|
41
|
+
"chokidar": "^4.0.0",
|
|
42
|
+
"cors": "^2.8.5",
|
|
43
|
+
"express": "^4.21.0",
|
|
44
|
+
"fast-glob": "^3.3.3",
|
|
45
|
+
"ws": "^8.18.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/cors": "^2.8.17",
|
|
49
|
+
"@types/express": "^5.0.0",
|
|
50
|
+
"@types/node": "^25.1.0",
|
|
51
|
+
"@types/ws": "^8.5.13",
|
|
52
|
+
"@vitejs/plugin-react": "^4.3.0",
|
|
53
|
+
"react": "^19.0.0",
|
|
54
|
+
"react-dom": "^19.0.0",
|
|
55
|
+
"react-router-dom": "^7.0.0",
|
|
56
|
+
"typescript": "^5.9.3",
|
|
57
|
+
"vite": "^6.0.0",
|
|
58
|
+
"vitest": "^3.0.0"
|
|
59
|
+
}
|
|
60
|
+
}
|