From c670f8d87ef85b0f395c5dcb3e55db9162b84fef Mon Sep 17 00:00:00 2001 From: Josh Lubawy Date: Wed, 17 Jan 2024 22:44:16 -0800 Subject: [PATCH] Use trace file to find routes --- .../src/builders/url-set-builder.ts | 1 + packages/next-sitemap/src/interface.ts | 6 ++++++ .../next-sitemap/src/parsers/manifest-parser.ts | 5 +++++ packages/next-sitemap/src/utils/file.ts | 17 ++++++++++++++++- packages/next-sitemap/src/utils/path.ts | 1 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/next-sitemap/src/builders/url-set-builder.ts b/packages/next-sitemap/src/builders/url-set-builder.ts index d870dc41..3436d44d 100644 --- a/packages/next-sitemap/src/builders/url-set-builder.ts +++ b/packages/next-sitemap/src/builders/url-set-builder.ts @@ -74,6 +74,7 @@ export class UrlSetBuilder { ? Object.keys(this.manifest?.preRender?.routes ?? {}) : []), ...(this.manifest?.staticExportPages ?? []), + ...(this.manifest?.trace?.filter(e => !!e.tags.path).map(e => e.tags.path!) ?? []), ] // Filter out next.js internal urls and generate urls based on sitemap diff --git a/packages/next-sitemap/src/interface.ts b/packages/next-sitemap/src/interface.ts index 403ad1be..fe8422f5 100644 --- a/packages/next-sitemap/src/interface.ts +++ b/packages/next-sitemap/src/interface.ts @@ -208,6 +208,11 @@ export interface INextManifest { preRender?: IPreRenderManifest routes?: IRoutesManifest staticExportPages?: string[] + trace?: INextTrace[] +} + +export interface INextTrace { + tags: { path?: string } } /** @@ -236,6 +241,7 @@ export interface IRuntimePaths { SITEMAP_INDEX_FILE?: string SITEMAP_INDEX_URL?: string STATIC_EXPORT_ROOT: string + TRACE: string } export type IAlternateRef = { diff --git a/packages/next-sitemap/src/parsers/manifest-parser.ts b/packages/next-sitemap/src/parsers/manifest-parser.ts index 375b8975..a2661ae6 100644 --- a/packages/next-sitemap/src/parsers/manifest-parser.ts +++ b/packages/next-sitemap/src/parsers/manifest-parser.ts @@ -6,6 +6,7 @@ import type { IRuntimePaths, IRoutesManifest, IConfig, + INextTrace, } from '../interface.js' import { Logger } from '../logger.js' import { loadJSON } from '../utils/file.js' @@ -70,11 +71,15 @@ export class ManifestParser { this.runtimePaths.STATIC_EXPORT_ROOT, ) + // Load trace + const trace = await loadJSON(this.runtimePaths.TRACE, true) + return { build: buildManifest ?? ({} as any), preRender: preRenderManifest, routes: routesManifest, staticExportPages, + trace, } } } diff --git a/packages/next-sitemap/src/utils/file.ts b/packages/next-sitemap/src/utils/file.ts index 186478c2..7dbf173d 100644 --- a/packages/next-sitemap/src/utils/file.ts +++ b/packages/next-sitemap/src/utils/file.ts @@ -7,7 +7,10 @@ import path from 'node:path' * @param throwError * @returns */ -export const loadJSON = async (path: string): Promise => { +export const loadJSON = async ( + path: string, + lineDelimited: boolean = false, +): Promise => { // Get path stat const stat = await fs.stat(path).catch(() => { return { @@ -22,6 +25,18 @@ export const loadJSON = async (path: string): Promise => { const jsonString = await fs.readFile(path, { encoding: 'utf-8' }) + if (lineDelimited) { + const jsonLines = jsonString.split('\n') + return jsonLines + .map((line) => { + if (line.trim().length === 0) { + return [] + } + return JSON.parse(line) + }) + .reduce((accumulator, value) => accumulator.concat(value), []) + } + return JSON.parse(jsonString) } diff --git a/packages/next-sitemap/src/utils/path.ts b/packages/next-sitemap/src/utils/path.ts index f9099713..5610ebd5 100644 --- a/packages/next-sitemap/src/utils/path.ts +++ b/packages/next-sitemap/src/utils/path.ts @@ -45,6 +45,7 @@ export const getRuntimePaths = (config: IConfig): IRuntimePaths => { STATIC_EXPORT_ROOT: getPath(config.outDir!), SITEMAP_INDEX_URL, SITEMAP_INDEX_FILE, + TRACE: getPath(config.sourceDir!, 'trace'), } }