@vibe-agent-toolkit/resources 0.1.14 → 0.1.15-rc.2

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.
@@ -78,11 +78,13 @@ export interface LinkRewriteRule {
78
78
  * - `link.type` - Link type (local_file, anchor, external, email, unknown)
79
79
  * - `link.resource.id` - Target resource ID (if resolved)
80
80
  * - `link.resource.filePath` - Target resource file path (if resolved)
81
+ * - `link.resource.fileName` - Target resource file name with extension (if resolved)
81
82
  * - `link.resource.extension` - Target resource file extension (if resolved)
82
83
  * - `link.resource.mimeType` - Inferred MIME type (if resolved)
83
84
  * - `link.resource.frontmatter.*` - Target resource frontmatter fields (if resolved)
84
85
  * - `link.resource.sizeBytes` - Target resource size in bytes (if resolved)
85
86
  * - `link.resource.estimatedTokenCount` - Target resource estimated token count (if resolved)
87
+ * - `link.resource.relativePath` - Relative path from sourceFilePath to resource (if both available)
86
88
  * - Plus any variables from `context`
87
89
  */
88
90
  template: string;
@@ -103,6 +105,18 @@ export interface ContentTransformOptions {
103
105
  * These are merged at the top level of the template context.
104
106
  */
105
107
  context?: Record<string, unknown>;
108
+ /**
109
+ * Absolute file path of the source document being transformed.
110
+ * When provided, enables `link.resource.relativePath` computation:
111
+ * `relative(dirname(sourceFilePath), link.resource.filePath)` using forward slashes.
112
+ */
113
+ sourceFilePath?: string;
114
+ /**
115
+ * Fallback template for links that match no rule.
116
+ * Without this option, unmatched links are left untouched (original markdown preserved).
117
+ * With this option, unmatched links are rendered through this template.
118
+ */
119
+ defaultTemplate?: string;
106
120
  }
107
121
  /**
108
122
  * Transform markdown content by rewriting links according to rules.
@@ -110,9 +124,12 @@ export interface ContentTransformOptions {
110
124
  * This is a pure function that takes content, its parsed links, and transform options,
111
125
  * and returns the content with matching links rewritten according to the first matching rule.
112
126
  *
113
- * Links are matched by their original markdown syntax `[text](href)`. For each link found
114
- * in the content, the function checks the provided rules in order. The first matching rule
115
- * determines the replacement. Links matching no rule are left untouched.
127
+ * Two passes are performed:
128
+ * 1. **Inline links** `[text](href)` matched via rules, rendered through templates
129
+ * 2. **Definition lines** `[ref]: url` matched via rules, rewritten in definition format
130
+ * or removed if orphaned (target not in registry)
131
+ *
132
+ * Links matching no rule are left untouched unless a `defaultTemplate` is provided.
116
133
  *
117
134
  * @param content - The markdown content to transform
118
135
  * @param links - Parsed links from the content (from ResourceMetadata.links)
@@ -1 +1 @@
1
- {"version":3,"file":"content-transform.d.ts","sourceRoot":"","sources":["../src/content-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAmC/F;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CAC3D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAE7B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;IAExB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAElC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAyJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAmDR"}
1
+ {"version":3,"file":"content-transform.d.ts","sourceRoot":"","sources":["../src/content-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAmC/F;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CAC3D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAE7B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAElC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA0KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAuHR"}
@@ -20,7 +20,7 @@
20
20
  * ```
21
21
  */
22
22
  import path from 'node:path';
23
- import { renderTemplate } from '@vibe-agent-toolkit/utils';
23
+ import { renderTemplate, toForwardSlash } from '@vibe-agent-toolkit/utils';
24
24
  import { matchesGlobPattern, splitHrefAnchor } from './utils.js';
25
25
  /**
26
26
  * Extension-to-MIME-type mapping for common resource file types.
@@ -59,19 +59,24 @@ function inferMimeType(filePath) {
59
59
  * @param fragment - The fragment string including '#' prefix, or empty string
60
60
  * @param resource - The resolved target resource (if available)
61
61
  * @param extraContext - Additional context variables
62
+ * @param sourceFilePath - Absolute path of the source document (for relativePath computation)
62
63
  * @returns Template context object
63
64
  */
64
- function buildTemplateContext(link, hrefWithoutFragment, fragment, resource, extraContext) {
65
+ function buildTemplateContext(link, hrefWithoutFragment, fragment, resource, extraContext, sourceFilePath) {
65
66
  const resourceContext = resource === undefined
66
67
  ? undefined
67
68
  : {
68
69
  id: resource.id,
69
70
  filePath: resource.filePath,
71
+ fileName: path.basename(resource.filePath),
70
72
  extension: path.extname(resource.filePath),
71
73
  mimeType: inferMimeType(resource.filePath),
72
74
  frontmatter: resource.frontmatter,
73
75
  sizeBytes: resource.sizeBytes,
74
76
  estimatedTokenCount: resource.estimatedTokenCount,
77
+ relativePath: sourceFilePath === undefined
78
+ ? undefined
79
+ : toForwardSlash(path.relative(path.dirname(sourceFilePath), resource.filePath)),
75
80
  };
76
81
  return {
77
82
  ...extraContext,
@@ -159,7 +164,7 @@ function findMatchingRule(link, resource, rules) {
159
164
  return undefined;
160
165
  }
161
166
  /**
162
- * Regex pattern matching markdown links: `[text](href)`
167
+ * Regex pattern matching inline markdown links: `[text](href)`
163
168
  *
164
169
  * Captures:
165
170
  * - Group 0: Full match including brackets and parentheses
@@ -172,15 +177,28 @@ function findMatchingRule(link, resource, rules) {
172
177
  */
173
178
  // eslint-disable-next-line sonarjs/slow-regex -- negated character classes [^\]] and [^)] are inherently non-backtracking
174
179
  const MARKDOWN_LINK_REGEX = /\[([^\]]*)\]\(([^)]*)\)/g;
180
+ /**
181
+ * Regex pattern matching reference-style link definitions: `[ref]: url`
182
+ *
183
+ * Must appear at the start of a line (multiline flag).
184
+ * Captures:
185
+ * - Group 1: Reference identifier
186
+ * - Group 2: URL (may include trailing whitespace)
187
+ */
188
+ // eslint-disable-next-line sonarjs/slow-regex -- Controlled markdown reference link definitions on line boundaries
189
+ const MARKDOWN_DEFINITION_REGEX = /^\[([^\]]*?)\]:\s*(.+)$/gm;
175
190
  /**
176
191
  * Transform markdown content by rewriting links according to rules.
177
192
  *
178
193
  * This is a pure function that takes content, its parsed links, and transform options,
179
194
  * and returns the content with matching links rewritten according to the first matching rule.
180
195
  *
181
- * Links are matched by their original markdown syntax `[text](href)`. For each link found
182
- * in the content, the function checks the provided rules in order. The first matching rule
183
- * determines the replacement. Links matching no rule are left untouched.
196
+ * Two passes are performed:
197
+ * 1. **Inline links** `[text](href)` matched via rules, rendered through templates
198
+ * 2. **Definition lines** `[ref]: url` matched via rules, rewritten in definition format
199
+ * or removed if orphaned (target not in registry)
200
+ *
201
+ * Links matching no rule are left untouched unless a `defaultTemplate` is provided.
184
202
  *
185
203
  * @param content - The markdown content to transform
186
204
  * @param links - Parsed links from the content (from ResourceMetadata.links)
@@ -207,23 +225,27 @@ const MARKDOWN_LINK_REGEX = /\[([^\]]*)\]\(([^)]*)\)/g;
207
225
  * ```
208
226
  */
209
227
  export function transformContent(content, links, options) {
210
- const { linkRewriteRules, resourceRegistry, context } = options;
211
- // If there are no rules or no links, return content unchanged
212
- if (linkRewriteRules.length === 0 || links.length === 0) {
228
+ const { linkRewriteRules, resourceRegistry, context, sourceFilePath, defaultTemplate } = options;
229
+ // If there are no rules, no default template, or no links, return content unchanged
230
+ if ((linkRewriteRules.length === 0 && defaultTemplate === undefined) || links.length === 0) {
213
231
  return content;
214
232
  }
233
+ // === Pass 1: Inline links [text](href) ===
215
234
  // Build a lookup map from "[text](href)" to the corresponding ResourceLink.
216
235
  // Multiple links can share the same text+href combination; we process them all
217
236
  // with the first matching ResourceLink (they are identical in terms of match criteria).
218
237
  const linkBySignature = new Map();
219
238
  for (const link of links) {
239
+ if (link.nodeType === 'definition') {
240
+ continue; // Definitions are handled in pass 2
241
+ }
220
242
  const signature = `[${link.text}](${link.href})`;
221
243
  if (!linkBySignature.has(signature)) {
222
244
  linkBySignature.set(signature, link);
223
245
  }
224
246
  }
225
- // Replace markdown links in content
226
- return content.replaceAll(MARKDOWN_LINK_REGEX, (fullMatch, text, href) => {
247
+ // Replace inline markdown links in content
248
+ let result = content.replaceAll(MARKDOWN_LINK_REGEX, (fullMatch, text, href) => {
227
249
  // Find the corresponding ResourceLink
228
250
  const signature = `[${text}](${href})`;
229
251
  const link = linkBySignature.get(signature);
@@ -237,16 +259,63 @@ export function transformContent(content, links, options) {
237
259
  : resourceRegistry.getResourceById(link.resolvedId);
238
260
  // Find the first matching rule
239
261
  const rule = findMatchingRule(link, resource, linkRewriteRules);
240
- if (!rule) {
241
- // No rule matches - leave untouched
262
+ // Determine which template to use: matched rule, defaultTemplate, or leave untouched
263
+ const template = rule?.template ?? defaultTemplate;
264
+ if (template === undefined) {
265
+ // No rule matches and no default template - leave untouched
242
266
  return fullMatch;
243
267
  }
244
268
  // Parse fragment from href
245
269
  const [hrefWithoutFragment, anchor] = splitHrefAnchor(href);
246
270
  const fragment = anchor === undefined ? '' : `#${anchor}`;
247
271
  // Build template context and render
248
- const templateContext = buildTemplateContext(link, hrefWithoutFragment, fragment, resource, context);
249
- return renderTemplate(rule.template, templateContext);
272
+ const templateContext = buildTemplateContext(link, hrefWithoutFragment, fragment, resource, context, sourceFilePath);
273
+ return renderTemplate(template, templateContext);
250
274
  });
275
+ // === Pass 2: Reference-style definitions [ref]: url ===
276
+ // Build lookup map for definition links (keyed by "identifier\0href")
277
+ const definitionByKey = new Map();
278
+ for (const link of links) {
279
+ if (link.nodeType !== 'definition') {
280
+ continue;
281
+ }
282
+ const key = `${link.text}\0${link.href}`;
283
+ if (!definitionByKey.has(key)) {
284
+ definitionByKey.set(key, link);
285
+ }
286
+ }
287
+ if (definitionByKey.size > 0) {
288
+ result = result.replaceAll(MARKDOWN_DEFINITION_REGEX, (fullMatch, ref, href) => {
289
+ const trimmedHref = href.trim();
290
+ // Look up the corresponding definition ResourceLink
291
+ const key = `${ref}\0${trimmedHref}`;
292
+ const link = definitionByKey.get(key);
293
+ if (!link) {
294
+ return fullMatch;
295
+ }
296
+ // Resolve the target resource if available
297
+ const resource = link.resolvedId === undefined || resourceRegistry === undefined
298
+ ? undefined
299
+ : resourceRegistry.getResourceById(link.resolvedId);
300
+ // Find matching rule (same rule set as inline links)
301
+ const rule = findMatchingRule(link, resource, linkRewriteRules);
302
+ const template = rule?.template ?? defaultTemplate;
303
+ if (template === undefined) {
304
+ return fullMatch;
305
+ }
306
+ // If resource is in registry and we have sourceFilePath: rewrite URL in definition format
307
+ if (resource !== undefined && sourceFilePath !== undefined) {
308
+ const [, anchor] = splitHrefAnchor(trimmedHref);
309
+ const fragment = anchor === undefined ? '' : `#${anchor}`;
310
+ const newRelPath = toForwardSlash(path.relative(path.dirname(sourceFilePath), resource.filePath));
311
+ return `[${ref}]: ${newRelPath}${fragment}`;
312
+ }
313
+ // Rule matched but no resource to rewrite to — remove orphaned definition
314
+ return '';
315
+ });
316
+ // Clean up excessive blank lines from removed definitions
317
+ result = result.replaceAll(/\n{3,}/g, '\n\n');
318
+ }
319
+ return result;
251
320
  }
252
321
  //# sourceMappingURL=content-transform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-transform.js","sourceRoot":"","sources":["../src/content-transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-transform.js","sourceRoot":"","sources":["../src/content-transform.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -29,8 +29,8 @@ export { ResourceRegistry, generateIdFromPath, type CrawlOptions, type ResourceR
29
29
  export { ResourceQuery } from './resource-query.js';
30
30
  export { ResourceCollection } from './resource-collection.js';
31
31
  export type { ResourceCollectionInterface } from './resource-collection-interface.js';
32
- export type { LinkType, HeadingNode, ResourceLink, ResourceMetadata, ValidationIssue, ValidationResult, ProjectConfig, ResourcesConfig, CollectionConfig, CollectionValidation, ValidationMode, } from './types.js';
33
- export { LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadataSchema, } from './schemas/resource-metadata.js';
32
+ export type { LinkNodeType, LinkType, HeadingNode, ResourceLink, ResourceMetadata, ValidationIssue, ValidationResult, ProjectConfig, ResourcesConfig, CollectionConfig, CollectionValidation, ValidationMode, } from './types.js';
33
+ export { LinkNodeTypeSchema, LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadataSchema, } from './schemas/resource-metadata.js';
34
34
  export { ValidationIssueSchema, ValidationResultSchema, } from './schemas/validation-result.js';
35
35
  export { parseMarkdown, type ParseResult } from './link-parser.js';
36
36
  export { validateFrontmatter } from './frontmatter-validator.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGtF,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGtF,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ export { ResourceQuery } from './resource-query.js';
32
32
  // Export ResourceCollection for immutable collections with lazy duplicate detection
33
33
  export { ResourceCollection } from './resource-collection.js';
34
34
  // Export schemas for external use (e.g., JSON Schema generation, runtime validation)
35
- export { LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadataSchema, } from './schemas/resource-metadata.js';
35
+ export { LinkNodeTypeSchema, LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadataSchema, } from './schemas/resource-metadata.js';
36
36
  export { ValidationIssueSchema, ValidationResultSchema, } from './schemas/validation-result.js';
37
37
  // Export parser interface for advanced use cases
38
38
  export { parseMarkdown } from './link-parser.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,+DAA+D;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAMnB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oFAAoF;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAoB9D,qFAAqF;AACrF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AAEnE,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,qDAAqD;AACrD,OAAO,EACL,gBAAgB,GAKjB,MAAM,wBAAwB,CAAC;AAEhC,kEAAkE;AAClE,0EAA0E"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,+DAA+D;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAMnB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oFAAoF;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAqB9D,qFAAqF;AACrF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AAEnE,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,qDAAqD;AACrD,OAAO,EACL,gBAAgB,GAKjB,MAAM,wBAAwB,CAAC;AAEhC,kEAAkE;AAClE,0EAA0E"}
@@ -83,6 +83,7 @@ function extractLinks(tree) {
83
83
  href: node.url,
84
84
  type: classifyLink(node.url),
85
85
  line: node.position?.start.line,
86
+ nodeType: 'link',
86
87
  };
87
88
  links.push(link);
88
89
  });
@@ -97,6 +98,7 @@ function extractLinks(tree) {
97
98
  href,
98
99
  type: 'unknown', // Reference links need definition resolution
99
100
  line: node.position?.start.line,
101
+ nodeType: 'linkReference',
100
102
  };
101
103
  links.push(link);
102
104
  });
@@ -108,6 +110,7 @@ function extractLinks(tree) {
108
110
  href: node.url,
109
111
  type: classifyLink(node.url),
110
112
  line: node.position?.start.line,
113
+ nodeType: 'definition',
111
114
  };
112
115
  links.push(link);
113
116
  });
