mirror of openzeppelin-contracts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
openzeppelin-contracts/docs/templates/helpers.js

46 lines
1.4 KiB

const { version } = require('../../package.json');
module.exports['oz-version'] = () => version;
module.exports['readme-path'] = (opts) => {
return 'contracts/' + opts.data.root.id.replace(/\.adoc$/, '') + '/README.adoc';
};
module.exports.names = (params) => params.map(p => p.name).join(', ');
module.exports['typed-params'] = (params) => {
return params.map(p => `${p.type}${p.name ? ' ' + p.name : ''}`).join(', ');
};
const slug = module.exports.slug = (str) => {
if (str === undefined) {
throw new Error('Missing argument');
}
return str.replace(/\W/g, '-');
};
const linksCache = new WeakMap();
function getAllLinks (items) {
if (linksCache.has(items)) {
return linksCache.get(items);
}
const res = {};
linksCache.set(items, res);
for (const item of items) {
res[`xref-${item.anchor}`] = `xref:${item.__item_context.page}#${item.anchor}`;
res[slug(item.fullName)] = `pass:normal[xref:${item.__item_context.page}#${item.anchor}[\`${item.fullName}\`]]`;
}
return res;
}
module.exports['with-prelude'] = (opts) => {
const links = getAllLinks(opts.data.site.items);
const contents = opts.fn();
const neededLinks = contents
.match(/\{[-._a-z0-9]+\}/ig)
.map(m => m.replace(/^\{(.+)\}$/, '$1'))
.filter(k => k in links);
const prelude = neededLinks.map(k => `:${k}: ${links[k]}`).join('\n');
return prelude + '\n' + contents;
};