UNPKG

@dev-build-deploy/comment-it

Version:
85 lines (84 loc) 3.2 kB
"use strict"; /* 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; }