@@ -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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"}
@@ -10,6 +10,15 @@ import { z } from 'zod';
10
10
  */
11
11
  export declare const LinkTypeSchema: z.ZodEnum<["local_file", "anchor", "external", "email", "unknown"]>;
12
12
  export type LinkType = z.infer<typeof LinkTypeSchema>;
13
+ /**
14
+ * AST node type that produced a link entry.
15
+ *
16
+ * - `link`: Inline link `[text](href)`
17
+ * - `linkReference`: Reference-style usage `[text][ref]`
18
+ * - `definition`: Reference-style definition `[ref]: url`
19
+ */
20
+ export declare const LinkNodeTypeSchema: z.ZodEnum<["link", "linkReference", "definition"]>;
21
+ export type LinkNodeType = z.infer<typeof LinkNodeTypeSchema>;
13
22
  /**
14
23
  * Represents a heading node in the document's table of contents.
15
24
  *
@@ -44,6 +53,7 @@ export declare const ResourceLinkSchema: z.ZodObject<{
44
53
  resolvedPath: z.ZodOptional<z.ZodString>;
45
54
  anchorTarget: z.ZodOptional<z.ZodString>;
46
55
  resolvedId: z.ZodOptional<z.ZodString>;
56
+ nodeType: z.ZodOptional<z.ZodEnum<["link", "linkReference", "definition"]>>;
47
57
  }, "strip", z.ZodTypeAny, {
48
58
  type: "anchor" | "local_file" | "external" | "email" | "unknown";
49
59
  text: string;
@@ -52,6 +62,7 @@ export declare const ResourceLinkSchema: z.ZodObject<{
52
62
  resolvedPath?: string | undefined;
53
63
  anchorTarget?: string | undefined;
54
64
  resolvedId?: string | undefined;
65
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
55
66
  }, {
56
67
  type: "anchor" | "local_file" | "external" | "email" | "unknown";
57
68
  text: string;
@@ -60,6 +71,7 @@ export declare const ResourceLinkSchema: z.ZodObject<{
60
71
  resolvedPath?: string | undefined;
61
72
  anchorTarget?: string | undefined;
62
73
  resolvedId?: string | undefined;
74
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
63
75
  }>;
64
76
  export type ResourceLink = z.infer<typeof ResourceLinkSchema>;
65
77
  /**
@@ -79,6 +91,7 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
79
91
  resolvedPath: z.ZodOptional<z.ZodString>;
80
92
  anchorTarget: z.ZodOptional<z.ZodString>;
81
93
  resolvedId: z.ZodOptional<z.ZodString>;
94
+ nodeType: z.ZodOptional<z.ZodEnum<["link", "linkReference", "definition"]>>;
82
95
  }, "strip", z.ZodTypeAny, {
83
96
  type: "anchor" | "local_file" | "external" | "email" | "unknown";
84
97
  text: string;
@@ -87,6 +100,7 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
87
100
  resolvedPath?: string | undefined;
88
101
  anchorTarget?: string | undefined;
89
102
  resolvedId?: string | undefined;
103
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
90
104
  }, {
91
105
  type: "anchor" | "local_file" | "external" | "email" | "unknown";
92
106
  text: string;
@@ -95,6 +109,7 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
95
109
  resolvedPath?: string | undefined;
96
110
  anchorTarget?: string | undefined;
97
111
  resolvedId?: string | undefined;
112
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
98
113
  }>, "many">;
99
114
  headings: z.ZodArray<z.ZodType<HeadingNode, z.ZodTypeDef, HeadingNode>, "many">;
100
115
  frontmatter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
@@ -115,6 +130,7 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
115
130
  resolvedPath?: string | undefined;
116
131
  anchorTarget?: string | undefined;
117
132
  resolvedId?: string | undefined;
133
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
118
134
  }[];
119
135
  headings: HeadingNode[];
120
136
  sizeBytes: number;
@@ -135,6 +151,7 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
135
151
  resolvedPath?: string | undefined;
136
152
  anchorTarget?: string | undefined;
137
153
  resolvedId?: string | undefined;
154
+ nodeType?: "link" | "linkReference" | "definition" | undefined;
138
155
  }[];
139
156
  headings: HeadingNode[];
140
157
  sizeBytes: number;
@@ -1 +1 @@
1
- {"version":3,"file":"resource-metadata.d.ts","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,qEAM4B,CAAC;AAExD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAQpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAQiB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeqB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"resource-metadata.d.ts","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,qEAM4B,CAAC;AAExD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,oDAIqB,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAQpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;EASiB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeqB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -16,6 +16,18 @@ export const LinkTypeSchema = z.enum([
16
16
  'email',
17
17
  'unknown',
18
18
  ]).describe('Type of link found in markdown resources');
19
+ /**
20
+ * AST node type that produced a link entry.
21
+ *
22
+ * - `link`: Inline link `[text](href)`
23
+ * - `linkReference`: Reference-style usage `[text][ref]`
24
+ * - `definition`: Reference-style definition `[ref]: url`
25
+ */
26
+ export const LinkNodeTypeSchema = z.enum([
27
+ 'link',
28
+ 'linkReference',
29
+ 'definition',
30
+ ]).describe('AST node type that produced this link');
19
31
  /**
20
32
  * Zod schema for heading nodes in the document's table of contents.
21
33
  *
@@ -43,6 +55,7 @@ export const ResourceLinkSchema = z.object({
43
55
  resolvedPath: z.string().optional().describe('Absolute file path (for local_file links)'),
44
56
  anchorTarget: z.string().optional().describe('Target heading slug (for anchor links)'),
45
57
  resolvedId: z.string().optional().describe('Resolved resource ID in the collection (for local_file links)'),
58
+ nodeType: LinkNodeTypeSchema.optional().describe('AST node type: link, linkReference, or definition'),
46
59
  }).describe('Link found in a markdown resource');
47
60
  /**
48
61
  * Complete metadata for a markdown resource.
@@ -1 +1 @@
1
- {"version":3,"file":"resource-metadata.js","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-metadata.js","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  */
13
13
  export type { SHA256 } from './schemas/checksum.js';
