ast.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. 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;
  4. const shared_1 = require("@vue/shared");
  5. const parser_1 = require("@babel/parser");
  6. const types_1 = require("@babel/types");
  7. const compiler_core_1 = require("@vue/compiler-core");
  8. const codegen_1 = require("./codegen");
  9. function createIdentifier(name) {
  10. return (0, types_1.identifier)(name);
  11. }
  12. exports.createIdentifier = createIdentifier;
  13. function createObjectProperty(name, value) {
  14. return (0, types_1.objectProperty)((0, types_1.identifier)(name), value);
  15. }
  16. exports.createObjectProperty = createObjectProperty;
  17. function createSpreadElement(argument) {
  18. return (0, types_1.spreadElement)(argument);
  19. }
  20. exports.createSpreadElement = createSpreadElement;
  21. function createObjectExpression(properties) {
  22. return (0, types_1.objectExpression)(properties);
  23. }
  24. exports.createObjectExpression = createObjectExpression;
  25. function createVIfProperty(condition, { id }) {
  26. return (0, types_1.objectProperty)((0, types_1.identifier)(id.next()), condition);
  27. }
  28. exports.createVIfProperty = createVIfProperty;
  29. function createVIfConditionalExpression({ condition, properties, }) {
  30. return (0, types_1.conditionalExpression)(condition, (0, types_1.objectExpression)(properties), (0, types_1.objectExpression)([]));
  31. }
  32. exports.createVIfConditionalExpression = createVIfConditionalExpression;
  33. function createVIfSpreadElement(vIfScope) {
  34. return (0, types_1.spreadElement)(createVIfConditionalExpression(vIfScope));
  35. }
  36. exports.createVIfSpreadElement = createVIfSpreadElement;
  37. // function numericLiteralToArrayExpr(num: number) {
  38. // const elements: NumericLiteral[] = []
  39. // for (let i = 0; i < num; i++) {
  40. // elements.push(numericLiteral(i + 1))
  41. // }
  42. // return arrayExpression(elements)
  43. // }
  44. function parseExpr(code, context, node) {
  45. if (!(0, shared_1.isString)(code)) {
  46. node = code;
  47. code = (0, codegen_1.genExpr)(code);
  48. }
  49. try {
  50. return (0, parser_1.parseExpression)(code, {
  51. plugins: context.expressionPlugins,
  52. });
  53. }
  54. catch (e) {
  55. context.onError((0, compiler_core_1.createCompilerError)(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node && node.loc, undefined, '\n' + code + '\n' + e.message));
  56. }
  57. }
  58. exports.parseExpr = parseExpr;
  59. function parseParam(code, context, node) {
  60. const { params: [expr], } = parseExpr(`(${code})=>{}`, context, node);
  61. return expr;
  62. }
  63. exports.parseParam = parseParam;
  64. function isUndefined(expr) {
  65. return (0, types_1.isIdentifier)(expr) && expr.name === 'undefined';
  66. }
  67. exports.isUndefined = isUndefined;
  68. function isTrueExpr(expr) {
  69. if ((0, types_1.isNullLiteral)(expr)) {
  70. return false;
  71. }
  72. if ((0, types_1.isStringLiteral)(expr) ||
  73. (0, types_1.isNumericLiteral)(expr) ||
  74. (0, types_1.isBooleanLiteral)(expr) ||
  75. (0, types_1.isBigIntLiteral)(expr) ||
  76. (0, types_1.isDecimalLiteral)(expr)) {
  77. return !!expr.value;
  78. }
  79. return true;
  80. }
  81. exports.isTrueExpr = isTrueExpr;
  82. function parseStringLiteral(expr) {
  83. if ((0, types_1.isIdentifier)(expr)) {
  84. return (0, types_1.stringLiteral)(expr.name);
  85. }
  86. if ((0, types_1.isStringLiteral)(expr)) {
  87. return (0, types_1.stringLiteral)(expr.value);
  88. }
  89. return (0, types_1.stringLiteral)('');
  90. }
  91. exports.parseStringLiteral = parseStringLiteral;