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
JavaScript
;
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==