14
14
  export { SHA256Schema } from './schemas/checksum.js';
15
- export type { LinkType, HeadingNode, ResourceLink, ResourceMetadata, } from './schemas/resource-metadata.js';
15
+ export type { LinkNodeType, LinkType, HeadingNode, ResourceLink, ResourceMetadata, } from './schemas/resource-metadata.js';
16
16
  export type { ValidationIssue, ValidationResult, } from './schemas/validation-result.js';
17
17
  export type { CrawlOptions, ResourceRegistryOptions, ValidateOptions, RegistryStats, CollectionStat, CollectionStats, } from './resource-registry.js';
18
18
  export { ResourceType, isJsonSchema, } from './types/resources.js';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA0BrD,uBAAuB;AACvB,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAY9B,0BAA0B;AAC1B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAWpC,iBAAiB;AACjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA2BrD,uBAAuB;AACvB,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAY9B,0BAA0B;AAC1B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAWpC,iBAAiB;AACjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/resources",
3
- "version": "0.1.14",
3
+ "version": "0.1.15-rc.2",
4
4
  "description": "Markdown resource parsing, validation, and link integrity checking",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,7 +33,7 @@
33
33
  "author": "Jeff Dutton",
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
- "@vibe-agent-toolkit/utils": "0.1.14",
36
+ "@vibe-agent-toolkit/utils": "0.1.15-rc.2",
37
37
  "ajv": "^8.17.1",
