@nuasite/cms-marker 0.0.77 → 0.0.79

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.
@@ -352,6 +352,13 @@ export interface SeoKeywords extends SeoSourceInfo {
352
352
  /** Parsed array of individual keywords */
353
353
  keywords: string[];
354
354
  }
355
+ /** Robots meta directive */
356
+ export interface RobotsDirective extends SeoSourceInfo {
357
+ /** Raw content value */
358
+ content: string;
359
+ /** Parsed individual directives (e.g., ['noindex', 'nofollow']) */
360
+ directives: string[];
361
+ }
355
362
  /** Complete SEO data for a page */
356
363
  export interface PageSeoData {
357
364
  /** Page title */
@@ -362,6 +369,8 @@ export interface PageSeoData {
362
369
  keywords?: SeoKeywords;
363
370
  /** Canonical URL */
364
371
  canonical?: CanonicalUrl;
372
+ /** Robots meta directive */
373
+ robots?: RobotsDirective;
365
374
  /** Open Graph metadata */
366
375
  openGraph?: OpenGraphData;
367
376
  /** Twitter Card metadata */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -14,10 +14,17 @@
14
14
  "directory": "packages/cms-marker"
15
15
  },
16
16
  "license": "Apache-2.0",
17
- "version": "0.0.77",
17
+ "version": "0.0.79",
18
18
  "module": "src/index.ts",
19
19
  "types": "src/index.ts",
20
20
  "type": "module",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./src/index.ts",
24
+ "import": "./src/index.ts",
25
+ "default": "./src/index.ts"
26
+ }
27
+ },
21
28
  "dependencies": {
22
29
  "@astrojs/compiler": "^2.13.0",
23
30
  "@babel/parser": "^7.24.0",
@@ -763,7 +763,7 @@ export async function processHtml(
763
763
  // Process SEO elements from the page
764
764
  let seo: PageSeoData | undefined
765
765
  if (seoOptions?.trackSeo !== false) {
766
- const seoResult = processSeoFromHtml(
766
+ const seoResult = await processSeoFromHtml(
767
767
  finalHtml,
768
768
  {
769
769
  markTitle: seoOptions?.markTitle ?? true,
package/src/index.ts CHANGED
@@ -158,5 +158,5 @@ export type {
158
158
  SourceContext,
159
159
  TailwindColor,
160
160
  TextStyleValue,
161
- TwitterCardData
161
+ TwitterCardData,
162
162
  } from './types'
@@ -1,5 +1,6 @@
1
1
  import { type HTMLElement as ParsedHTMLElement, parse } from 'node-html-parser'
2
- import type { CanonicalUrl, JsonLdEntry, OpenGraphData, PageSeoData, SeoKeywords, SeoMetaTag, SeoTitle, TwitterCardData } from './types'
2
+ import { findSeoSource } from './source-finder/seo-finder'
3
+ import type { CanonicalUrl, JsonLdEntry, OpenGraphData, PageSeoData, RobotsDirective, SeoKeywords, SeoMetaTag, SeoTitle, TwitterCardData } from './types'
3
4
 
4
5
  /** Type for parsed HTML element nodes from node-html-parser */
5
6
  type HTMLNode = ParsedHTMLElement
@@ -9,7 +10,7 @@ export interface ProcessSeoOptions {
9
10
  markTitle?: boolean
10
11
  /** Whether to parse JSON-LD structured data (default: true) */
11
12
  parseJsonLd?: boolean
12
- /** Path to source file for source tracking */
13
+ /** Path to source file for source tracking (fallback) */
13
14
  sourcePath?: string
14
15
  }
15
16
 
@@ -26,11 +27,11 @@ export interface ProcessSeoResult {
26
27
  * Process HTML to extract SEO metadata from the <head> section.
27
28
  * Returns structured SEO data with source tracking information.
28
29
  */
29
- export function processSeoFromHtml(
30
+ export async function processSeoFromHtml(
30
31
  html: string,
31
32
  options: ProcessSeoOptions = {},
32
33
  getNextId?: () => string,
33
- ): ProcessSeoResult {
34
+ ): Promise<ProcessSeoResult> {
34
35
  const { markTitle = true, parseJsonLd = true, sourcePath } = options
35
36
 
36
37
  const root = parse(html, {
@@ -49,7 +50,7 @@ export function processSeoFromHtml(
49
50
  let titleCmsId: string | undefined
50
51
 
51
52
  // Extract title
52
- const titleResult = extractTitle(root, html, sourcePath, markTitle, getNextId)
53
+ const titleResult = await extractTitle(root, html, sourcePath, markTitle, getNextId)
53
54
  if (titleResult) {
54
55
  seo.title = titleResult.title
55
56
  titleCmsId = titleResult.cmsId
@@ -57,18 +58,18 @@ export function processSeoFromHtml(
57
58
 
58
59
  // Extract meta tags from head
59
60
  if (head) {
60
- const metaTags = extractMetaTags(head, html, sourcePath)
61
+ const metaTags = await extractMetaTags(head, html, sourcePath)
61
62
  categorizeMetaTags(metaTags, seo)
62
63
 
63
64
  // Extract canonical URL
64
- const canonical = extractCanonical(head, html, sourcePath)
65
+ const canonical = await extractCanonical(head, html, sourcePath)
65
66
  if (canonical) {
66
67
  seo.canonical = canonical
67
68
  }
68
69
 
69
70
  // Extract JSON-LD
70
71
  if (parseJsonLd) {
71
- const jsonLdEntries = extractJsonLd(head, html, sourcePath)
72
+ const jsonLdEntries = await extractJsonLd(head, html, sourcePath)
72
73
  if (jsonLdEntries.length > 0) {
73
74
  seo.jsonLd = jsonLdEntries
74
75
  }
@@ -85,21 +86,24 @@ export function processSeoFromHtml(
85
86
  /**
86
87
  * Extract the page title from HTML
87
88
  */
88
- function extractTitle(
89
+ async function extractTitle(
89
90
  root: HTMLNode,
90
91
  html: string,
91
92
  sourcePath?: string,
92
93
  markTitle?: boolean,
93
94
  getNextId?: () => string,
94
- ): { title: SeoTitle; cmsId?: string } | undefined {
95
+ ): Promise<{ title: SeoTitle; cmsId?: string } | undefined> {
95
96
  const titleElement = root.querySelector('title')
96
97
  if (!titleElement) return undefined
97
98
 
98
99
  const content = titleElement.textContent?.trim() || ''
99
100
  if (!content) return undefined
100
101
 
101
- // Find source location
102
- const sourceInfo = findElementSourceLocation(titleElement, html, sourcePath)
102
+ // Try to find source location in actual source files
103
+ const sourceLocation = await findSeoSource('title', { content })
104
+
105
+ // Fall back to rendered HTML location if source not found
106
+ const sourceInfo = sourceLocation || findElementSourceLocation(titleElement, html, sourcePath)
103
107
 
104
108
  let cmsId: string | undefined
105
109
  if (markTitle && getNextId) {
@@ -120,11 +124,11 @@ function extractTitle(
120
124
  /**
121
125
  * Extract all meta tags from the head
122
126
  */
123
- function extractMetaTags(
127
+ async function extractMetaTags(
124
128
  head: HTMLNode,
125
129
  html: string,
126
130
  sourcePath?: string,
127
- ): SeoMetaTag[] {
131
+ ): Promise<SeoMetaTag[]> {
128
132
  const metaTags: SeoMetaTag[] = []
129
133
  const metas = head.querySelectorAll('meta')
130
134
 
@@ -136,7 +140,11 @@ function extractMetaTags(
136
140
  // Skip meta tags without content or without name/property
137
141
  if (!content || (!name && !property)) continue
138
142
 
139
- const sourceInfo = findElementSourceLocation(meta, html, sourcePath)
143
+ // Try to find source location in actual source files
144
+ const sourceLocation = await findSeoSource('meta', { name: name || undefined, property: property || undefined, content })
145
+
146
+ // Fall back to rendered HTML location if source not found
147
+ const sourceInfo = sourceLocation || findElementSourceLocation(meta, html, sourcePath)
140
148
 
141
149
  metaTags.push({
142
150
  name: name || undefined,
@@ -150,7 +158,7 @@ function extractMetaTags(
150
158
  }
151
159
 
152
160
  /**
153
- * Categorize meta tags into description, keywords, Open Graph and Twitter Card
161
+ * Categorize meta tags into description, keywords, robots, Open Graph and Twitter Card
154
162
  */
155
163
  function categorizeMetaTags(metaTags: SeoMetaTag[], seo: PageSeoData): void {
156
164
  const openGraph: OpenGraphData = {}
@@ -175,6 +183,16 @@ function categorizeMetaTags(metaTags: SeoMetaTag[], seo: PageSeoData): void {
175
183
  continue
176
184
  }
177
185
 
186
+ // Robots
187
+ if (name === 'robots') {
188
+ const directives = content.split(',').map(d => d.trim().toLowerCase()).filter(Boolean)
189
+ seo.robots = {
190
+ ...meta,
191
+ directives,
192
+ } as RobotsDirective
193
+ continue
194
+ }
195
+
178
196
  // Open Graph tags
179
197
  if (property?.startsWith('og:')) {
180
198
  const ogKey = property.replace('og:', '')
@@ -238,18 +256,22 @@ function categorizeMetaTags(metaTags: SeoMetaTag[], seo: PageSeoData): void {
238
256
  /**
239
257
  * Extract canonical URL from head
240
258
  */
241
- function extractCanonical(
259
+ async function extractCanonical(
242
260
  head: HTMLNode,
243
261
  html: string,
244
262
  sourcePath?: string,
245
- ): CanonicalUrl | undefined {
263
+ ): Promise<CanonicalUrl | undefined> {
246
264
  const canonical = head.querySelector('link[rel="canonical"]')
247
265
  if (!canonical) return undefined
248
266
 
249
267
  const href = canonical.getAttribute('href')
250
268
  if (!href) return undefined
251
269
 
252
- const sourceInfo = findElementSourceLocation(canonical, html, sourcePath)
270
+ // Try to find source location in actual source files
271
+ const sourceLocation = await findSeoSource('canonical', { href })
272
+
273
+ // Fall back to rendered HTML location if source not found
274
+ const sourceInfo = sourceLocation || findElementSourceLocation(canonical, html, sourcePath)
253
275
 
254
276
  return {
255
277
  href,
@@ -260,11 +282,11 @@ function extractCanonical(
260
282
  /**
261
283
  * Extract JSON-LD structured data from script tags
262
284
  */
263
- function extractJsonLd(
285
+ async function extractJsonLd(
264
286
  head: HTMLNode,
265
287
  html: string,
266
288
  sourcePath?: string,
267
- ): JsonLdEntry[] {
289
+ ): Promise<JsonLdEntry[]> {
268
290
  const entries: JsonLdEntry[] = []
269
291
 
270
292
  // Also check body for JSON-LD scripts (some sites place them there)
@@ -279,7 +301,11 @@ function extractJsonLd(
279
301
  const data = JSON.parse(content)
280
302
  const type = data['@type'] || 'Unknown'
281
303
 
282
- const sourceInfo = findElementSourceLocation(script, html, sourcePath)
304
+ // Try to find source location in actual source files
305
+ const sourceLocation = await findSeoSource('jsonld', { jsonLdType: type })
306
+
307
+ // Fall back to rendered HTML location if source not found
308
+ const sourceInfo = sourceLocation || findElementSourceLocation(script, html, sourcePath)
283
309
 
284
310
  entries.push({
285
311
  type,
@@ -287,6 +313,7 @@ function extractJsonLd(
287
313
  ...sourceInfo,
288
314
  })
289
315
  } catch {
316
+ // Skip malformed JSON-LD
290
317
  }
291
318
  }
292
319
 
@@ -294,7 +321,8 @@ function extractJsonLd(
294
321
  }
295
322
 
296
323
  /**
297
- * Find the source location (line number and snippet) for an element in the HTML
324
+ * Find the source location (line number and snippet) for an element in the rendered HTML.
325
+ * This is a fallback when the actual source file location cannot be found.
298
326
  */
299
327
  function findElementSourceLocation(
300
328
  element: HTMLNode,
package/src/types.ts CHANGED
@@ -392,6 +392,14 @@ export interface SeoKeywords extends SeoSourceInfo {
392
392
  keywords: string[]
393
393
  }
394
394
 
395
+ /** Robots meta directive */
396
+ export interface RobotsDirective extends SeoSourceInfo {
397
+ /** Raw content value */
398
+ content: string
399
+ /** Parsed individual directives (e.g., ['noindex', 'nofollow']) */
400
+ directives: string[]
401
+ }
402
+
395
403
  /** Complete SEO data for a page */
396
404
  export interface PageSeoData {
397
405
  /** Page title */
@@ -402,6 +410,8 @@ export interface PageSeoData {
402
410
  keywords?: SeoKeywords
403
411
  /** Canonical URL */
404
412
  canonical?: CanonicalUrl
413
+ /** Robots meta directive */
414
+ robots?: RobotsDirective
405
415
  /** Open Graph metadata */
406
416
  openGraph?: OpenGraphData
407
417
  /** Twitter Card metadata */