From e39e8867d794598f43f0b5f04d990905d90a4fde Mon Sep 17 00:00:00 2001 From: Mohamed Shams El-Deen Date: Fri, 25 Sep 2026 18:09:29 +0300 Subject: [PATCH] feat(legacy-json): make source path configurable --- packages/node-legacy/src/legacy-json-all/generate.mjs | 7 +++++-- packages/node-legacy/src/legacy-json-all/index.mjs | 1 + packages/node-legacy/src/legacy-json-all/types.d.ts | 2 +- packages/node-legacy/src/legacy-json/generate.mjs | 4 +++- packages/node-legacy/src/legacy-json/index.mjs | 1 + packages/node-legacy/src/legacy-json/types.d.ts | 2 +- .../node-legacy/src/legacy-json/utils/buildSection.mjs | 7 ++++--- 7 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/node-legacy/src/legacy-json-all/generate.mjs b/packages/node-legacy/src/legacy-json-all/generate.mjs index 03d3e27e0..66f0710a8 100644 --- a/packages/node-legacy/src/legacy-json-all/generate.mjs +++ b/packages/node-legacy/src/legacy-json-all/generate.mjs @@ -4,6 +4,7 @@ import { writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import getConfig from '@doc-kit/core/utils/configuration/index.mjs'; +import { populate } from '@doc-kit/core/utils/configuration/templates.mjs'; import { legacyToJSON } from '../utils/legacyToJSON.mjs'; @@ -36,8 +37,10 @@ export async function generate(input) { // Create a map of api name to index position for sorting const indexOrder = new Map( - config.index?.map(({ api }, position) => [`doc/api/${api}.md`, position]) ?? - [] + config.index?.map(({ api }, position) => [ + populate(config.sourceURL, { path: `${api}.md` }), + position, + ]) ?? [] ); // Sort input by index order (documents not in index go to the end) diff --git a/packages/node-legacy/src/legacy-json-all/index.mjs b/packages/node-legacy/src/legacy-json-all/index.mjs index 56edde1c5..0cf5fdbc0 100644 --- a/packages/node-legacy/src/legacy-json-all/index.mjs +++ b/packages/node-legacy/src/legacy-json-all/index.mjs @@ -18,6 +18,7 @@ export default { defaultConfiguration: { minify: false, + sourceURL: 'doc/api/{path}', }, generate, diff --git a/packages/node-legacy/src/legacy-json-all/types.d.ts b/packages/node-legacy/src/legacy-json-all/types.d.ts index d95ffd144..33a27c3e9 100644 --- a/packages/node-legacy/src/legacy-json-all/types.d.ts +++ b/packages/node-legacy/src/legacy-json-all/types.d.ts @@ -14,6 +14,6 @@ export interface Output { } export type Generator = GeneratorMetadata< - {}, + { sourceURL: string }, Generate, Promise> >; diff --git a/packages/node-legacy/src/legacy-json/generate.mjs b/packages/node-legacy/src/legacy-json/generate.mjs index 2c8bfe986..331b48d6d 100644 --- a/packages/node-legacy/src/legacy-json/generate.mjs +++ b/packages/node-legacy/src/legacy-json/generate.mjs @@ -22,11 +22,13 @@ const buildSection = createSectionBuilder(); */ export async function processChunk(slicedInput, itemIndices) { const results = []; + const config = getConfig('legacy-json'); + const sourceURL = config.sourceURL; for (const idx of itemIndices) { const { head, nodes } = slicedInput[idx]; - results.push(buildSection(head, nodes)); + results.push(buildSection(head, nodes, sourceURL)); } return results; diff --git a/packages/node-legacy/src/legacy-json/index.mjs b/packages/node-legacy/src/legacy-json/index.mjs index e17b83eb4..2109e7a33 100644 --- a/packages/node-legacy/src/legacy-json/index.mjs +++ b/packages/node-legacy/src/legacy-json/index.mjs @@ -23,6 +23,7 @@ export default { defaultConfiguration: { ref: 'main', minify: false, + sourceURL: 'doc/api/{path}', }, hasParallelProcessor: true, diff --git a/packages/node-legacy/src/legacy-json/types.d.ts b/packages/node-legacy/src/legacy-json/types.d.ts index 2de6e43ad..8888c756b 100644 --- a/packages/node-legacy/src/legacy-json/types.d.ts +++ b/packages/node-legacy/src/legacy-json/types.d.ts @@ -179,7 +179,7 @@ export interface MiscSection extends SectionBase { } export type Generator = GeneratorMetadata< - {}, + { sourceURL: string }, Generate, AsyncGenerator
>, ProcessChunk<{ head: MetadataEntry; nodes: Array }, Section> >; diff --git a/packages/node-legacy/src/legacy-json/utils/buildSection.mjs b/packages/node-legacy/src/legacy-json/utils/buildSection.mjs index 74dbd7aed..0c02d5291 100644 --- a/packages/node-legacy/src/legacy-json/utils/buildSection.mjs +++ b/packages/node-legacy/src/legacy-json/utils/buildSection.mjs @@ -1,4 +1,5 @@ import { enforceArray } from '@doc-kit/core/utils/array.mjs'; +import { populate } from '@doc-kit/core/utils/configuration/templates.mjs'; import { buildHierarchy } from '@doc-kit/core/utils/hierarchy.mjs'; import { getRemarkRehype as remark } from '@doc-kit/core/utils/remark.mjs'; import { parseList } from '@doc-kit/core/utils/signature/parseList.mjs'; @@ -183,14 +184,14 @@ export const createSectionBuilder = () => { * Builds the module section from head metadata and entries. * @param {import('@doc-kit/core/generators/metadata/types').MetadataEntry} head - The head metadata entry. * @param {Array} entries - The list of metadata entries. + * @param {string} sourceURL - The template URL for the generated API source files. * @returns {import('../types.d.ts').ModuleSection} The constructed module section. */ - return (head, entries) => { + return (head, entries, sourceURL) => { const rootModule = { type: 'module', api: head.api, - // TODO(@avivkeller): This should be configurable - source: `doc/api/${head.api}.md`, + source: populate(sourceURL, { path: `${head.api}.md` }), }; buildHierarchy(entries).forEach(node => handleEntry(node, rootModule));