"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = normalizeFile; function _fs() { const data = require("fs"); _fs = function () { return data; }; return data; } function _path() { const data = require("path"); _path = function () { return data; }; return data; } function _debug() { const data = require("debug"); _debug = function () { return data; }; return data; } function _t() { const data = require("@babel/types"); _t = function () { return data; }; return data; } function _convertSourceMap() { const data = require("convert-source-map"); _convertSourceMap = function () { return data; }; return data; } var _file = require("./file/file"); var _parser = require("../parser"); var _cloneDeep = require("./util/clone-deep"); const { file, traverseFast } = _t(); const debug = _debug()("babel:transform:file"); const LARGE_INPUT_SOURCEMAP_THRESHOLD = 3000000; function* normalizeFile(pluginPasses, options, code, ast) { code = `${code || ""}`; if (ast) { if (ast.type === "Program") { ast = file(ast, [], []); } else if (ast.type !== "File") { throw new Error("AST root must be a Program or File node"); } if (options.cloneInputAst) { ast = (0, _cloneDeep.default)(ast); } } else { ast = yield* (0, _parser.default)(pluginPasses, options, code); } let inputMap = null; if (options.inputSourceMap !== false) { if (typeof options.inputSourceMap === "object") { inputMap = _convertSourceMap().fromObject(options.inputSourceMap); } if (!inputMap) { const lastComment = extractComments(INLINE_SOURCEMAP_REGEX, ast); if (lastComment) { try { inputMap = _convertSourceMap().fromComment(lastComment); } catch (err) { debug("discarding unknown inline input sourcemap", err); } } } if (!inputMap) { const lastComment = extractComments(EXTERNAL_SOURCEMAP_REGEX, ast); if (typeof options.filename === "string" && lastComment) { try { const match = EXTERNAL_SOURCEMAP_REGEX.exec(lastComment); const inputMapContent = _fs().readFileSync(_path().resolve(_path().dirname(options.filename), match[1])); if (inputMapContent.length > LARGE_INPUT_SOURCEMAP_THRESHOLD) { debug("skip merging input map > 1 MB"); } else { inputMap = _convertSourceMap().fromJSON(inputMapContent); } } catch (err) { debug("discarding unknown file input sourcemap", err); } } else if (lastComment) { debug("discarding un-loadable file input sourcemap"); } } } return new _file.default(options, { code, ast, inputMap }); } const INLINE_SOURCEMAP_REGEX = /^[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,(?:.*)$/; const EXTERNAL_SOURCEMAP_REGEX = /^[@#][ \t]+sourceMappingURL=([^\s'"`]+)[ \t]*$/; function extractCommentsFromList(regex, comments, lastComment) { if (comments) { comments = comments.filter(({ value }) => { if (regex.test(value)) { lastComment = value; return false; } return true; }); } return [comments, lastComment]; } function extractComments(regex, ast) { let lastComment = null; traverseFast(ast, node => { [node.leadingComments, lastComment] = extractCommentsFromList(regex, node.leadingComments, lastComment); [node.innerComments, lastComment] = extractCommentsFromList(regex, node.innerComments, lastComment); [node.trailingComments, lastComment] = extractCommentsFromList(regex, node.trailingComments, lastComment); }); return lastComment; } 0 && 0;