@nuasite/cms-marker 0.0.95 → 0.0.97
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/build-processor.d.ts.map +1 -1
- package/dist/types/html-processor.d.ts +6 -0
- package/dist/types/html-processor.d.ts.map +1 -1
- package/dist/types/seo-processor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +13 -0
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/build-processor.ts +114 -1
- package/src/html-processor.ts +1 -1
- package/src/seo-processor.ts +54 -1
- package/src/types.ts +14 -0
package/dist/types/types.d.ts
CHANGED
|
@@ -315,6 +315,17 @@ export interface CanonicalUrl extends SeoSourceInfo {
|
|
|
315
315
|
/** The canonical URL href value */
|
|
316
316
|
href: string;
|
|
317
317
|
}
|
|
318
|
+
/** Favicon link element */
|
|
319
|
+
export interface SeoFavicon extends SeoSourceInfo {
|
|
320
|
+
/** The favicon href value */
|
|
321
|
+
href: string;
|
|
322
|
+
/** The type attribute (e.g. "image/png", "image/svg+xml") */
|
|
323
|
+
type?: string;
|
|
324
|
+
/** The sizes attribute (e.g. "32x32", "16x16") */
|
|
325
|
+
sizes?: string;
|
|
326
|
+
/** The rel value (e.g. "icon", "apple-touch-icon") */
|
|
327
|
+
rel: string;
|
|
328
|
+
}
|
|
318
329
|
/** Page title element with optional CMS ID */
|
|
319
330
|
export interface SeoTitle extends SeoSourceInfo {
|
|
320
331
|
/** Title text content */
|
|
@@ -337,6 +348,8 @@ export interface PageSeoData {
|
|
|
337
348
|
keywords?: SeoKeywords;
|
|
338
349
|
/** Canonical URL */
|
|
339
350
|
canonical?: CanonicalUrl;
|
|
351
|
+
/** Favicons */
|
|
352
|
+
favicons?: SeoFavicon[];
|
|
340
353
|
/** Open Graph metadata */
|
|
341
354
|
openGraph?: OpenGraphData;
|
|
342
355
|
/** 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
package/src/build-processor.ts
CHANGED
|
@@ -4,7 +4,7 @@ import fs from 'node:fs/promises'
|
|
|
4
4
|
import path from 'node:path'
|
|
5
5
|
import { fileURLToPath } from 'node:url'
|
|
6
6
|
import { getProjectRoot } from './config'
|
|
7
|
-
import { processHtml } from './html-processor'
|
|
7
|
+
import { extractComponentName, processHtml } from './html-processor'
|
|
8
8
|
import type { ManifestWriter } from './manifest-writer'
|
|
9
9
|
import {
|
|
10
10
|
clearSourceFinderCache,
|
|
@@ -229,6 +229,119 @@ async function processFile(
|
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
+
// Post-process: detect component roots from resolved entry source paths
|
|
233
|
+
// In production builds, data-astro-source-file is not available so processHtml
|
|
234
|
+
// cannot detect components. We infer them from the resolved sourcePath of entries.
|
|
235
|
+
const componentDirs = config.componentDirs ?? ['src/components']
|
|
236
|
+
const excludeComponentDirs = ['src/pages', 'src/layouts', 'src/layout']
|
|
237
|
+
|
|
238
|
+
if (config.markComponents) {
|
|
239
|
+
// Group entries by their source file (only component files)
|
|
240
|
+
const entriesBySourceFile = new Map<string, string[]>()
|
|
241
|
+
for (const [id, entry] of Object.entries(result.entries)) {
|
|
242
|
+
if (!entry.sourcePath) continue
|
|
243
|
+
const sp = entry.sourcePath
|
|
244
|
+
|
|
245
|
+
const isExcluded = excludeComponentDirs.some(dir => {
|
|
246
|
+
const d = dir.replace(/^\/+|\/+$/g, '')
|
|
247
|
+
return sp.startsWith(d + '/') || sp.includes('/' + d + '/')
|
|
248
|
+
})
|
|
249
|
+
if (isExcluded) continue
|
|
250
|
+
|
|
251
|
+
const isComponent = componentDirs.some(dir => {
|
|
252
|
+
const d = dir.replace(/^\/+|\/+$/g, '')
|
|
253
|
+
return sp.startsWith(d + '/') || sp.includes('/' + d + '/')
|
|
254
|
+
})
|
|
255
|
+
if (!isComponent) continue
|
|
256
|
+
|
|
257
|
+
const existing = entriesBySourceFile.get(sp)
|
|
258
|
+
if (existing) {
|
|
259
|
+
existing.push(id)
|
|
260
|
+
} else {
|
|
261
|
+
entriesBySourceFile.set(sp, [id])
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// For each component source file, find the outermost common ancestor in the DOM
|
|
266
|
+
if (entriesBySourceFile.size > 0) {
|
|
267
|
+
const root = parse(result.html, {
|
|
268
|
+
lowerCaseTagName: false,
|
|
269
|
+
comment: true,
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
for (const [sourceFile, entryIds] of entriesBySourceFile) {
|
|
273
|
+
// Find DOM elements for these entries
|
|
274
|
+
const elements = entryIds
|
|
275
|
+
.map(id => root.querySelector(`[${config.attributeName}="${id}"]`))
|
|
276
|
+
.filter((el): el is NonNullable<typeof el> => el !== null)
|
|
277
|
+
|
|
278
|
+
if (elements.length === 0) continue
|
|
279
|
+
|
|
280
|
+
// Find the lowest common ancestor of all elements
|
|
281
|
+
const getAncestors = (el: ReturnType<typeof root.querySelector>): typeof el[] => {
|
|
282
|
+
const ancestors: typeof el[] = []
|
|
283
|
+
let current = el?.parentNode as typeof el
|
|
284
|
+
while (current) {
|
|
285
|
+
ancestors.unshift(current)
|
|
286
|
+
current = current.parentNode as typeof el
|
|
287
|
+
}
|
|
288
|
+
return ancestors
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const ancestorChains = elements.map(el => getAncestors(el))
|
|
292
|
+
let lca = ancestorChains[0]?.[0]
|
|
293
|
+
if (ancestorChains.length > 1) {
|
|
294
|
+
const minLen = Math.min(...ancestorChains.map(c => c.length))
|
|
295
|
+
let lcaIdx = 0
|
|
296
|
+
for (let i = 0; i < minLen; i++) {
|
|
297
|
+
if (ancestorChains.every(chain => chain[i] === ancestorChains[0]![i])) {
|
|
298
|
+
lcaIdx = i
|
|
299
|
+
} else {
|
|
300
|
+
break
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
lca = ancestorChains[0]![lcaIdx]
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// If the LCA is a text element itself (only one entry from this component),
|
|
307
|
+
// use its parent instead so the component wraps the element
|
|
308
|
+
if (lca && elements.length === 1 && lca === elements[0]) {
|
|
309
|
+
lca = lca.parentNode as typeof lca
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (!lca || !('setAttribute' in lca) || !('getAttribute' in lca)) continue
|
|
313
|
+
// Skip if already marked as a component
|
|
314
|
+
if (lca.getAttribute?.('data-cms-component-id')) continue
|
|
315
|
+
|
|
316
|
+
const compId = idGenerator()
|
|
317
|
+
lca.setAttribute('data-cms-component-id', compId)
|
|
318
|
+
|
|
319
|
+
const componentName = extractComponentName(sourceFile)
|
|
320
|
+
const firstEntry = result.entries[entryIds[0]!]!
|
|
321
|
+
|
|
322
|
+
result.components[compId] = {
|
|
323
|
+
id: compId,
|
|
324
|
+
componentName,
|
|
325
|
+
file: relPath,
|
|
326
|
+
sourcePath: sourceFile,
|
|
327
|
+
sourceLine: firstEntry.sourceLine ?? 1,
|
|
328
|
+
props: {},
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Set parentComponentId on entries
|
|
332
|
+
for (const eid of entryIds) {
|
|
333
|
+
const entry = result.entries[eid]
|
|
334
|
+
if (entry) {
|
|
335
|
+
entry.parentComponentId = compId
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Re-serialize HTML with component markers
|
|
341
|
+
result.html = root.toString()
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
232
345
|
// Remove CMS ID attributes from HTML for entries that were filtered out
|
|
233
346
|
let finalHtml = result.html
|
|
234
347
|
if (idsToRemove.length > 0) {
|
package/src/html-processor.ts
CHANGED
|
@@ -876,7 +876,7 @@ export async function processHtml(
|
|
|
876
876
|
* e.g., "src/components/Welcome.astro" -> "Welcome"
|
|
877
877
|
* e.g., "src/components/ui/Button.astro" -> "Button"
|
|
878
878
|
*/
|
|
879
|
-
function extractComponentName(sourceFile: string): string {
|
|
879
|
+
export function extractComponentName(sourceFile: string): string {
|
|
880
880
|
const parts = sourceFile.split('/')
|
|
881
881
|
const fileName = parts[parts.length - 1] || ''
|
|
882
882
|
return fileName.replace('.astro', '')
|
package/src/seo-processor.ts
CHANGED
|
@@ -3,7 +3,7 @@ import fs from 'node:fs/promises'
|
|
|
3
3
|
import path from 'node:path'
|
|
4
4
|
import { getProjectRoot } from './config'
|
|
5
5
|
import { findSourceLocation } from './source-finder/source-lookup'
|
|
6
|
-
import type { CanonicalUrl, JsonLdEntry, OpenGraphData, PageSeoData, SeoKeywords, SeoMetaTag, SeoTitle, TwitterCardData } from './types'
|
|
6
|
+
import type { CanonicalUrl, JsonLdEntry, OpenGraphData, PageSeoData, SeoFavicon, SeoKeywords, SeoMetaTag, SeoTitle, TwitterCardData } from './types'
|
|
7
7
|
|
|
8
8
|
/** Type for parsed HTML element nodes from node-html-parser */
|
|
9
9
|
type HTMLNode = ParsedHTMLElement
|
|
@@ -70,6 +70,12 @@ export async function processSeoFromHtml(
|
|
|
70
70
|
seo.canonical = canonical
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
// Extract favicons
|
|
74
|
+
const favicons = await extractFavicons(head, html, sourcePath, getNextId)
|
|
75
|
+
if (favicons.length > 0) {
|
|
76
|
+
seo.favicons = favicons
|
|
77
|
+
}
|
|
78
|
+
|
|
73
79
|
// Extract JSON-LD
|
|
74
80
|
if (parseJsonLd) {
|
|
75
81
|
const jsonLdEntries = await extractJsonLd(head, html, sourcePath, getNextId)
|
|
@@ -311,6 +317,53 @@ async function extractCanonical(
|
|
|
311
317
|
}
|
|
312
318
|
}
|
|
313
319
|
|
|
320
|
+
/**
|
|
321
|
+
* Extract favicon link elements from head
|
|
322
|
+
*/
|
|
323
|
+
async function extractFavicons(
|
|
324
|
+
head: HTMLNode,
|
|
325
|
+
html: string,
|
|
326
|
+
sourcePath?: string,
|
|
327
|
+
getNextId?: () => string,
|
|
328
|
+
): Promise<SeoFavicon[]> {
|
|
329
|
+
const favicons: SeoFavicon[] = []
|
|
330
|
+
const links = head.querySelectorAll('link')
|
|
331
|
+
|
|
332
|
+
for (const link of links) {
|
|
333
|
+
const rel = link.getAttribute('rel')?.toLowerCase()
|
|
334
|
+
if (!rel || !['icon', 'shortcut icon', 'apple-touch-icon', 'apple-touch-icon-precomposed'].includes(rel)) continue
|
|
335
|
+
|
|
336
|
+
const href = link.getAttribute('href')
|
|
337
|
+
if (!href) continue
|
|
338
|
+
|
|
339
|
+
const sourceLocation = await findSourceLocation(href, 'link')
|
|
340
|
+
const sourceInfo = sourceLocation
|
|
341
|
+
? {
|
|
342
|
+
sourcePath: sourceLocation.file,
|
|
343
|
+
sourceLine: sourceLocation.line,
|
|
344
|
+
sourceSnippet: sourceLocation.snippet || '',
|
|
345
|
+
}
|
|
346
|
+
: findElementSourceLocation(link, html, sourcePath)
|
|
347
|
+
|
|
348
|
+
let id: string | undefined
|
|
349
|
+
if (getNextId) {
|
|
350
|
+
id = getNextId()
|
|
351
|
+
link.setAttribute('data-cms-id', id)
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
favicons.push({
|
|
355
|
+
id,
|
|
356
|
+
href,
|
|
357
|
+
rel,
|
|
358
|
+
type: link.getAttribute('type') || undefined,
|
|
359
|
+
sizes: link.getAttribute('sizes') || undefined,
|
|
360
|
+
...sourceInfo,
|
|
361
|
+
})
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return favicons
|
|
365
|
+
}
|
|
366
|
+
|
|
314
367
|
/**
|
|
315
368
|
* Extract JSON-LD structured data from script tags
|
|
316
369
|
*/
|
package/src/types.ts
CHANGED
|
@@ -352,6 +352,18 @@ export interface CanonicalUrl extends SeoSourceInfo {
|
|
|
352
352
|
href: string
|
|
353
353
|
}
|
|
354
354
|
|
|
355
|
+
/** Favicon link element */
|
|
356
|
+
export interface SeoFavicon extends SeoSourceInfo {
|
|
357
|
+
/** The favicon href value */
|
|
358
|
+
href: string
|
|
359
|
+
/** The type attribute (e.g. "image/png", "image/svg+xml") */
|
|
360
|
+
type?: string
|
|
361
|
+
/** The sizes attribute (e.g. "32x32", "16x16") */
|
|
362
|
+
sizes?: string
|
|
363
|
+
/** The rel value (e.g. "icon", "apple-touch-icon") */
|
|
364
|
+
rel: string
|
|
365
|
+
}
|
|
366
|
+
|
|
355
367
|
/** Page title element with optional CMS ID */
|
|
356
368
|
export interface SeoTitle extends SeoSourceInfo {
|
|
357
369
|
/** Title text content */
|
|
@@ -376,6 +388,8 @@ export interface PageSeoData {
|
|
|
376
388
|
keywords?: SeoKeywords
|
|
377
389
|
/** Canonical URL */
|
|
378
390
|
canonical?: CanonicalUrl
|
|
391
|
+
/** Favicons */
|
|
392
|
+
favicons?: SeoFavicon[]
|
|
379
393
|
/** Open Graph metadata */
|
|
380
394
|
openGraph?: OpenGraphData
|
|
381
395
|
/** Twitter Card metadata */
|