diff options
Diffstat (limited to 'node_modules/webpack/lib/javascript/JavascriptParserHelpers.js')
| -rw-r--r-- | node_modules/webpack/lib/javascript/JavascriptParserHelpers.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/javascript/JavascriptParserHelpers.js b/node_modules/webpack/lib/javascript/JavascriptParserHelpers.js new file mode 100644 index 00000000..7028c4dd --- /dev/null +++ b/node_modules/webpack/lib/javascript/JavascriptParserHelpers.js @@ -0,0 +1,128 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +"use strict"; + +const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning"); +const ConstDependency = require("../dependencies/ConstDependency"); +const BasicEvaluatedExpression = require("./BasicEvaluatedExpression"); + +/** @typedef {import("estree").Expression} Expression */ +/** @typedef {import("estree").Node} Node */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("./JavascriptParser")} JavascriptParser */ +/** @typedef {import("./JavascriptParser").Range} Range */ + +/** + * @param {JavascriptParser} parser the parser + * @param {string} value the const value + * @param {(string[] | null)=} runtimeRequirements runtime requirements + * @returns {function(Expression): true} plugin function + */ +module.exports.toConstantDependency = (parser, value, runtimeRequirements) => + function constDependency(expr) { + const dep = new ConstDependency( + value, + /** @type {Range} */ (expr.range), + runtimeRequirements + ); + dep.loc = /** @type {SourceLocation} */ (expr.loc); + parser.state.module.addPresentationalDependency(dep); + return true; + }; + +/** + * @param {string} value the string value + * @returns {function(Expression): BasicEvaluatedExpression} plugin function + */ +module.exports.evaluateToString = value => + function stringExpression(expr) { + return new BasicEvaluatedExpression() + .setString(value) + .setRange(/** @type {Range} */ (expr.range)); + }; + +/** + * @param {number} value the number value + * @returns {function(Expression): BasicEvaluatedExpression} plugin function + */ +module.exports.evaluateToNumber = value => + function stringExpression(expr) { + return new BasicEvaluatedExpression() + .setNumber(value) + .setRange(/** @type {Range} */ (expr.range)); + }; + +/** + * @param {boolean} value the boolean value + * @returns {function(Expression): BasicEvaluatedExpression} plugin function + */ +module.exports.evaluateToBoolean = value => + function booleanExpression(expr) { + return new BasicEvaluatedExpression() + .setBoolean(value) + .setRange(/** @type {Range} */ (expr.range)); + }; + +/** + * @param {string} identifier identifier + * @param {string} rootInfo rootInfo + * @param {function(): string[]} getMembers getMembers + * @param {boolean|null=} truthy is truthy, null if nullish + * @returns {function(Expression): BasicEvaluatedExpression} callback + */ +module.exports.evaluateToIdentifier = ( + identifier, + rootInfo, + getMembers, + truthy +) => + function identifierExpression(expr) { + const evaluatedExpression = new BasicEvaluatedExpression() + .setIdentifier(identifier, rootInfo, getMembers) + .setSideEffects(false) + .setRange(/** @type {Range} */ (expr.range)); + switch (truthy) { + case true: + evaluatedExpression.setTruthy(); + break; + case null: + evaluatedExpression.setNullish(true); + break; + case false: + evaluatedExpression.setFalsy(); + break; + } + + return evaluatedExpression; + }; + +/** + * @param {JavascriptParser} parser the parser + * @param {string} message the message + * @returns {function(Expression): boolean | undefined} callback to handle unsupported expression + */ +module.exports.expressionIsUnsupported = (parser, message) => + function unsupportedExpression(expr) { + const dep = new ConstDependency( + "(void 0)", + /** @type {Range} */ (expr.range), + null + ); + dep.loc = /** @type {SourceLocation} */ (expr.loc); + parser.state.module.addPresentationalDependency(dep); + if (!parser.state.module) return; + parser.state.module.addWarning( + new UnsupportedFeatureWarning( + message, + /** @type {SourceLocation} */ (expr.loc) + ) + ); + return true; + }; + +module.exports.skipTraversal = () => true; + +module.exports.approve = () => true; |
