diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 457338bf11612a446d035f9935e171fc39a06507..2128331c5ba77f55f95c0ca3825cd434c67173f6 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -9,6 +9,7 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi === Changed * convert page reference to internal reference for any page included in assembly (#127) +* prioritize export from own component version when adding export to exports array on page (#128) === Fixed diff --git a/packages/assembler/lib/assemble-content.js b/packages/assembler/lib/assemble-content.js index 91bf6f5670d92a30f66a3168ccc4fd55cb694316..2b39c8d8da997d9e8956c378ce9020b0a34349ed 100644 --- a/packages/assembler/lib/assemble-content.js +++ b/packages/assembler/lib/assemble-content.js @@ -103,7 +103,13 @@ async function assembleContent (playbook, contentCatalog, converter, { configSou } pages.forEach((fragment, page) => { const assemblerMeta = (page.assembler ??= {}) - ;(assemblerMeta.exports ??= []).push({ fragment, file }) + const exports = (assemblerMeta.exports ??= []) + const exportEntry = { fragment, file } + const insertIdx = exports.findIndex( + ({ file: candidate }) => + !(candidate.src.component === page.src.component && candidate.src.version === page.src.version) + ) + ~insertIdx ? exports.splice(insertIdx, 0, exportEntry) : exports.push(exportEntry) const extnameProp = extname.slice(1) if (extnameProp in assemblerMeta) return Object.defineProperty(assemblerMeta, extnameProp, { diff --git a/packages/assembler/test/assemble-content-test.js b/packages/assembler/test/assemble-content-test.js index 9867713baf4dc81d74529e940054f57b75438246..9ea01aab224c9fac6acf24142a5d3caf17fe0c0b 100644 --- a/packages/assembler/test/assemble-content-test.js +++ b/packages/assembler/test/assemble-content-test.js @@ -540,6 +540,31 @@ describe('assembleContent()', () => { assert.equal(firstPage.assembler.pdf.file, actualFirstRun[0]) }) + it('should prioritize exports for current component version when storing export on page', async () => { + const scenario = 'insert-pages' + const { playbook, contentCatalog, assemblerConfig: configSource } = await loadScenario(scenario, __dirname) + configSource.build.clean = true + const firstPage = contentCatalog.getPages()[0] + ;(firstPage.assembler = {}).exports = [ + { + file: { + contents: Buffer.from('PDF contents'), + src: { + component: 'other-component', + version: '', + module: 'ROOT', + family: 'export', + relative: 'the-export.pdf', + }, + }, + }, + ] + const actual = await assembleContent(playbook, contentCatalog, convertToPdf, { configSource }) + assert.equal(actual.length, 1) + assert.equal(firstPage.assembler.exports.length, 2) + assert.equal(actual[0], firstPage.assembler.exports[0].file) + }) + it('should use alternative navigation with default profile', async () => { const scenario = 'alternate-nav' const {