@growth-labs/seo 0.2.0 → 0.2.1

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":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAmB,KAAK,UAAU,EAA6B,MAAM,cAAc,CAAA;AAiB1F,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,GAAG,gBAAgB,CAyPrE;AAeD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC1D,mBAAmB,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAmB,KAAK,UAAU,EAA6B,MAAM,cAAc,CAAA;AAW1F,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,GAAG,gBAAgB,CA0NrE;AAeD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC1D,mBAAmB,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,11 +1,10 @@
1
- import { mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
1
+ import { readdirSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { resolveAeoTwins, validatedSeoOptionsSchema } from './options.js';
5
5
  import { _setConfig, _setContentProvider } from './state.js';
6
- import { emitAeoTwins } from './utils/aeo-twin-emitter.js';
7
6
  import { SITEMAP_INDEX_PATH } from './utils/sitemap.js';
8
- import { validateHreflangReciprocity, validateJsonLd, validatePage, validatePrerenderedGatedRoutes, } from './utils/validation.js';
7
+ import { validateJsonLd, validatePage, validatePrerenderedGatedRoutes } from './utils/validation.js';
9
8
  import { growthLabsSeoPlugin } from './vite-plugin.js';
10
9
  function resolveEntrypoint(path) {
11
10
  const ext = typeof import.meta.url === 'string' && import.meta.url.endsWith('.ts') ? '.ts' : '.js';
@@ -120,61 +119,42 @@ export default function seo(userOptions) {
120
119
  prerender: false,
121
120
  });
122
121
  }
122
+ // ─── AEO twin emission (static + both modes) ───
123
+ // Injected as a prerender route so contentProvider runs inside Astro's
124
+ // build pipeline. Raw-Node astro:build:done couldn't resolve Vite-virtual
125
+ // imports like `astro:content` that consumers commonly use in their
126
+ // contentProvider implementations.
127
+ if (aeo && aeo.mode !== 'middleware') {
128
+ injectRoute({
129
+ pattern: '/[...aeoPath].md',
130
+ entrypoint: resolveEntrypoint('./routes/aeo-twin'),
131
+ });
132
+ }
123
133
  },
