123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- "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 debug = _debug()("babel:transform:file");
-
- const LARGE_INPUT_SOURCEMAP_THRESHOLD = 1000000;
-
- function* normalizeFile(pluginPasses, options, code, ast) {
- code = `${code || ""}`;
-
- if (ast) {
- if (ast.type === "Program") {
- ast = t().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;
- t().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;
- }
|