38
38
  "js-yaml": "^4.1.1",
39
39
  "markdown-link-check": "^3.14.2",
@@ -22,7 +22,7 @@
22
22
 
23
23
  import path from 'node:path';
24
24
 
25
- import { renderTemplate } from '@vibe-agent-toolkit/utils';
25
+ import { renderTemplate, toForwardSlash } from '@vibe-agent-toolkit/utils';
26
26
 
27
27
  import type { LinkType, ResourceLink, ResourceMetadata } from './schemas/resource-metadata.js';
28
28
  import { matchesGlobPattern, splitHrefAnchor } from './utils.js';
@@ -122,11 +122,13 @@ export interface LinkRewriteRule {
122
122
  * - `link.type` - Link type (local_file, anchor, external, email, unknown)
123
123
  * - `link.resource.id` - Target resource ID (if resolved)
124
124
  * - `link.resource.filePath` - Target resource file path (if resolved)
125
+ * - `link.resource.fileName` - Target resource file name with extension (if resolved)
125
126
  * - `link.resource.extension` - Target resource file extension (if resolved)
126
127
  * - `link.resource.mimeType` - Inferred MIME type (if resolved)
127
128
  * - `link.resource.frontmatter.*` - Target resource frontmatter fields (if resolved)
128
129
  * - `link.resource.sizeBytes` - Target resource size in bytes (if resolved)
129
130
  * - `link.resource.estimatedTokenCount` - Target resource estimated token count (if resolved)
131
+ * - `link.resource.relativePath` - Relative path from sourceFilePath to resource (if both available)
130
132
  * - Plus any variables from `context`
131
133
  */
132
134
  template: string;
@@ -150,6 +152,20 @@ export interface ContentTransformOptions {
150
152
  * These are merged at the top level of the template context.
151
153
  */
152
154
  context?: Record<string, unknown>;
155
+
156
+ /**
157
+ * Absolute file path of the source document being transformed.
158
+ * When provided, enables `link.resource.relativePath` computation:
159
+ * `relative(dirname(sourceFilePath), link.resource.filePath)` using forward slashes.
160
+ */
161
+ sourceFilePath?: string;
162
+
163
+ /**
164
+ * Fallback template for links that match no rule.
165
+ * Without this option, unmatched links are left untouched (original markdown preserved).
166
+ * With this option, unmatched links are rendered through this template.
167
+ */
168
+ defaultTemplate?: string;
153
169
  }
154
170
 
155
171
  /**
@@ -160,6 +176,7 @@ export interface ContentTransformOptions {
160
176
  * @param fragment - The fragment string including '#' prefix, or empty string
161
177
  * @param resource - The resolved target resource (if available)
162
178
  * @param extraContext - Additional context variables
179
+ * @param sourceFilePath - Absolute path of the source document (for relativePath computation)
163
180
  * @returns Template context object
164
181
  */
165
182
  function buildTemplateContext(
@@ -168,17 +185,22 @@ function buildTemplateContext(
168
185
  fragment: string,
169
186
  resource: ResourceMetadata | undefined,
170
187
  extraContext: Record<string, unknown> | undefined,
188
+ sourceFilePath: string | undefined,
171
189
  ): Record<string, unknown> {
172
190
  const resourceContext = resource === undefined
173
191
  ? undefined
174
192
  : {
175
193
  id: resource.id,
176
194
  filePath: resource.filePath,
195
+ fileName: path.basename(resource.filePath),
177
196
  extension: path.extname(resource.filePath),
178
197
  mimeType: inferMimeType(resource.filePath),
179
198
  frontmatter: resource.frontmatter,
180
199
  sizeBytes: resource.sizeBytes,
181
200
  estimatedTokenCount: resource.estimatedTokenCount,
201
+ relativePath: sourceFilePath === undefined
202
+ ? undefined
203
+ : toForwardSlash(path.relative(path.dirname(sourceFilePath), resource.filePath)),
182
204
  };
183
205
 
184
206
  return {
@@ -289,7 +311,7 @@ function findMatchingRule(
289
311
  }
290
312
 
291
313
  /**
292
- * Regex pattern matching markdown links: `[text](href)`
314
+ * Regex pattern matching inline markdown links: `[text](href)`
293
315
  *
294
316
  * Captures:
295
317
  * - Group 0: Full match including brackets and parentheses
@@ -303,15 +325,29 @@ function findMatchingRule(
303
325
  // eslint-disable-next-line sonarjs/slow-regex -- negated character classes [^\]] and [^)] are inherently non-backtracking
304
326
  const MARKDOWN_LINK_REGEX = /\[([^\]]*)\]\(([^)]*)\)/g;
305
327
 
328
+ /**
329
+ * Regex pattern matching reference-style link definitions: `[ref]: url`
330
+ *
331
+ * Must appear at the start of a line (multiline flag).
332
+ * Captures:
333
+ * - Group 1: Reference identifier
334
+ * - Group 2: URL (may include trailing whitespace)
335
+ */
336
+ // eslint-disable-next-line sonarjs/slow-regex -- Controlled markdown reference link definitions on line boundaries
337
+ const MARKDOWN_DEFINITION_REGEX = /^\[([^\]]*?)\]:\s*(.+)$/gm;
338
+
306
339
  /**
307
340
  * Transform markdown content by rewriting links according to rules.
308
341
  *
309
342
  * This is a pure function that takes content, its parsed links, and transform options,
310
343
  * and returns the content with matching links rewritten according to the first matching rule.
311
344
  *
312
- * Links are matched by their original markdown syntax `[text](href)`. For each link found
313
- * in the content, the function checks the provided rules in order. The first matching rule
314
- * determines the replacement. Links matching no rule are left untouched.
345
+ * Two passes are performed:
346
+ * 1. **Inline links** `[text](href)` matched via rules, rendered through templates
347
+ * 2. **Definition lines** `[ref]: url` matched via rules, rewritten in definition format
348
+ * or removed if orphaned (target not in registry)
349
+ *
350
+ * Links matching no rule are left untouched unless a `defaultTemplate` is provided.
315
351
  *
316
352
  * @param content - The markdown content to transform
317
353
  * @param links - Parsed links from the content (from ResourceMetadata.links)
@@ -342,26 +378,31 @@ export function transformContent(
342
378
  links: ResourceLink[],
343
379
  options: ContentTransformOptions,
344
380
  ): string {
345
- const { linkRewriteRules, resourceRegistry, context } = options;
381
+ const { linkRewriteRules, resourceRegistry, context, sourceFilePath, defaultTemplate } = options;
346
382
 
347
- // If there are no rules or no links, return content unchanged
348
- if (linkRewriteRules.length === 0 || links.length === 0) {
383
+ // If there are no rules, no default template, or no links, return content unchanged
384
+ if ((linkRewriteRules.length === 0 && defaultTemplate === undefined) || links.length === 0) {
349
385
  return content;
350
386
  }
351
387
 
388
+ // === Pass 1: Inline links [text](href) ===
389
+
352
390
  // Build a lookup map from "[text](href)" to the corresponding ResourceLink.
353
391
  // Multiple links can share the same text+href combination; we process them all
354
392
  // with the first matching ResourceLink (they are identical in terms of match criteria).
355
393
  const linkBySignature = new Map<string, ResourceLink>();
356
394
  for (const link of links) {
395
+ if (link.nodeType === 'definition') {
396
+ continue; // Definitions are handled in pass 2
397
+ }
357
398
  const signature = `[${link.text}](${link.href})`;
358
399
  if (!linkBySignature.has(signature)) {
359
400
  linkBySignature.set(signature, link);
360
401
  }
361
402
  }
362
403
 
363
- // Replace markdown links in content
364
- return content.replaceAll(MARKDOWN_LINK_REGEX, (fullMatch, text: string, href: string) => {
404
+ // Replace inline markdown links in content
405
+ let result = content.replaceAll(MARKDOWN_LINK_REGEX, (fullMatch, text: string, href: string) => {
365
406
  // Find the corresponding ResourceLink
366
407
  const signature = `[${text}](${href})`;
367
408
  const link = linkBySignature.get(signature);
@@ -379,8 +420,10 @@ export function transformContent(
379
420
  // Find the first matching rule
380
421
  const rule = findMatchingRule(link, resource, linkRewriteRules);
381
422
 
382
- if (!rule) {
383
- // No rule matches - leave untouched
423
+ // Determine which template to use: matched rule, defaultTemplate, or leave untouched
424
+ const template = rule?.template ?? defaultTemplate;
425
+ if (template === undefined) {
426
+ // No rule matches and no default template - leave untouched
384
427
  return fullMatch;
385
428
  }
386
429
 
@@ -389,7 +432,68 @@ export function transformContent(
389
432
  const fragment = anchor === undefined ? '' : `#${anchor}`;
390
433
 
391
434
  // Build template context and render
392
- const templateContext = buildTemplateContext(link, hrefWithoutFragment, fragment, resource, context);
393
- return renderTemplate(rule.template, templateContext);
435
+ const templateContext = buildTemplateContext(link, hrefWithoutFragment, fragment, resource, context, sourceFilePath);
436
+ return renderTemplate(template, templateContext);
394
437
  });
438
+
439
+ // === Pass 2: Reference-style definitions [ref]: url ===
440
+
441
+ // Build lookup map for definition links (keyed by "identifier\0href")
442
+ const definitionByKey = new Map<string, ResourceLink>();
443
+ for (const link of links) {
444
+ if (link.nodeType !== 'definition') {
445
+ continue;
446
+ }
447
+ const key = `${link.text}\0${link.href}`;
448
+ if (!definitionByKey.has(key)) {
449
+ definitionByKey.set(key, link);
450
+ }
451
+ }
452
+
453
+ if (definitionByKey.size > 0) {
454
+ result = result.replaceAll(
455
+ MARKDOWN_DEFINITION_REGEX,
456
+ (fullMatch, ref: string, href: string) => {
457
+ const trimmedHref = href.trim();
458
+
459
+ // Look up the corresponding definition ResourceLink
460
+ const key = `${ref}\0${trimmedHref}`;
461
+ const link = definitionByKey.get(key);
462
+ if (!link) {
463
+ return fullMatch;
464
+ }
465
+
466
+ // Resolve the target resource if available
467
+ const resource = link.resolvedId === undefined || resourceRegistry === undefined
468
+ ? undefined
469
+ : resourceRegistry.getResourceById(link.resolvedId);
470
+
471
+ // Find matching rule (same rule set as inline links)
472
+ const rule = findMatchingRule(link, resource, linkRewriteRules);
473
+ const template = rule?.template ?? defaultTemplate;
474
+
475
+ if (template === undefined) {
476
+ return fullMatch;
477
+ }
478
+
479
+ // If resource is in registry and we have sourceFilePath: rewrite URL in definition format
480
+ if (resource !== undefined && sourceFilePath !== undefined) {
481
+ const [, anchor] = splitHrefAnchor(trimmedHref);
482
+ const fragment = anchor === undefined ? '' : `#${anchor}`;
483
+ const newRelPath = toForwardSlash(
484
+ path.relative(path.dirname(sourceFilePath), resource.filePath),
485
+ );
486
+ return `[${ref}]: ${newRelPath}${fragment}`;
487
+ }
488
+
489
+ // Rule matched but no resource to rewrite to — remove orphaned definition
490
+ return '';
491
+ },
492
+ );
493
+
494
+ // Clean up excessive blank lines from removed definitions
495
+ result = result.replaceAll(/\n{3,}/g, '\n\n');
496
+ }
497
+
498
+ return result;
395
499
  }
package/src/index.ts CHANGED
@@ -48,6 +48,7 @@ export type { ResourceCollectionInterface } from './resource-collection-interfac
48
48
 
49
49
  // Export all type definitions (from schemas)
50
50
  export type {
51
+ LinkNodeType,
51
52
  LinkType,
52
53
  HeadingNode,
53
54
  ResourceLink,
@@ -63,6 +64,7 @@ export type {
63
64
 
64
65
  // Export schemas for external use (e.g., JSON Schema generation, runtime validation)
65
66
  export {
67
+ LinkNodeTypeSchema,
66
68
  LinkTypeSchema,
67
69
  HeadingNodeSchema,
68
70
  ResourceLinkSchema,
@@ -111,6 +111,7 @@ function extractLinks(tree: Root): ResourceLink[] {
111
111
  href: node.url,
112
112
  type: classifyLink(node.url),
113
113
  line: node.position?.start.line,
114
+ nodeType: 'link',
114
115
  };
115
116
  links.push(link);
116
117
  });
@@ -126,6 +127,7 @@ function extractLinks(tree: Root): ResourceLink[] {
126
127
  href,
127
128
  type: 'unknown', // Reference links need definition resolution
128
129
  line: node.position?.start.line,
130
+ nodeType: 'linkReference',
129
131
  };
130
132
  links.push(link);
131
133
  });
@@ -138,6 +140,7 @@ function extractLinks(tree: Root): ResourceLink[] {
138
140
  href: node.url,
139
141
  type: classifyLink(node.url),
140
142
  line: node.position?.start.line,
143
+ nodeType: 'definition',
141
144
  };
142
145
  links.push(link);
143
146
  });
@@ -21,6 +21,21 @@ export const LinkTypeSchema = z.enum([
21
21
 
22
22
  export type LinkType = z.infer<typeof LinkTypeSchema>;
23
23
 
24
+ /**
25
+ * AST node type that produced a link entry.
26
+ *
27
+ * - `link`: Inline link `[text](href)`
28
+ * - `linkReference`: Reference-style usage `[text][ref]`
29
+ * - `definition`: Reference-style definition `[ref]: url`
30
+ */
31
+ export const LinkNodeTypeSchema = z.enum([
32
+ 'link',
33
+ 'linkReference',
34
+ 'definition',
35
+ ]).describe('AST node type that produced this link');
36
+
37
+ export type LinkNodeType = z.infer<typeof LinkNodeTypeSchema>;
38
+
24
39
  /**
25
40
  * Represents a heading node in the document's table of contents.
26
41
  *
@@ -65,6 +80,7 @@ export const ResourceLinkSchema = z.object({
65
80
  resolvedPath: z.string().optional().describe('Absolute file path (for local_file links)'),
66
81
  anchorTarget: z.string().optional().describe('Target heading slug (for anchor links)'),
67
82
  resolvedId: z.string().optional().describe('Resolved resource ID in the collection (for local_file links)'),
83
+ nodeType: LinkNodeTypeSchema.optional().describe('AST node type: link, linkReference, or definition'),
68
84
  }).describe('Link found in a markdown resource');
69
85
 
70
86
  export type ResourceLink = z.infer<typeof ResourceLinkSchema>;
package/src/types.ts CHANGED
@@ -17,6 +17,7 @@ export { SHA256Schema } from './schemas/checksum.js';
17
17
 
18
18
  // Resource metadata types
19
19
  export type {
20
+ LinkNodeType,
20
21
  LinkType,
21
22
  HeadingNode,
22
23
  ResourceLink,