mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-09 19:44:56 +02:00
117 lines
4.6 KiB
JavaScript
117 lines
4.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const tslib_1 = require("tslib");
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
const process_1 = tslib_1.__importDefault(require("process"));
|
|
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
const utils_1 = require("@docusaurus/utils");
|
|
const utils_2 = require("../utils");
|
|
const directiveTypes = [
|
|
'containerDirective',
|
|
'leafDirective',
|
|
'textDirective',
|
|
];
|
|
const directivePrefixMap = {
|
|
textDirective: ':',
|
|
leafDirective: '::',
|
|
containerDirective: ':::',
|
|
};
|
|
function formatDirectiveName(directive) {
|
|
const prefix = directivePrefixMap[directive.type];
|
|
if (!prefix) {
|
|
throw new Error(`unexpected, no prefix found for directive of type ${directive.type}`);
|
|
}
|
|
// To simplify we don't display the eventual label/props of directives
|
|
return `${prefix}${directive.name}`;
|
|
}
|
|
function formatDirectivePosition(directive) {
|
|
return directive.position?.start
|
|
? logger_1.default.interpolate `number=${directive.position.start.line}:number=${directive.position.start.column}`
|
|
: undefined;
|
|
}
|
|
function formatUnusedDirectiveMessage(directive) {
|
|
const name = formatDirectiveName(directive);
|
|
const position = formatDirectivePosition(directive);
|
|
return `- ${name} ${position ? `(${position})` : ''}`;
|
|
}
|
|
function formatUnusedDirectivesMessage({ directives, filePath, }) {
|
|
const supportUrl = 'https://github.com/facebook/docusaurus/pull/9394';
|
|
const customPath = (0, utils_1.posixPath)(path_1.default.relative(process_1.default.cwd(), filePath));
|
|
const warningTitle = logger_1.default.interpolate `Docusaurus found ${directives.length} unused Markdown directives in file path=${customPath}`;
|
|
const customSupportUrl = logger_1.default.interpolate `url=${supportUrl}`;
|
|
const warningMessages = directives
|
|
.map(formatUnusedDirectiveMessage)
|
|
.join('\n');
|
|
return `${warningTitle}
|
|
${warningMessages}
|
|
Your content might render in an unexpected way. Visit ${customSupportUrl} to find out why and how to fix it.`;
|
|
}
|
|
function logUnusedDirectivesWarning({ directives, filePath, }) {
|
|
if (directives.length > 0) {
|
|
const message = formatUnusedDirectivesMessage({
|
|
directives,
|
|
filePath,
|
|
});
|
|
logger_1.default.warn(message);
|
|
}
|
|
}
|
|
function isTextDirective(directive) {
|
|
return directive.type === 'textDirective';
|
|
}
|
|
// A simple text directive is one without any label/props
|
|
function isSimpleTextDirective(directive) {
|
|
if (isTextDirective(directive)) {
|
|
// Attributes in MDAST = Directive props
|
|
const hasAttributes = directive.attributes && Object.keys(directive.attributes).length > 0;
|
|
// Children in MDAST = Directive label
|
|
const hasChildren = directive.children.length > 0;
|
|
return !hasAttributes && !hasChildren;
|
|
}
|
|
return false;
|
|
}
|
|
function transformSimpleTextDirectiveToString(textDirective) {
|
|
(0, utils_2.transformNode)(textDirective, {
|
|
type: 'text',
|
|
value: `:${textDirective.name}`, // We ignore label/props on purpose here
|
|
});
|
|
}
|
|
function isUnusedDirective(directive) {
|
|
// If directive data is set (notably hName/hProperties set by admonitions)
|
|
// this usually means the directive has been handled by another plugin
|
|
return !directive.data;
|
|
}
|
|
const plugin = function plugin() {
|
|
return async (tree, file) => {
|
|
const { visit } = await import('unist-util-visit');
|
|
const unusedDirectives = [];
|
|
visit(tree, directiveTypes, (directive) => {
|
|
// If directive data is set (hName/hProperties set by admonitions)
|
|
// this usually means the directive has been handled by another plugin
|
|
if (isUnusedDirective(directive)) {
|
|
if (isSimpleTextDirective(directive)) {
|
|
transformSimpleTextDirectiveToString(directive);
|
|
}
|
|
else {
|
|
unusedDirectives.push(directive);
|
|
}
|
|
}
|
|
});
|
|
// We only enable these warnings for the client compiler
|
|
// This avoids emitting duplicate warnings in prod mode
|
|
// Note: the client compiler is used in both dev/prod modes
|
|
if (file.data.compilerName === 'client') {
|
|
logUnusedDirectivesWarning({
|
|
directives: unusedDirectives,
|
|
filePath: file.path,
|
|
});
|
|
}
|
|
};
|
|
};
|
|
exports.default = plugin;
|
|
//# sourceMappingURL=index.js.map
|