UNPKG

lib-tools

Version:

The lib-tools helps you simplify the build, bundle, test and npm packaging workflows for Typescript, JavaScript, Angular library projects and assets module projects.

50 lines 5.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readJsonWithComments = void 0; const fs_1 = require("fs"); function stripComments(content) { /** * First capturing group matches double quoted string * Second matches single quotes string * Third matches block comments * Fourth matches line comments */ const regexp = /("(?:[^\\"]*(?:\\.)?)*")|('(?:[^\\']*(?:\\.)?)*')|(\/\*(?:\r?\n|.)*?\*\/)|(\/{2,}.*?(?:(?:\r?\n)|$))/g; const result = content.replace(regexp, (match, _0, _1, m3, m4) => { // Only one of m1, m2, m3, m4 matches if (m3) { // A block comment. Replace with nothing return ''; } else if (m4) { // A line comment. If it ends in \r?\n then keep it. const length = m4.length; if (length > 2 && m4[length - 1] === '\n') { return m4[length - 2] === '\r' ? '\r\n' : '\n'; } else { return ''; } } else { // We match a string return match; } }); return result; } async function readJsonWithComments(filePath) { const content = await new Promise((resolve, reject) => { fs_1.readFile(filePath, (err, buffer) => { if (err) { reject(err); return; } resolve(buffer); }); }); const contentStr = stripComments(content.toString().replace(/^\uFEFF/, '')); return JSON.parse(contentStr); } exports.readJsonWithComments = readJsonWithComments; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1qc29uLXdpdGgtY29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInV0aWxzL3JlYWQtanNvbi13aXRoLWNvbW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUE4QjtBQUU5QixTQUFTLGFBQWEsQ0FBQyxPQUFlO0lBQ2xDOzs7OztPQUtHO0lBQ0gsTUFBTSxNQUFNLEdBQUcsdUdBQXVHLENBQUM7SUFDdkgsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQUU7UUFDN0UscUNBQXFDO1FBQ3JDLElBQUksRUFBRSxFQUFFO1lBQ0osd0NBQXdDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7YUFBTSxJQUFJLEVBQUUsRUFBRTtZQUNYLG9EQUFvRDtZQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDdkMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDbEQ7aUJBQU07Z0JBQ0gsT0FBTyxFQUFFLENBQUM7YUFDYjtTQUNKO2FBQU07WUFDSCxvQkFBb0I7WUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsUUFBZ0I7SUFDdkQsTUFBTSxPQUFPLEdBQVcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMxRCxhQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxFQUFFO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFWixPQUFPO2FBQ1Y7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQVksQ0FBQztBQUM3QyxDQUFDO0FBaEJELG9EQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnZnMnO1xuXG5mdW5jdGlvbiBzdHJpcENvbW1lbnRzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLyoqXG4gICAgICogRmlyc3QgY2FwdHVyaW5nIGdyb3VwIG1hdGNoZXMgZG91YmxlIHF1b3RlZCBzdHJpbmdcbiAgICAgKiBTZWNvbmQgbWF0Y2hlcyBzaW5nbGUgcXVvdGVzIHN0cmluZ1xuICAgICAqIFRoaXJkIG1hdGNoZXMgYmxvY2sgY29tbWVudHNcbiAgICAgKiBGb3VydGggbWF0Y2hlcyBsaW5lIGNvbW1lbnRzXG4gICAgICovXG4gICAgY29uc3QgcmVnZXhwID0gLyhcIig/OlteXFxcXFwiXSooPzpcXFxcLik/KSpcIil8KCcoPzpbXlxcXFwnXSooPzpcXFxcLik/KSonKXwoXFwvXFwqKD86XFxyP1xcbnwuKSo/XFwqXFwvKXwoXFwvezIsfS4qPyg/Oig/Olxccj9cXG4pfCQpKS9nO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRlbnQucmVwbGFjZShyZWdleHAsIChtYXRjaCwgXzAsIF8xLCBtMzogc3RyaW5nLCBtNDogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgb25lIG9mIG0xLCBtMiwgbTMsIG00IG1hdGNoZXNcbiAgICAgICAgaWYgKG0zKSB7XG4gICAgICAgICAgICAvLyBBIGJsb2NrIGNvbW1lbnQuIFJlcGxhY2Ugd2l0aCBub3RoaW5nXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAobTQpIHtcbiAgICAgICAgICAgIC8vIEEgbGluZSBjb21tZW50LiBJZiBpdCBlbmRzIGluIFxccj9cXG4gdGhlbiBrZWVwIGl0LlxuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbTQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDIgJiYgbTRbbGVuZ3RoIC0gMV0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG00W2xlbmd0aCAtIDJdID09PSAnXFxyJyA/ICdcXHJcXG4nIDogJ1xcbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG1hdGNoIGEgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkSnNvbldpdGhDb21tZW50cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgY29udGVudDogQnVmZmVyID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZWFkRmlsZShmaWxlUGF0aCwgKGVyciwgYnVmZmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoYnVmZmVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250ZW50U3RyID0gc3RyaXBDb21tZW50cyhjb250ZW50LnRvU3RyaW5nKCkucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykpO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudFN0cikgYXMgdW5rbm93bjtcbn1cbiJdfQ==