@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.
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/seo-processor.d.ts +2 -2
- package/dist/types/seo-processor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +9 -0
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +8 -1
- package/src/html-processor.ts +1 -1
- package/src/index.ts +1 -1
- package/src/seo-processor.ts +51 -23
- package/src/types.ts +10 -0
package/dist/types/types.d.ts
CHANGED
|
@@ -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.
|
|
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",
|
package/src/html-processor.ts
CHANGED
|
@@ -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
package/src/seo-processor.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type HTMLElement as ParsedHTMLElement, parse } from 'node-html-parser'
|
|
2
|
-
import
|
|
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
|
-
//
|
|
102
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 */
|