UNPKG

webpack-preprocessor-loader

Version:
70 lines (69 loc) 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.print = exports.COMMENT_TAG_PLACEHOLDER = void 0; const filter_1 = require("./filter"); const parser_1 = require("./parser"); const reader_1 = require("./reader"); exports.COMMENT_TAG_PLACEHOLDER = "@@"; /** * The main entrance to dealt with code processing. * * @param code raw text input * @param directives the collection of user-defined directives * @param params the collection of user-defined params * @param verbose should output omitted lines * @returns the processed code */ function print(code, directives, params, verbose) { let result = ""; let lastCommentOpen = ""; let lastCommentClose = ""; let filter = new filter_1.PlainTextFilter(); for (const block of (0, reader_1.reader)(code)) { const blockInfo = (0, parser_1.parse)(block); const { preserve, filter: nextFilter } = filter.next(blockInfo, directives, params); filter = nextFilter; const { raw, isComment, isDirective } = blockInfo; let segment = ""; if (preserve) { segment = raw; } else if (verbose) { const { c_open, c_close } = block; if (isDirective) { lastCommentOpen = c_open || lastCommentOpen; lastCommentClose = c_close || lastCommentClose; segment = raw; } else if (isComment) { const escapeComments = !!verbose.escapeComments; if (escapeComments) { const comment = raw .replace(c_open, exports.COMMENT_TAG_PLACEHOLDER) .replace(c_close, exports.COMMENT_TAG_PLACEHOLDER); segment = transformComment(comment, (line) => verbosePrint(lastCommentOpen, lastCommentClose, line)); } else { const padding = Array.from({ length: lastCommentOpen.length + 1 }) .fill(" ") .join(""); segment = transformComment(raw, (line) => padding + line + "\n"); } } else { segment = verbosePrint(lastCommentOpen, lastCommentClose, raw); } } result += segment; } return result; } exports.print = print; function transformComment(comment, lineTransformer) { // Comment may contain multiple lines const lines = comment.trimRight().split("\n"); return lines.map(lineTransformer).join(""); } function verbosePrint(open, close, content) { return `${open} ${content.trimRight()}${close.trim()}\n`; }