prism/gulpfile.js/docs.js

63 lines
1.5 KiB
JavaScript

"use strict";
const { src, dest, series } = require('gulp');
const replace = require('gulp-replace');
const jsdoc = require('gulp-jsdoc3');
const pump = require('pump');
const del = require('del');
const jsDoc = {
config: '../.jsdoc.json',
readme: 'README.md',
files: ['components/prism-core.js'],
junk: ['docs/fonts/Source-Sans-Pro', 'docs/**/Apache-License-2.0.txt']
};
function docsClean() {
return del([
// everything in the docs folder
'docs/**/*',
// except for our CSS overwrites
'!docs/styles',
'!docs/styles/overwrites.css',
]);
}
function docsCreate(cb) {
var config = require(jsDoc.config);
var files = [jsDoc.readme].concat(jsDoc.files);
src(files, { read: false }).pipe(jsdoc(config, cb));
}
function docsAddFavicon(cb) {
return pump([
src('docs/*.html'),
replace(
/\s*<\/head>/,
'\n <link rel="icon" type="image/png" href="/favicon.png"/>$&'
),
dest('docs/')
], cb);
}
function docsRemoveExcessFiles() {
return del(jsDoc.junk);
}
const docs = series(docsClean, docsCreate, docsRemoveExcessFiles, docsAddFavicon);
module.exports = {
docs,
handlers: {
jsdocCommentFound(comment) {
// This is a hack.
// JSDoc doesn't support TS' type import syntax (e.g. `@type {import("./my-file.js").Type}`) and throws an
// error if used. So we just replace the "function" with some literal that JSDoc will interpret as a
// namespace. Not pretty but it works.
comment.comment = comment.comment
.replace(/\bimport\s*\(\s*(?:"(?:[^"\r\n\\]|\\.)*"|'(?:[^'\r\n\\]|\\.)*')\s*\)/g, '__dyn_import__')
}
}
};