124
134
  'astro:build:done': async ({ dir, pages, logger }) => {
125
135
  const outDir = fileURLToPath(dir);
126
136
  const contentProvider = userOptions.contentProvider;
127
137
  // ─── Build-time prerender-gated guard (test 32) ───
138
+ // Note: we try to load items here to check the guard, but this is
139
+ // best-effort. If contentProvider uses astro:content or other Vite
140
+ // virtuals, it will fail at raw-Node import time and we skip silently.
141
+ // The guard is a defence-in-depth check; the primary guarantee comes
142
+ // from the consumer-set `export const prerender = false` on gated routes.
128
143
  if (contentProvider && options.flexibleSampling?.enabled) {
129
- let items = [];
130
144
  try {
131
- items = await contentProvider({ type: 'articles' }, {});
132
- }
133
- catch (err) {
134
- logger.warn(`Could not run contentProvider for prerender-guard validation: ${err instanceof Error ? err.message : String(err)}`);
135
- }
136
- // Astro's `pages` array contains { pathname } entries for prerendered pages.
137
- const prerenderedUrls = new Set(pages.map((p) => `/${p.pathname}`.replace(/\/+/g, '/')));
138
- const issues = validatePrerenderedGatedRoutes({ prerenderedUrls, items });
139
- if (issues.length > 0) {
140
- for (const issue of issues)
141
- logger.error(issue.message);
142
- throw new Error(`[@growth-labs/seo] ${issues.length} prerendered route(s) serve members-gated items. See errors above.`);
143
- }
144
- }
145
- // ─── Emit static twins (static or both mode) ───
146
- if (aeo && aeo.mode !== 'middleware' && contentProvider) {
147
- let items = [];
148
- try {
149
- items = await contentProvider({ type: 'articles' }, {});
150
- }
151
- catch (err) {
152
- logger.warn(`Could not run contentProvider for twin emission: ${err instanceof Error ? err.message : String(err)}`);
153
- }
154
- if (items.length > 0) {
155
- const result = await emitAeoTwins({
156
- items,
157
- publisherName: options.organization.name,
158
- schemaType: options.schemaType,
159
- renderBody: (item) => item.description ?? '',
160
- twinUrl: aeo.twinUrl,
161
- include: aeo.include,
162
- summaryTwin: aeo.summaryTwin,
163
- ragChunkMarkers: aeo.ragChunkMarkers,
164
- stalenessCheck: aeo.stalenessCheck,
165
- onSummaryMinimalFallback: (item) => logger.warn(`AEO summary fell back to tier 4 (description-only) for ${item.url}. Set item.summary to improve.`),
166
- });
167
- for (const twin of result.twins) {
168
- const path = join(outDir, twin.urlPath.replace(/^\//, ''));
169
- mkdirSync(dirname(path), { recursive: true });
170
- writeFileSync(path, twin.content);
145
+ const items = await contentProvider({ type: 'articles' }, {});
146
+ const prerenderedUrls = new Set(pages.map((p) => `/${p.pathname}`.replace(/\/+/g, '/')));
147
+ const issues = validatePrerenderedGatedRoutes({ prerenderedUrls, items });
148
+ if (issues.length > 0) {
149
+ for (const issue of issues)
150
+ logger.error(issue.message);
151
+ throw new Error(`[@growth-labs/seo] ${issues.length} prerendered route(s) serve members-gated items. See errors above.`);
171
152
  }
172
- logger.info(`AEO twin emission: wrote ${result.twins.length} files (${result.skipped} items skipped by access/include filters)`);
173
153
  }
174
- // Hreflang reciprocity check is relevant whenever items are loaded.
175
- const hreflangIssues = validateHreflangReciprocity(items);
176
- for (const issue of hreflangIssues) {
177
- logger.warn(`Hreflang reciprocity: ${issue.url} declares ${issue.missingReciprocal.lang} -> ${issue.missingReciprocal.from} but no back-reference found.`);
154
+ catch (err) {
155
+ // Don't fail the build if the provider can't run from Node context —
156
+ // the injected prerender route handles the primary emission path.
157
+ logger.info(`Skipped prerender-gated-content guard (contentProvider not Node-ESM-safe): ${err instanceof Error ? err.message : String(err)}`);
178
158
  }
179
159
  }
180
160
  // ─── Legacy per-page validation ───
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { APIRoute, GetStaticPaths } from 'astro';
2
+ export declare const prerender = true;
3
+ export declare const getStaticPaths: GetStaticPaths;
4
+ export declare const GET: APIRoute;
5
+ //# sourceMappingURL=aeo-twin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aeo-twin.d.ts","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAUrD,eAAO,MAAM,SAAS,OAAO,CAAA;AAqB7B,eAAO,MAAM,cAAc,EAAE,cAwE5B,CAAA;AAED,eAAO,MAAM,GAAG,EAAE,QAUjB,CAAA"}
@@ -0,0 +1,108 @@
1
+ // Dynamic prerender route that emits AEO markdown twins at build time.
2
+ //
3
+ // This replaces the previous `astro:build:done` filesystem-write approach. The
4
+ // problem with that approach: integration hooks run in raw Node ESM, where
5
+ // Vite-virtual imports like `astro:content` can't resolve. Consumers whose
6
+ // `contentProvider` transitively imported `astro:content` saw zero twin files
7
+ // emitted. Reference: https://github.com/withastro/astro/issues/...
8
+ //
9
+ // getStaticPaths runs INSIDE Astro's build pipeline, so Vite resolves virtual
10
+ // modules correctly. The route produces one prerendered file per twin URL:
11
+ // primary at `/article/midway.md` and, when enabled, summary at
12
+ // `/article/midway.md.summary.md`.
13
+ import { resolveAeoTwins } from '../options.js';
14
+ import { getConfig, getContentProvider } from '../state.js';
15
+ import { estimateTokenCount, generateAeoMarkdown } from '../utils/aeo.js';
16
+ import { generateSummaryTwin } from '../utils/aeo-summary.js';
17
+ import { forMarkdownTwin } from '../utils/content-filter.js';
18
+ import { computeContentHash } from '../utils/staleness.js';
19
+ // Prerender these URLs at build time so they're served as static files.
20
+ export const prerender = true;
21
+ function defaultTwin(url) {
22
+ return `${url.replace(/\/+$/, '')}.md`;
23
+ }
24
+ function stripOrigin(url) {
25
+ try {
26
+ return new URL(url).pathname;
27
+ }
28
+ catch {
29
+ return url.startsWith('/') ? url : `/${url}`;
30
+ }
31
+ }
32
+ export const getStaticPaths = async () => {
33
+ const config = getConfig();
34
+ const contentProvider = getContentProvider();
35
+ const aeo = resolveAeoTwins(config.aeoTwins);
36
+ // Emit twins for static + both modes; middleware mode serves on-demand.
37
+ if (!aeo || aeo.mode === 'middleware' || !contentProvider)
38
+ return [];
39
+ let items;
40
+ try {
41
+ // contentProvider resolves here because this function runs inside Astro's
42
+ // build pipeline — `astro:content` and other Vite virtual modules work.
43
+ items = await contentProvider({ type: 'articles' }, {});
44
+ }
45
+ catch {
46
+ // Don't fail the build; log nothing here because astro's getStaticPaths
47
+ // swallows console output. The consumer sees "zero paths emitted" which
48
+ // is the right signal to inspect their contentProvider.
49
+ return [];
50
+ }
51
+ const filtered = forMarkdownTwin(items).filter(aeo.include ?? (() => true));
52
+ const twinUrl = aeo.twinUrl ?? defaultTwin;
53
+ const emitSummary = aeo.summaryTwin !== false;
54
+ const ragMarkers = aeo.ragChunkMarkers !== false;
55
+ const stalenessMode = aeo.stalenessCheck ?? 'content-hash';
56
+ const paths = [];
57
+ for (const item of filtered) {
58
+ const primaryUrl = twinUrl(item.url);
59
+ const primaryPath = stripOrigin(primaryUrl).replace(/^\//, '');
60
+ const body = item.description ?? '';
61
+ const contentHash = stalenessMode === 'content-hash' ? await computeContentHash(item, body) : undefined;
62
+ const summaryUrl = emitSummary ? `${primaryUrl}.summary.md` : undefined;
63
+ // Primary twin.
64
+ paths.push({
65
+ params: { aeoPath: primaryPath.replace(/\.md$/, '') },
66
+ props: {
67
+ body: generateAeoMarkdown(item, {
68
+ publisherName: config.organization.name,
69
+ schemaType: config.schemaType,
70
+ content: body,
71
+ ragChunkMarkers: ragMarkers,
72
+ canonical: item.url,
73
+ twinUrl: primaryUrl,
74
+ summaryUrl,
75
+ contentHash,
76
+ }),
77
+ kind: 'primary',
78
+ },
79
+ });
80
+ // Summary twin.
81
+ if (emitSummary && summaryUrl) {
82
+ const summaryPath = stripOrigin(summaryUrl).replace(/^\//, '').replace(/\.md$/, '');
83
+ const summary = generateSummaryTwin(item, {
84
+ publisherName: config.organization.name,
85
+ schemaType: config.schemaType,
86
+ content: body,
87
+ fullUrl: primaryUrl,
88
+ });
89
+ paths.push({
90
+ params: { aeoPath: summaryPath },
91
+ props: { body: summary.markdown, kind: 'summary' },
92
+ });
93
+ }
94
+ }
95
+ return paths;
96
+ };
97
+ export const GET = async ({ props }) => {
98
+ const { body } = props;
99
+ const tokenCount = estimateTokenCount(body);
100
+ return new Response(body, {
101
+ headers: {
102
+ 'Content-Type': 'text/markdown; charset=utf-8',
103
+ 'X-Robots-Tag': 'noindex',
104
+ 'x-markdown-tokens': String(tokenCount),
105
+ },
106
+ });
107
+ };
108
+ //# sourceMappingURL=aeo-twin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aeo-twin.js","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/seo",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {