You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.6 KiB
91 lines
3.6 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.parseStringLiteral = exports.isTrueExpr = exports.isUndefined = exports.parseParam = exports.parseExpr = exports.createVIfSpreadElement = exports.createVIfConditionalExpression = exports.createVIfProperty = exports.createObjectExpression = exports.createSpreadElement = exports.createObjectProperty = exports.createIdentifier = void 0; |
|
const shared_1 = require("@vue/shared"); |
|
const parser_1 = require("@babel/parser"); |
|
const types_1 = require("@babel/types"); |
|
const compiler_core_1 = require("@vue/compiler-core"); |
|
const codegen_1 = require("./codegen"); |
|
function createIdentifier(name) { |
|
return (0, types_1.identifier)(name); |
|
} |
|
exports.createIdentifier = createIdentifier; |
|
function createObjectProperty(name, value) { |
|
return (0, types_1.objectProperty)((0, types_1.identifier)(name), value); |
|
} |
|
exports.createObjectProperty = createObjectProperty; |
|
function createSpreadElement(argument) { |
|
return (0, types_1.spreadElement)(argument); |
|
} |
|
exports.createSpreadElement = createSpreadElement; |
|
function createObjectExpression(properties) { |
|
return (0, types_1.objectExpression)(properties); |
|
} |
|
exports.createObjectExpression = createObjectExpression; |
|
function createVIfProperty(condition, { id }) { |
|
return (0, types_1.objectProperty)((0, types_1.identifier)(id.next()), condition); |
|
} |
|
exports.createVIfProperty = createVIfProperty; |
|
function createVIfConditionalExpression({ condition, properties, }) { |
|
return (0, types_1.conditionalExpression)(condition, (0, types_1.objectExpression)(properties), (0, types_1.objectExpression)([])); |
|
} |
|
exports.createVIfConditionalExpression = createVIfConditionalExpression; |
|
function createVIfSpreadElement(vIfScope) { |
|
return (0, types_1.spreadElement)(createVIfConditionalExpression(vIfScope)); |
|
} |
|
exports.createVIfSpreadElement = createVIfSpreadElement; |
|
// function numericLiteralToArrayExpr(num: number) { |
|
// const elements: NumericLiteral[] = [] |
|
// for (let i = 0; i < num; i++) { |
|
// elements.push(numericLiteral(i + 1)) |
|
// } |
|
// return arrayExpression(elements) |
|
// } |
|
function parseExpr(code, context, node) { |
|
if (!(0, shared_1.isString)(code)) { |
|
node = code; |
|
code = (0, codegen_1.genExpr)(code); |
|
} |
|
try { |
|
return (0, parser_1.parseExpression)(code, { |
|
plugins: context.expressionPlugins, |
|
}); |
|
} |
|
catch (e) { |
|
context.onError((0, compiler_core_1.createCompilerError)(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node && node.loc, undefined, '\n' + code + '\n' + e.message)); |
|
} |
|
} |
|
exports.parseExpr = parseExpr; |
|
function parseParam(code, context, node) { |
|
const { params: [expr], } = parseExpr(`(${code})=>{}`, context, node); |
|
return expr; |
|
} |
|
exports.parseParam = parseParam; |
|
function isUndefined(expr) { |
|
return (0, types_1.isIdentifier)(expr) && expr.name === 'undefined'; |
|
} |
|
exports.isUndefined = isUndefined; |
|
function isTrueExpr(expr) { |
|
if ((0, types_1.isNullLiteral)(expr)) { |
|
return false; |
|
} |
|
if ((0, types_1.isStringLiteral)(expr) || |
|
(0, types_1.isNumericLiteral)(expr) || |
|
(0, types_1.isBooleanLiteral)(expr) || |
|
(0, types_1.isBigIntLiteral)(expr) || |
|
(0, types_1.isDecimalLiteral)(expr)) { |
|
return !!expr.value; |
|
} |
|
return true; |
|
} |
|
exports.isTrueExpr = isTrueExpr; |
|
function parseStringLiteral(expr) { |
|
if ((0, types_1.isIdentifier)(expr)) { |
|
return (0, types_1.stringLiteral)(expr.name); |
|
} |
|
if ((0, types_1.isStringLiteral)(expr)) { |
|
return (0, types_1.stringLiteral)(expr.value); |
|
} |
|
return (0, types_1.stringLiteral)(''); |
|
} |
|
exports.parseStringLiteral = parseStringLiteral;
|
|
|