-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.eleventy.cjs
More file actions
64 lines (58 loc) · 2.81 KB
/
Copy path.eleventy.cjs
File metadata and controls
64 lines (58 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const fs = require('node:fs');
const path = require('node:path');
const QUICKSTART_CONTRACT = require('./docs/quickstart-contract.json');
const QUICKSTART_BASES = QUICKSTART_CONTRACT.reference_resolution?.bases;
const QUICKSTART_SOURCES = Object.freeze(Object.fromEntries(
Object.entries(QUICKSTART_CONTRACT.sources).map(([name, reference]) => {
const base = QUICKSTART_BASES?.[reference.base];
if (reference.kind !== 'composer_package_path'
|| base?.kind !== 'composer_package'
|| base.package_pointer !== '/package'
|| typeof reference.path !== 'string') {
throw new Error(`Invalid package-owned quickstart source reference: ${name}`);
}
return [name, reference.path];
}),
));
function escapeHtml(value) {
return value
.replaceAll('&', '&')
.replaceAll('<', '<')
.replaceAll('>', '>')
.replaceAll('"', '"')
.replaceAll('\n', ' ');
}
module.exports = function configure(eleventyConfig) {
eleventyConfig.addPassthroughCopy({'docs/CNAME': 'CNAME'});
eleventyConfig.addPassthroughCopy({'docs/portal/assets': 'assets'});
eleventyConfig.addPassthroughCopy({'docs/quickstart-contract.json': 'quickstart-contract.json'});
eleventyConfig.addPassthroughCopy({'docs/quickstart-contract.schema.v2.json': 'quickstart-contract.schema.v2.json'});
eleventyConfig.addPassthroughCopy({'.phpdoc/template/analytics': 'analytics'});
eleventyConfig.addPassthroughCopy({'.phpdoc/template/assets': 'assets'});
eleventyConfig.addPassthroughCopy({'build/api': 'api'});
eleventyConfig.addShortcode('sourceFile', function sourceFile(sourceName, language = 'text', label = sourceName) {
const sourcePath = QUICKSTART_SOURCES[sourceName];
if (typeof sourcePath !== 'string') {
throw new Error(`Unknown package-owned quickstart source: ${sourceName}`);
}
const resolved = path.resolve(__dirname, sourcePath);
const examplesDirectory = path.resolve(__dirname, 'examples');
if (!resolved.startsWith(`${examplesDirectory}${path.sep}`)) {
throw new Error(`Quickstart source must stay under ${examplesDirectory}: ${sourcePath}`);
}
const source = fs.readFileSync(resolved, 'utf8').trimEnd();
return `<div class="code-stage" data-quickstart-source="${escapeHtml(sourcePath)}"><div class="code-stage__bar"><span>${escapeHtml(label)}</span><button class="copy-button" type="button">Copy</button></div><pre><code class="language-${escapeHtml(language)}">${escapeHtml(source)}</code></pre></div>`;
});
eleventyConfig.addFilter('absoluteUrl', (url) => new URL(url, 'https://php.durable-workflow.com').toString());
return {
dir: {
input: 'docs/portal',
includes: '_includes',
data: '_data',
output: 'build/site',
},
htmlTemplateEngine: 'njk',
markdownTemplateEngine: 'njk',
templateFormats: ['md', 'njk'],
};
};