@vibe-agent-toolkit/resources 0.1.10 → 0.1.12
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/dist/external-link-cache.d.ts +96 -0
- package/dist/external-link-cache.d.ts.map +1 -0
- package/dist/external-link-cache.js +183 -0
- package/dist/external-link-cache.js.map +1 -0
- package/dist/external-link-validator.d.ts +88 -0
- package/dist/external-link-validator.d.ts.map +1 -0
- package/dist/external-link-validator.js +194 -0
- package/dist/external-link-validator.js.map +1 -0
- package/dist/link-parser.js +11 -0
- package/dist/link-parser.js.map +1 -1
- package/dist/resource-registry.d.ts +37 -0
- package/dist/resource-registry.d.ts.map +1 -1
- package/dist/resource-registry.js +107 -1
- package/dist/resource-registry.js.map +1 -1
- package/dist/schemas/project-config.d.ts +210 -0
- package/dist/schemas/project-config.d.ts.map +1 -1
- package/dist/schemas/project-config.js +21 -0
- package/dist/schemas/project-config.js.map +1 -1
- package/dist/schemas/validation-result.d.ts +3 -0
- package/dist/schemas/validation-result.d.ts.map +1 -1
- package/dist/schemas/validation-result.js +3 -0
- package/dist/schemas/validation-result.js.map +1 -1
- package/package.json +3 -2
- package/src/external-link-cache.ts +215 -0
- package/src/external-link-validator.ts +250 -0
- package/src/link-parser.ts +13 -1
- package/src/resource-registry.ts +131 -1
- package/src/schemas/project-config.ts +24 -0
- package/src/schemas/validation-result.ts +3 -0
- package/src/types/markdown-link-check.d.ts +33 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache entry for external link validation results
|
|
3
|
+
*/
|
|
4
|
+
interface CacheEntry {
|
|
5
|
+
statusCode: number;
|
|
6
|
+
statusMessage: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* External link validation cache
|
|
11
|
+
*
|
|
12
|
+
* Stores results of external URL checks to minimize redundant network requests.
|
|
13
|
+
* Uses file-based storage for persistence across runs.
|
|
14
|
+
*
|
|
15
|
+
* Cache keys are SHA-256 hashes of normalized URLs to handle long URLs and
|
|
16
|
+
* special characters safely in filenames.
|
|
17
|
+
*
|
|
18
|
+
* Example:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const cache = new ExternalLinkCache('/tmp/cache', 24);
|
|
21
|
+
*
|
|
22
|
+
* // Store a result
|
|
23
|
+
* await cache.set('https://example.com', 200, 'OK');
|
|
24
|
+
*
|
|
25
|
+
* // Retrieve a result
|
|
26
|
+
* const result = await cache.get('https://example.com');
|
|
27
|
+
* if (result) {
|
|
28
|
+
* console.log(`Status: ${result.statusCode}`);
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class ExternalLinkCache {
|
|
33
|
+
private readonly cacheDir;
|
|
34
|
+
private readonly ttlHours;
|
|
35
|
+
private readonly cacheFile;
|
|
36
|
+
private cache;
|
|
37
|
+
/**
|
|
38
|
+
* Create a new external link cache
|
|
39
|
+
*
|
|
40
|
+
* @param cacheDir - Directory to store cache files
|
|
41
|
+
* @param ttlHours - Time-to-live in hours (default: 24)
|
|
42
|
+
*/
|
|
43
|
+
constructor(cacheDir: string, ttlHours?: number);
|
|
44
|
+
/**
|
|
45
|
+
* Load cache from disk
|
|
46
|
+
*/
|
|
47
|
+
private loadCache;
|
|
48
|
+
/**
|
|
49
|
+
* Save cache to disk
|
|
50
|
+
*/
|
|
51
|
+
private saveCache;
|
|
52
|
+
/**
|
|
53
|
+
* Normalize URL for caching
|
|
54
|
+
*
|
|
55
|
+
* Removes trailing slashes and anchors to treat variations as the same URL.
|
|
56
|
+
*/
|
|
57
|
+
private normalizeUrl;
|
|
58
|
+
/**
|
|
59
|
+
* Generate cache key for URL
|
|
60
|
+
*
|
|
61
|
+
* Uses SHA-256 hash to handle long URLs and special characters.
|
|
62
|
+
*/
|
|
63
|
+
private getCacheKey;
|
|
64
|
+
/**
|
|
65
|
+
* Check if cache entry is expired
|
|
66
|
+
*/
|
|
67
|
+
private isExpired;
|
|
68
|
+
/**
|
|
69
|
+
* Get cached result for URL
|
|
70
|
+
*
|
|
71
|
+
* @param url - URL to look up
|
|
72
|
+
* @returns Cache entry or null if not found/expired
|
|
73
|
+
*/
|
|
74
|
+
get(url: string): Promise<CacheEntry | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Store validation result in cache
|
|
77
|
+
*
|
|
78
|
+
* @param url - URL to cache
|
|
79
|
+
* @param statusCode - HTTP status code
|
|
80
|
+
* @param statusMessage - HTTP status message
|
|
81
|
+
*/
|
|
82
|
+
set(url: string, statusCode: number, statusMessage: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Clear all cache entries
|
|
85
|
+
*/
|
|
86
|
+
clear(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Get cache statistics
|
|
89
|
+
*/
|
|
90
|
+
getStats(): Promise<{
|
|
91
|
+
total: number;
|
|
92
|
+
expired: number;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=external-link-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-link-cache.d.ts","sourceRoot":"","sources":["../src/external-link-cache.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,UAAU,UAAU;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AASD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAA0B;IAEvC;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK;IAM3C;;OAEG;YACW,SAAS;IAsBvB;;OAEG;YACW,SAAS;IAWvB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAiBpB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;OAKG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkBlD;;;;;;OAMG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAiB7D"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { promises as fs } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* External link validation cache
|
|
6
|
+
*
|
|
7
|
+
* Stores results of external URL checks to minimize redundant network requests.
|
|
8
|
+
* Uses file-based storage for persistence across runs.
|
|
9
|
+
*
|
|
10
|
+
* Cache keys are SHA-256 hashes of normalized URLs to handle long URLs and
|
|
11
|
+
* special characters safely in filenames.
|
|
12
|
+
*
|
|
13
|
+
* Example:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const cache = new ExternalLinkCache('/tmp/cache', 24);
|
|
16
|
+
*
|
|
17
|
+
* // Store a result
|
|
18
|
+
* await cache.set('https://example.com', 200, 'OK');
|
|
19
|
+
*
|
|
20
|
+
* // Retrieve a result
|
|
21
|
+
* const result = await cache.get('https://example.com');
|
|
22
|
+
* if (result) {
|
|
23
|
+
* console.log(`Status: ${result.statusCode}`);
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class ExternalLinkCache {
|
|
28
|
+
cacheDir;
|
|
29
|
+
ttlHours;
|
|
30
|
+
cacheFile;
|
|
31
|
+
cache = null;
|
|
32
|
+
/**
|
|
33
|
+
* Create a new external link cache
|
|
34
|
+
*
|
|
35
|
+
* @param cacheDir - Directory to store cache files
|
|
36
|
+
* @param ttlHours - Time-to-live in hours (default: 24)
|
|
37
|
+
*/
|
|
38
|
+
constructor(cacheDir, ttlHours = 24) {
|
|
39
|
+
this.cacheDir = cacheDir;
|
|
40
|
+
this.ttlHours = ttlHours;
|
|
41
|
+
this.cacheFile = path.join(cacheDir, 'external-links.json');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load cache from disk
|
|
45
|
+
*/
|
|
46
|
+
async loadCache() {
|
|
47
|
+
if (this.cache !== null) {
|
|
48
|
+
return this.cache;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheDir is constructor parameter, controlled by caller
|
|
52
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
53
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheFile is derived from cacheDir
|
|
54
|
+
const data = await fs.readFile(this.cacheFile, 'utf-8');
|
|
55
|
+
this.cache = JSON.parse(data);
|
|
56
|
+
return this.cache;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Handle missing file or corrupted JSON - start with empty cache
|
|
60
|
+
if (error.code === 'ENOENT' || error instanceof SyntaxError) {
|
|
61
|
+
this.cache = {};
|
|
62
|
+
return this.cache;
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Save cache to disk
|
|
69
|
+
*/
|
|
70
|
+
async saveCache() {
|
|
71
|
+
if (this.cache === null) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheDir is constructor parameter, controlled by caller
|
|
75
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
76
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheFile is derived from cacheDir
|
|
77
|
+
await fs.writeFile(this.cacheFile, JSON.stringify(this.cache, null, 2), 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Normalize URL for caching
|
|
81
|
+
*
|
|
82
|
+
* Removes trailing slashes and anchors to treat variations as the same URL.
|
|
83
|
+
*/
|
|
84
|
+
normalizeUrl(url) {
|
|
85
|
+
try {
|
|
86
|
+
const parsed = new URL(url);
|
|
87
|
+
// Remove hash/anchor
|
|
88
|
+
parsed.hash = '';
|
|
89
|
+
// Remove trailing slash
|
|
90
|
+
let normalized = parsed.toString();
|
|
91
|
+
if (normalized.endsWith('/')) {
|
|
92
|
+
normalized = normalized.slice(0, -1);
|
|
93
|
+
}
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// If URL parsing fails, use as-is
|
|
98
|
+
return url;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Generate cache key for URL
|
|
103
|
+
*
|
|
104
|
+
* Uses SHA-256 hash to handle long URLs and special characters.
|
|
105
|
+
*/
|
|
106
|
+
getCacheKey(url) {
|
|
107
|
+
const normalized = this.normalizeUrl(url);
|
|
108
|
+
return createHash('sha256').update(normalized).digest('hex');
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if cache entry is expired
|
|
112
|
+
*/
|
|
113
|
+
isExpired(entry) {
|
|
114
|
+
const now = Date.now();
|
|
115
|
+
const age = now - entry.timestamp;
|
|
116
|
+
const ttlMs = this.ttlHours * 60 * 60 * 1000;
|
|
117
|
+
return age > ttlMs;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get cached result for URL
|
|
121
|
+
*
|
|
122
|
+
* @param url - URL to look up
|
|
123
|
+
* @returns Cache entry or null if not found/expired
|
|
124
|
+
*/
|
|
125
|
+
async get(url) {
|
|
126
|
+
const cache = await this.loadCache();
|
|
127
|
+
const key = this.getCacheKey(url);
|
|
128
|
+
const entry = cache[key];
|
|
129
|
+
if (!entry) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
if (this.isExpired(entry)) {
|
|
133
|
+
delete cache[key];
|
|
134
|
+
await this.saveCache();
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return entry;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Store validation result in cache
|
|
141
|
+
*
|
|
142
|
+
* @param url - URL to cache
|
|
143
|
+
* @param statusCode - HTTP status code
|
|
144
|
+
* @param statusMessage - HTTP status message
|
|
145
|
+
*/
|
|
146
|
+
async set(url, statusCode, statusMessage) {
|
|
147
|
+
const cache = await this.loadCache();
|
|
148
|
+
const key = this.getCacheKey(url);
|
|
149
|
+
cache[key] = {
|
|
150
|
+
statusCode,
|
|
151
|
+
statusMessage,
|
|
152
|
+
timestamp: Date.now(),
|
|
153
|
+
};
|
|
154
|
+
await this.saveCache();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clear all cache entries
|
|
158
|
+
*/
|
|
159
|
+
async clear() {
|
|
160
|
+
this.cache = {};
|
|
161
|
+
await this.saveCache();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get cache statistics
|
|
165
|
+
*/
|
|
166
|
+
async getStats() {
|
|
167
|
+
const cache = await this.loadCache();
|
|
168
|
+
const keys = Object.keys(cache);
|
|
169
|
+
const expired = keys.filter((key) => {
|
|
170
|
+
const entry = cache[key];
|
|
171
|
+
// Type guard: ensure entry exists before checking expiration
|
|
172
|
+
if (entry === undefined) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
return this.isExpired(entry);
|
|
176
|
+
}).length;
|
|
177
|
+
return {
|
|
178
|
+
total: keys.length,
|
|
179
|
+
expired,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=external-link-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-link-cache.js","sourceRoot":"","sources":["../src/external-link-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAkB7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,iBAAiB;IACZ,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,SAAS,CAAS;IAC3B,KAAK,GAAqB,IAAI,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,QAAgB,EAAE,QAAQ,GAAG,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QAED,IAAI,CAAC;YACJ,8HAA8H;YAC9H,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,yGAAyG;YACzG,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YAC3C,OAAO,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,iEAAiE;YACjE,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACxF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,KAAK,CAAC;YACnB,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO;QACR,CAAC;QAED,8HAA8H;QAC9H,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,yGAAyG;QACzG,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED;;;;OAIG;IACK,YAAY,CAAC,GAAW;QAC/B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,qBAAqB;YACrB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACjB,wBAAwB;YACxB,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,UAAU,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACR,kCAAkC;YAClC,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,GAAW;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAiB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7C,OAAO,GAAG,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,UAAkB,EAAE,aAAqB;QAC/D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAElC,KAAK,CAAC,GAAG,CAAC,GAAG;YACZ,UAAU;YACV,aAAa;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,6DAA6D;YAC7D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC,MAAM,CAAC;QAEV,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO;SACP,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration options for external link validation
|
|
3
|
+
*/
|
|
4
|
+
export interface ExternalLinkValidatorOptions {
|
|
5
|
+
/** Time-to-live for cache entries in hours (default: 24) */
|
|
6
|
+
cacheTtlHours?: number;
|
|
7
|
+
/** Request timeout in milliseconds (default: 5000) */
|
|
8
|
+
timeout?: number;
|
|
9
|
+
/** Number of retries for failed requests (default: 2) */
|
|
10
|
+
retries?: number;
|
|
11
|
+
/** User agent string for requests (default: generic) */
|
|
12
|
+
userAgent?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result of validating a single external link
|
|
16
|
+
*/
|
|
17
|
+
export interface LinkValidationResult {
|
|
18
|
+
/** The URL that was validated */
|
|
19
|
+
url: string;
|
|
20
|
+
/** Validation status: 'ok' = working, 'error' = broken */
|
|
21
|
+
status: 'ok' | 'error';
|
|
22
|
+
/** HTTP status code (e.g., 200, 404) */
|
|
23
|
+
statusCode: number;
|
|
24
|
+
/** Error message if validation failed */
|
|
25
|
+
error?: string;
|
|
26
|
+
/** Whether result came from cache */
|
|
27
|
+
cached: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validates external URLs in markdown content
|
|
31
|
+
*
|
|
32
|
+
* Uses markdown-link-check library with caching to efficiently validate
|
|
33
|
+
* external links. Respects cache TTL and provides detailed error information.
|
|
34
|
+
*
|
|
35
|
+
* Example:
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const validator = new ExternalLinkValidator('/tmp/cache', {
|
|
38
|
+
* cacheTtlHours: 24,
|
|
39
|
+
* timeout: 5000,
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* const result = await validator.validateLink('https://example.com');
|
|
43
|
+
* if (result.status === 'error') {
|
|
44
|
+
* console.error(`Broken link: ${result.url} - ${result.error}`);
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare class ExternalLinkValidator {
|
|
49
|
+
private readonly cache;
|
|
50
|
+
private readonly options;
|
|
51
|
+
/**
|
|
52
|
+
* Create a new external link validator
|
|
53
|
+
*
|
|
54
|
+
* @param cacheDir - Directory for storing cache
|
|
55
|
+
* @param options - Validation options
|
|
56
|
+
*/
|
|
57
|
+
constructor(cacheDir: string, options?: ExternalLinkValidatorOptions);
|
|
58
|
+
/**
|
|
59
|
+
* Validate a single external link
|
|
60
|
+
*
|
|
61
|
+
* @param url - URL to validate
|
|
62
|
+
* @returns Validation result
|
|
63
|
+
*/
|
|
64
|
+
validateLink(url: string): Promise<LinkValidationResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Validate multiple links
|
|
67
|
+
*
|
|
68
|
+
* @param urls - URLs to validate
|
|
69
|
+
* @returns Array of validation results
|
|
70
|
+
*/
|
|
71
|
+
validateLinks(urls: string[]): Promise<LinkValidationResult[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Check a link using markdown-link-check
|
|
74
|
+
*/
|
|
75
|
+
private checkLink;
|
|
76
|
+
/**
|
|
77
|
+
* Clear the validation cache
|
|
78
|
+
*/
|
|
79
|
+
clearCache(): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Get cache statistics
|
|
82
|
+
*/
|
|
83
|
+
getCacheStats(): Promise<{
|
|
84
|
+
total: number;
|
|
85
|
+
expired: number;
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=external-link-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-link-validator.d.ts","sourceRoot":"","sources":["../src/external-link-validator.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAEjE;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,4BAAiC;IAaxE;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsC9D;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIpE;;OAEG;YACW,SAAS;IAkEvB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGlE"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import markdownLinkCheck from 'markdown-link-check';
|
|
2
|
+
import { ExternalLinkCache } from './external-link-cache.js';
|
|
3
|
+
/**
|
|
4
|
+
* Safely serialize an error to a string, preventing [object Object] issues.
|
|
5
|
+
* Handles Error objects, strings, objects, and edge cases.
|
|
6
|
+
*/
|
|
7
|
+
function safeSerializeError(err) {
|
|
8
|
+
if (!err) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
if (typeof err === 'string') {
|
|
12
|
+
// Return undefined for empty strings so fallback message is used
|
|
13
|
+
return err.trim() || undefined;
|
|
14
|
+
}
|
|
15
|
+
if (err instanceof Error) {
|
|
16
|
+
// Return undefined for empty messages so fallback is used
|
|
17
|
+
return err.message.trim() || undefined;
|
|
18
|
+
}
|
|
19
|
+
// For objects, try JSON.stringify with fallback
|
|
20
|
+
try {
|
|
21
|
+
const serialized = JSON.stringify(err);
|
|
22
|
+
// Avoid returning literal "{}" which isn't helpful
|
|
23
|
+
if (serialized === '{}') {
|
|
24
|
+
// Try to extract something useful from the object
|
|
25
|
+
const msg = err.message;
|
|
26
|
+
return typeof msg === 'string' && msg.trim() ? msg : 'Unknown error';
|
|
27
|
+
}
|
|
28
|
+
return serialized;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// JSON.stringify can fail on circular references
|
|
32
|
+
// Try to extract message property if it exists
|
|
33
|
+
const msg = err.message;
|
|
34
|
+
return typeof msg === 'string' && msg.trim() ? msg : 'Error (unserializable)';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validates external URLs in markdown content
|
|
39
|
+
*
|
|
40
|
+
* Uses markdown-link-check library with caching to efficiently validate
|
|
41
|
+
* external links. Respects cache TTL and provides detailed error information.
|
|
42
|
+
*
|
|
43
|
+
* Example:
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const validator = new ExternalLinkValidator('/tmp/cache', {
|
|
46
|
+
* cacheTtlHours: 24,
|
|
47
|
+
* timeout: 5000,
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* const result = await validator.validateLink('https://example.com');
|
|
51
|
+
* if (result.status === 'error') {
|
|
52
|
+
* console.error(`Broken link: ${result.url} - ${result.error}`);
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export class ExternalLinkValidator {
|
|
57
|
+
cache;
|
|
58
|
+
options;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new external link validator
|
|
61
|
+
*
|
|
62
|
+
* @param cacheDir - Directory for storing cache
|
|
63
|
+
* @param options - Validation options
|
|
64
|
+
*/
|
|
65
|
+
constructor(cacheDir, options = {}) {
|
|
66
|
+
this.options = {
|
|
67
|
+
cacheTtlHours: options.cacheTtlHours ?? 24,
|
|
68
|
+
timeout: options.timeout ?? 5000,
|
|
69
|
+
retries: options.retries ?? 2,
|
|
70
|
+
userAgent: options.userAgent ??
|
|
71
|
+
'Mozilla/5.0 (compatible; VAT-LinkChecker/1.0; +https://github.com/jdutton/vibe-agent-toolkit)',
|
|
72
|
+
};
|
|
73
|
+
this.cache = new ExternalLinkCache(cacheDir, this.options.cacheTtlHours);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate a single external link
|
|
77
|
+
*
|
|
78
|
+
* @param url - URL to validate
|
|
79
|
+
* @returns Validation result
|
|
80
|
+
*/
|
|
81
|
+
async validateLink(url) {
|
|
82
|
+
// Check cache first
|
|
83
|
+
const cached = await this.cache.get(url);
|
|
84
|
+
if (cached) {
|
|
85
|
+
const isOk = cached.statusCode >= 200 && cached.statusCode < 400;
|
|
86
|
+
// Return success result without error property (exactOptionalPropertyTypes)
|
|
87
|
+
if (isOk) {
|
|
88
|
+
return {
|
|
89
|
+
url,
|
|
90
|
+
status: 'ok',
|
|
91
|
+
statusCode: cached.statusCode,
|
|
92
|
+
cached: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Return error result with error property
|
|
96
|
+
return {
|
|
97
|
+
url,
|
|
98
|
+
status: 'error',
|
|
99
|
+
statusCode: cached.statusCode,
|
|
100
|
+
cached: true,
|
|
101
|
+
error: cached.statusMessage,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Validate using markdown-link-check
|
|
105
|
+
const result = await this.checkLink(url);
|
|
106
|
+
// Store in cache
|
|
107
|
+
await this.cache.set(url, result.statusCode, result.error ?? 'OK');
|
|
108
|
+
return {
|
|
109
|
+
...result,
|
|
110
|
+
cached: false,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate multiple links
|
|
115
|
+
*
|
|
116
|
+
* @param urls - URLs to validate
|
|
117
|
+
* @returns Array of validation results
|
|
118
|
+
*/
|
|
119
|
+
async validateLinks(urls) {
|
|
120
|
+
return Promise.all(urls.map((url) => this.validateLink(url)));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check a link using markdown-link-check
|
|
124
|
+
*/
|
|
125
|
+
async checkLink(url) {
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
const markdown = `[link](${url})`;
|
|
128
|
+
markdownLinkCheck(markdown, {
|
|
129
|
+
timeout: `${this.options.timeout}ms`,
|
|
130
|
+
retryOn429: true,
|
|
131
|
+
retryCount: this.options.retries,
|
|
132
|
+
aliveStatusCodes: [200, 206, 301, 302, 307, 308],
|
|
133
|
+
ignorePatterns: [],
|
|
134
|
+
httpHeaders: [
|
|
135
|
+
{
|
|
136
|
+
urls: [url],
|
|
137
|
+
headers: {
|
|
138
|
+
'User-Agent': this.options.userAgent,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
}, (error, results) => {
|
|
143
|
+
if (error) {
|
|
144
|
+
resolve({
|
|
145
|
+
url,
|
|
146
|
+
status: 'error',
|
|
147
|
+
statusCode: 0,
|
|
148
|
+
error: error.message,
|
|
149
|
+
});
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const result = results[0];
|
|
153
|
+
if (!result) {
|
|
154
|
+
resolve({
|
|
155
|
+
url,
|
|
156
|
+
status: 'error',
|
|
157
|
+
statusCode: 0,
|
|
158
|
+
error: 'No result from markdown-link-check',
|
|
159
|
+
});
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (result.status === 'alive') {
|
|
163
|
+
resolve({
|
|
164
|
+
url,
|
|
165
|
+
status: 'ok',
|
|
166
|
+
statusCode: result.statusCode,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
const errorMessage = safeSerializeError(result.err) ?? `Link status: ${result.status}`;
|
|
171
|
+
resolve({
|
|
172
|
+
url,
|
|
173
|
+
status: 'error',
|
|
174
|
+
statusCode: result.statusCode,
|
|
175
|
+
error: errorMessage,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Clear the validation cache
|
|
183
|
+
*/
|
|
184
|
+
async clearCache() {
|
|
185
|
+
await this.cache.clear();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get cache statistics
|
|
189
|
+
*/
|
|
190
|
+
async getCacheStats() {
|
|
191
|
+
return this.cache.getStats();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=external-link-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-link-validator.js","sourceRoot":"","sources":["../src/external-link-validator.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAY;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,iEAAiE;QACjE,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAChC,CAAC;IAED,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACxC,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvC,mDAAmD;QACnD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACzB,kDAAkD;YAClD,MAAM,GAAG,GAAI,GAA6B,CAAC,OAAO,CAAC;YACnD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;QACtE,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,iDAAiD;QACjD,+CAA+C;QAC/C,MAAM,GAAG,GAAI,GAA6B,CAAC,OAAO,CAAC;QACnD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC/E,CAAC;AACF,CAAC;AAgCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,qBAAqB;IAChB,KAAK,CAAoB;IACzB,OAAO,CAAyC;IAEjE;;;;;OAKG;IACH,YAAY,QAAgB,EAAE,UAAwC,EAAE;QACvE,IAAI,CAAC,OAAO,GAAG;YACd,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;YAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;YAC7B,SAAS,EACR,OAAO,CAAC,SAAS;gBACjB,+FAA+F;SAChG,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,GAAW;QAC7B,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;YAEjE,4EAA4E;YAC5E,IAAI,IAAI,EAAE,CAAC;gBACV,OAAO;oBACN,GAAG;oBACH,MAAM,EAAE,IAAa;oBACrB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM,EAAE,IAAI;iBACZ,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,OAAO;gBACN,GAAG;gBACH,MAAM,EAAE,OAAgB;gBACxB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,MAAM,CAAC,aAAa;aAC3B,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEzC,iBAAiB;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAEnE,OAAO;YACN,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;SACb,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,IAAc;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CACtB,GAAW;QAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;YAElC,iBAAiB,CAChB,QAAQ,EACR;gBACC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;gBACpC,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAChC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAChD,cAAc,EAAE,EAAE;gBAClB,WAAW,EAAE;oBACZ;wBACC,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,OAAO,EAAE;4BACR,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;yBACpC;qBACD;iBACD;aACD,EACD,CAAC,KAAmB,EAAE,OAAmG,EAAE,EAAE;gBAC5H,IAAI,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC;wBACP,GAAG;wBACH,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,CAAC;wBACb,KAAK,EAAE,KAAK,CAAC,OAAO;qBACpB,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,CAAC;wBACP,GAAG;wBACH,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,CAAC;wBACb,KAAK,EAAE,oCAAoC;qBAC3C,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC/B,OAAO,CAAC;wBACP,GAAG;wBACH,MAAM,EAAE,IAAI;wBACZ,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC7B,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC;oBAEvF,OAAO,CAAC;wBACP,GAAG;wBACH,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,KAAK,EAAE,YAAY;qBACnB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC,CACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACf,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;CACD"}
|
package/dist/link-parser.js
CHANGED
|
@@ -100,6 +100,17 @@ function extractLinks(tree) {
|
|
|
100
100
|
};
|
|
101
101
|
links.push(link);
|
|
102
102
|
});
|
|
103
|
+
// Visit definition nodes (reference-style link definitions: [ref]: url)
|
|
104
|
+
// These provide the actual URLs for linkReference nodes
|
|
105
|
+
visit(tree, 'definition', (node) => {
|
|
106
|
+
const link = {
|
|
107
|
+
text: node.identifier,
|
|
108
|
+
href: node.url,
|
|
109
|
+
type: classifyLink(node.url),
|
|
110
|
+
line: node.position?.start.line,
|
|
111
|
+
};
|
|
112
|
+
links.push(link);
|
|
113
|
+
});
|
|
103
114
|
return links;
|
|
104
115
|
}
|
|
105
116
|
/**
|
package/dist/link-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-parser.js","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"link-parser.js","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"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"}
|