@j0hanz/fetch-url-mcp 1.10.20 → 1.10.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/transform/metadata.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoCnE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAkBR;AAgKD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,CAYnB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,GAAG,IAAI,CAY1B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAC/B,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,CAmBnB;AA2GD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAOpB;AACD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAuCxE;AAmBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAczD;AAaD,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,aAAa,EACxB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAmBR"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/transform/metadata.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoCnE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAkBR;AAuJD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,CAYnB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,GAAG,IAAI,CAY1B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAC/B,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,CAmBnB;AA2GD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAOpB;AACD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAuCxE;AAmBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAczD;AAaD,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,aAAa,EACxB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAmBR"}
@@ -145,15 +145,10 @@ const FAVICON_SELECTORS = [
145
145
  ];
146
146
  function resolveFaviconUrl(href, baseUrl) {
147
147
  const trimmed = href.trim();
148
- if (!trimmed)
149
- return undefined;
150
- if (trimmed.toLowerCase().startsWith('data:'))
148
+ if (!trimmed || trimmed.toLowerCase().startsWith('data:'))
151
149
  return undefined;
152
150
  const resolved = parseUrlOrNull(trimmed, baseUrl);
153
- if (!resolved) {
154
- return undefined;
155
- }
156
- if (resolved.protocol !== 'http:' && resolved.protocol !== 'https:') {
151
+ if (resolved?.protocol !== 'http:' && resolved?.protocol !== 'https:') {
157
152
  return undefined;
158
153
  }
159
154
  return resolved.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"title-policy.d.ts","sourceRoot":"","sources":["../../src/transform/title-policy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAMD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAER;AAED,wBAAgB,+BAA+B,CAC7C,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAWT;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAU9D;AAsCD,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,GAAG,EAAE,MAAM,GACV,MAAM,CAMR;AAcD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,qBAAqB,EAC9B,GAAG,EAAE,MAAM,GACV,MAAM,CAUR"}
1
+ {"version":3,"file":"title-policy.d.ts","sourceRoot":"","sources":["../../src/transform/title-policy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAMD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAER;AAED,wBAAgB,+BAA+B,CAC7C,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAWT;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAU9D;AAkCD,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,GAAG,EAAE,MAAM,GACV,MAAM,CAMR;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,qBAAqB,EAC9B,GAAG,EAAE,MAAM,GACV,MAAM,CAYR"}
@@ -28,14 +28,11 @@ export function isGithubRepositoryRootUrl(url) {
28
28
  }
29
29
  return parsed.pathname.split('/').filter(Boolean).length === 2;
30
30
  }
31
- function normalizeHeadingText(value) {
32
- return value.replace(/\s+/g, ' ').trim().toLowerCase();
33
- }
34
31
  function stripLeadingHeading(markdown, headingText) {
35
32
  if (!markdown)
36
33
  return markdown;
37
34
  const lines = markdown.split('\n');
38
- const target = normalizeHeadingText(headingText);
35
+ const target = normalizeSyntheticTitleToken(headingText);
39
36
  let nonEmptySeen = 0;
40
37
  for (let index = 0; index < lines.length && nonEmptySeen < HEADING_SCAN_LIMIT; index += 1) {
41
38
  const trimmed = lines[index]?.trim() ?? '';
@@ -45,7 +42,7 @@ function stripLeadingHeading(markdown, headingText) {
45
42
  const match = LEADING_HEADING_PATTERN.exec(trimmed);
46
43
  if (!match)
47
44
  continue;
48
- const current = normalizeHeadingText(match[2] ?? '');
45
+ const current = normalizeSyntheticTitleToken(match[2] ?? '');
49
46
  if (current !== target)
50
47
  return markdown;
51
48
  lines.splice(index, 1);
@@ -62,15 +59,14 @@ export function maybeStripGithubPrimaryHeading(markdown, primaryHeading, url) {
62
59
  }
63
60
  return stripLeadingHeading(markdown, primaryHeading);
64
61
  }
65
- function buildSyntheticTitlePrefix(url, favicon, suppressFavicon) {
66
- if (!favicon || suppressFavicon)
67
- return ' ';
68
- const alt = parseUrlOrNull(url)?.hostname ?? '';
69
- return ` ![${alt}](${favicon}) `;
70
- }
71
62
  export function maybePrependSyntheticTitle(markdown, context, url) {
72
63
  if (!context.title || /^(#{1,6})\s/.test(markdown.trimStart())) {
73
64
  return markdown;
74
65
  }
75
- return `#${buildSyntheticTitlePrefix(url, context.favicon, context.suppressSyntheticFavicon)}${context.title}\n\n${markdown}`;
66
+ let prefix = ' ';
67
+ if (context.favicon && !context.suppressSyntheticFavicon) {
68
+ const alt = parseUrlOrNull(url)?.hostname ?? '';
69
+ prefix = ` ![${alt}](${context.favicon}) `;
70
+ }
71
+ return `#${prefix}${context.title}\n\n${markdown}`;
76
72
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@j0hanz/fetch-url-mcp",
3
- "version": "1.10.20",
3
+ "version": "1.10.21",
4
4
  "mcpName": "io.github.j0hanz/fetch-url-mcp",
5
5
  "description": "A web content fetcher MCP server that converts HTML to clean, AI and human readable markdown.",
6
6
  "type": "module",