@dev-build-deploy/comment-it
Version:
Source File Comment Management Library
85 lines (84 loc) • 3.2 kB
JavaScript
;
/*
SPDX-FileCopyrightText: 2023 Kevin de Jong <monkaii@hotmail.com>
SPDX-License-Identifier: MIT
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLanguageToken = getLanguageToken;
exports.getLanguage = getLanguage;
exports.addLanguage = addLanguage;
exports.isSupported = isSupported;
const path_1 = __importDefault(require("path"));
const micromatch_1 = __importDefault(require("micromatch"));
const languages_json_1 = require("./languages/languages.json");
const LANGUAGES = languages_json_1.languages;
/**
* Returns the languages that match the provided file
* @param file The file to match against
* @returns The languages that match the provided file
* split into filename and extension matches
*/
function getLanguageMatches(file) {
const extension = path_1.default.extname(file);
const filenameMatches = LANGUAGES.filter(language => language.filenames != undefined && micromatch_1.default.isMatch(file, language.filenames, { dot: true }));
const extensionMatches = LANGUAGES.filter(language => language.extensions?.includes(extension));
return [filenameMatches, extensionMatches];
}
/**
* Determines the Language configuration for the provided file and returns the language tokens
* @param file The file to determine the language for
* @returns The language tokens
* @internal
*/
function getLanguageToken(language) {
return {
singleline: language.singleline,
multilineStart: language.multiline?.start,
multilinePrefixes: language.multiline?.prefixes,
multilineEnd: language.multiline?.end,
singleQuote: language.singleQuote ? "'" : undefined,
doubleQuote: language.doubleQuote ? '"' : undefined,
backtick: language.backtick ? "`" : undefined,
};
}
/**
* Retrieve the language configuration for the provided file.
* NOTE: Filename matches have precedence over extension matches.
* @param file The file to retrieve the language for
* @returns The language configuration
*/
function getLanguage(file) {
const [filenameMatches, extensionMatches] = getLanguageMatches(file);
if (filenameMatches.length === 0 && extensionMatches.length === 0)
throw new Error(`Language for file '${file}' not found`);
return filenameMatches.length > 0 ? filenameMatches[0] : extensionMatches[0];
}
/**
* Extends the list of supported languages with the provided language.
* NOTES:
* - Adding any new language including overlapping filenames or extensions,
* will override any previously existing language (incl. defaults).
*
* @param language The language to add
*/
function addLanguage(language) {
LANGUAGES.unshift(language);
}
/**
* Determines if the provided file is supported by comment-it
* @param file The file to check
* @returns Whether the file is supported
*/
function isSupported(file) {
try {
getLanguage(file);
}
catch (error) {
console.error(`Error determining if the file is supported: ${error}`);
return false;
}
return true;
}