fix(engine): support nested recursive.data.js in data cascade

This commit is contained in:
Thomas Allmer
2022-06-21 20:10:36 +02:00
parent 22be8d52a0
commit 252e4ea60e
14 changed files with 125 additions and 2 deletions

View File

@@ -167,7 +167,7 @@ export class RocketHeader {
const fileDir = path.dirname(this.sourceFilePath);
if (existsSync(thisAndSubDirsFilePath)) {
const rel = path.relative(fileDir, thisAndSubDirsFilePath);
dataFiles.push({
dataFiles.unshift({
filePath: thisAndSubDirsFilePath,
exportModuleName: rel.startsWith('.') ? rel : `./${rel}`,
});

View File

@@ -229,7 +229,7 @@ describe('Engine Data Cascade', () => {
it('06: `local.data.js` overwrites data from `recursive.data.js`', async () => {
const { build, readSource, writeSource } = await setupTestEngine(
'fixtures/01-data-cascade/06-local-overwrite/docs',
'fixtures/01-data-cascade/06-overwrite-local/docs',
);
await writeSource(
'index.rocket.js',
@@ -285,6 +285,66 @@ describe('Engine Data Cascade', () => {
);
});
it('06b: nested `recursive.data.js` overwrites data from `recursive.data.js`', async () => {
const { build, readSource, writeSource } = await setupTestEngine(
'fixtures/01-data-cascade/06b-overwrite-recursive/docs',
);
await writeSource(
'index.rocket.js',
"import { html } from 'lit';\nexport default () => html`index`;",
);
await writeSource(
'components/index.rocket.js',
"import { html } from 'lit';\nexport default () => html`components/index`;",
);
await writeSource(
'components/tabs.rocket.js',
"import { html } from 'lit';\nexport default () => html`components/tabs`;",
);
await build();
expect(readSource('index.rocket.js')).to.equal(
[
`/* START - Rocket auto generated - do not touch */`,
"export const sourceRelativeFilePath = 'index.rocket.js';",
"import { fromRoot, overwriteMe } from './recursive.data.js';",
'export { fromRoot, overwriteMe };',
`/* END - Rocket auto generated - do not touch */`,
'',
"import { html } from 'lit';",
'export default () => html`index`;',
].join('\n'),
);
expect(readSource('components/index.rocket.js')).to.equal(
[
'/* START - Rocket auto generated - do not touch */',
"export const sourceRelativeFilePath = 'components/index.rocket.js';",
"import { fromRoot } from '../recursive.data.js';",
"import { overwriteMe } from './recursive.data.js';",
'export { fromRoot, overwriteMe };',
'/* END - Rocket auto generated - do not touch */',
'',
"import { html } from 'lit';",
'export default () => html`components/index`;',
].join('\n'),
);
expect(readSource('components/tabs.rocket.js')).to.equal(
[
'/* START - Rocket auto generated - do not touch */',
"export const sourceRelativeFilePath = 'components/tabs.rocket.js';",
"import { fromRoot } from '../recursive.data.js';",
"import { overwriteMe } from './recursive.data.js';",
'export { fromRoot, overwriteMe };',
'/* END - Rocket auto generated - do not touch */',
'',
"import { html } from 'lit';",
'export default () => html`components/tabs`;',
].join('\n'),
);
});
it('07: injects a header into the markdown source file', async () => {
const { build, readSource, writeSource } = await setupTestEngine(
'fixtures/01-data-cascade/07-markdown/docs',

View File

@@ -0,0 +1,9 @@
/* START - Rocket auto generated - do not touch */
export const sourceRelativeFilePath = 'components/index.rocket.js';
import { fromRoot } from '../recursive.data.js';
import { overwriteMe } from './recursive.data.js';
export { fromRoot, overwriteMe };
/* END - Rocket auto generated - do not touch */
import { html } from 'lit';
export default () => html`components/index`;

View File

@@ -0,0 +1 @@
export const overwriteMe = false;

View File

@@ -0,0 +1,9 @@
/* START - Rocket auto generated - do not touch */
export const sourceRelativeFilePath = 'components/tabs.rocket.js';
import { fromRoot } from '../recursive.data.js';
import { overwriteMe } from './recursive.data.js';
export { fromRoot, overwriteMe };
/* END - Rocket auto generated - do not touch */
import { html } from 'lit';
export default () => html`components/tabs`;

View File

@@ -0,0 +1,8 @@
/* START - Rocket auto generated - do not touch */
export const sourceRelativeFilePath = 'index.rocket.js';
import { fromRoot, overwriteMe } from './recursive.data.js';
export { fromRoot, overwriteMe };
/* END - Rocket auto generated - do not touch */
import { html } from 'lit';
export default () => html`index`;

View File

@@ -0,0 +1,34 @@
{
"name": "index.rocket.js",
"menuLinkText": "index.rocket.js",
"url": "/",
"outputRelativeFilePath": "index.html",
"sourceRelativeFilePath": "index.rocket.js",
"level": 0,
"fromRoot": true,
"overwriteMe": true,
"children": [
{
"name": "components/index.rocket.js",
"menuLinkText": "components/index.rocket.js",
"url": "/components/",
"outputRelativeFilePath": "components/index.html",
"sourceRelativeFilePath": "components/index.rocket.js",
"level": 1,
"fromRoot": true,
"overwriteMe": false,
"children": [
{
"name": "components/tabs.rocket.js",
"menuLinkText": "components/tabs.rocket.js",
"url": "/components/tabs/",
"outputRelativeFilePath": "components/tabs/index.html",
"sourceRelativeFilePath": "components/tabs.rocket.js",
"level": 2,
"fromRoot": true,
"overwriteMe": false
}
]
}
]
}

View File

@@ -0,0 +1,2 @@
export const fromRoot = true;
export const overwriteMe = true;