@eaglesong/task-panorama
Version:
Eaglesong task for Panorama
51 lines • 2.14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const createNodeFilter = (tags) => (node) => typeof node === 'object' && (tags.length === 0 || tags.includes(node.tag));
const getRoot = (tree) => tree.find(createNodeFilter(['root']));
const getIncludeRoots = (tree) => { var _a, _b; return (_b = (_a = getRoot(tree)) === null || _a === void 0 ? void 0 : _a.content, (_b !== null && _b !== void 0 ? _b : [])).filter(createNodeFilter(['scripts', 'styles'])); };
exports.preserveIncludesBefore = (tree) => {
getIncludeRoots(tree)
.flatMap(x => x.content)
.filter(createNodeFilter(['include']))
.forEach(node => {
node.tag = 'panorama-include';
});
};
exports.preserveIncludesAfter = tree => {
getIncludeRoots(tree)
.flatMap(x => x.content)
.filter(createNodeFilter(['panorama-include']))
.forEach(node => {
node.tag = 'include';
});
};
exports.validateIncludes = (context) => tree => {
for (const scope of getIncludeRoots(tree)) {
for (const node of scope.content) {
if (typeof node !== 'object')
continue;
if (node.tag !== 'include') {
context.emitError(new Error(`Unexpected tag '${node.tag}'`));
continue;
}
const { src } = node.attrs;
if (src === 'error://')
continue;
if (src == null) {
context.emitError(new Error('<include> tag is missing "src" attribute'));
continue;
}
if (scope.tag === 'styles') {
if (!src.endsWith('.css') && !src.endsWith('.vcss_c')) {
context.emitError(new Error(`Dependency '${src}' has invalid extension`));
}
}
else if (scope.tag === 'scripts') {
if (!src.endsWith('.js') && !src.endsWith('.vjs_c')) {
context.emitError(new Error(`Dependency '${src}' has invalid extension`));
}
}
}
}
};
//# sourceMappingURL=posthtml-plugin-panorama-includes.js.map
;