@vue/compiler-core 3.4.0-alpha.3 → 3.4.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,6 +96,90 @@ function registerRuntimeHelpers(helpers) {
96
96
  });
97
97
  }
98
98
 
99
+ const Namespaces = {
100
+ "HTML": 0,
101
+ "0": "HTML",
102
+ "SVG": 1,
103
+ "1": "SVG",
104
+ "MATH_ML": 2,
105
+ "2": "MATH_ML"
106
+ };
107
+ const NodeTypes = {
108
+ "ROOT": 0,
109
+ "0": "ROOT",
110
+ "ELEMENT": 1,
111
+ "1": "ELEMENT",
112
+ "TEXT": 2,
113
+ "2": "TEXT",
114
+ "COMMENT": 3,
115
+ "3": "COMMENT",
116
+ "SIMPLE_EXPRESSION": 4,
117
+ "4": "SIMPLE_EXPRESSION",
118
+ "INTERPOLATION": 5,
119
+ "5": "INTERPOLATION",
120
+ "ATTRIBUTE": 6,
121
+ "6": "ATTRIBUTE",
122
+ "DIRECTIVE": 7,
123
+ "7": "DIRECTIVE",
124
+ "COMPOUND_EXPRESSION": 8,
125
+ "8": "COMPOUND_EXPRESSION",
126
+ "IF": 9,
127
+ "9": "IF",
128
+ "IF_BRANCH": 10,
129
+ "10": "IF_BRANCH",
130
+ "FOR": 11,
131
+ "11": "FOR",
132
+ "TEXT_CALL": 12,
133
+ "12": "TEXT_CALL",
134
+ "VNODE_CALL": 13,
135
+ "13": "VNODE_CALL",
136
+ "JS_CALL_EXPRESSION": 14,
137
+ "14": "JS_CALL_EXPRESSION",
138
+ "JS_OBJECT_EXPRESSION": 15,
139
+ "15": "JS_OBJECT_EXPRESSION",
140
+ "JS_PROPERTY": 16,
141
+ "16": "JS_PROPERTY",
142
+ "JS_ARRAY_EXPRESSION": 17,
143
+ "17": "JS_ARRAY_EXPRESSION",
144
+ "JS_FUNCTION_EXPRESSION": 18,
145
+ "18": "JS_FUNCTION_EXPRESSION",
146
+ "JS_CONDITIONAL_EXPRESSION": 19,
147
+ "19": "JS_CONDITIONAL_EXPRESSION",
148
+ "JS_CACHE_EXPRESSION": 20,
149
+ "20": "JS_CACHE_EXPRESSION",
150
+ "JS_BLOCK_STATEMENT": 21,
151
+ "21": "JS_BLOCK_STATEMENT",
152
+ "JS_TEMPLATE_LITERAL": 22,
153
+ "22": "JS_TEMPLATE_LITERAL",
154
+ "JS_IF_STATEMENT": 23,
155
+ "23": "JS_IF_STATEMENT",
156
+ "JS_ASSIGNMENT_EXPRESSION": 24,
157
+ "24": "JS_ASSIGNMENT_EXPRESSION",
158
+ "JS_SEQUENCE_EXPRESSION": 25,
159
+ "25": "JS_SEQUENCE_EXPRESSION",
160
+ "JS_RETURN_STATEMENT": 26,
161
+ "26": "JS_RETURN_STATEMENT"
162
+ };
163
+ const ElementTypes = {
164
+ "ELEMENT": 0,
165
+ "0": "ELEMENT",
166
+ "COMPONENT": 1,
167
+ "1": "COMPONENT",
168
+ "SLOT": 2,
169
+ "2": "SLOT",
170
+ "TEMPLATE": 3,
171
+ "3": "TEMPLATE"
172
+ };
173
+ const ConstantTypes = {
174
+ "NOT_CONSTANT": 0,
175
+ "0": "NOT_CONSTANT",
176
+ "CAN_SKIP_PATCH": 1,
177
+ "1": "CAN_SKIP_PATCH",
178
+ "CAN_HOIST": 2,
179
+ "2": "CAN_HOIST",
180
+ "CAN_STRINGIFY": 3,
181
+ "3": "CAN_STRINGIFY"
182
+ };
99
183
  const locStub = {
100
184
  start: { line: 1, column: 1, offset: 0 },
101
185
  end: { line: 1, column: 1, offset: 0 },
@@ -350,7 +434,9 @@ class Tokenizer {
350
434
  this.inRCDATA = false;
351
435
  /** For disabling RCDATA tags handling */
352
436
  this.inXML = false;
353
- /** Reocrd newline positions for fast line / column calculation */
437
+ /** For disabling interpolation parsing in v-pre */
438
+ this.inVPre = false;
439
+ /** Record newline positions for fast line / column calculation */
354
440
  this.newlines = [];
355
441
  this.mode = 0;
356
442
  this.delimiterOpen = defaultDelimitersOpen;
@@ -375,6 +461,7 @@ class Tokenizer {
375
461
  this.sectionStart = 0;
376
462
  this.index = 0;
377
463
  this.baseState = 1;
464
+ this.inRCDATA = false;
378
465
  this.currentSequence = void 0;
379
466
  this.newlines.length = 0;
380
467
  this.delimiterOpen = defaultDelimitersOpen;
@@ -415,7 +502,7 @@ class Tokenizer {
415
502
  this.sectionStart = this.index;
416
503
  } else if (c === 38) {
417
504
  this.startEntity();
418
- } else if (c === this.delimiterOpen[0]) {
505
+ } else if (!this.inVPre && c === this.delimiterOpen[0]) {
419
506
  this.state = 2;
420
507
  this.delimiterIndex = 0;
421
508
  this.stateInterpolationOpen(c);
@@ -1151,6 +1238,16 @@ class Tokenizer {
1151
1238
  }
1152
1239
  }
1153
1240
 
1241
+ const CompilerDeprecationTypes = {
1242
+ "COMPILER_IS_ON_ELEMENT": "COMPILER_IS_ON_ELEMENT",
1243
+ "COMPILER_V_BIND_SYNC": "COMPILER_V_BIND_SYNC",
1244
+ "COMPILER_V_BIND_OBJECT_ORDER": "COMPILER_V_BIND_OBJECT_ORDER",
1245
+ "COMPILER_V_ON_NATIVE": "COMPILER_V_ON_NATIVE",
1246
+ "COMPILER_V_IF_V_FOR_PRECEDENCE": "COMPILER_V_IF_V_FOR_PRECEDENCE",
1247
+ "COMPILER_NATIVE_TEMPLATE": "COMPILER_NATIVE_TEMPLATE",
1248
+ "COMPILER_INLINE_TEMPLATE": "COMPILER_INLINE_TEMPLATE",
1249
+ "COMPILER_FILTERS": "COMPILER_FILTER"
1250
+ };
1154
1251
  const deprecationData = {
1155
1252
  ["COMPILER_IS_ON_ELEMENT"]: {
1156
1253
  message: `Platform-native elements with "is" prop will no longer be treated as components in Vue 3 unless the "is" value is explicitly prefixed with "vue:".`,
@@ -1228,6 +1325,114 @@ function createCompilerError(code, loc, messages, additionalMessage) {
1228
1325
  error.loc = loc;
1229
1326
  return error;
1230
1327
  }
1328
+ const ErrorCodes = {
1329
+ "ABRUPT_CLOSING_OF_EMPTY_COMMENT": 0,
1330
+ "0": "ABRUPT_CLOSING_OF_EMPTY_COMMENT",
1331
+ "CDATA_IN_HTML_CONTENT": 1,
1332
+ "1": "CDATA_IN_HTML_CONTENT",
1333
+ "DUPLICATE_ATTRIBUTE": 2,
1334
+ "2": "DUPLICATE_ATTRIBUTE",
1335
+ "END_TAG_WITH_ATTRIBUTES": 3,
1336
+ "3": "END_TAG_WITH_ATTRIBUTES",
1337
+ "END_TAG_WITH_TRAILING_SOLIDUS": 4,
1338
+ "4": "END_TAG_WITH_TRAILING_SOLIDUS",
1339
+ "EOF_BEFORE_TAG_NAME": 5,
1340
+ "5": "EOF_BEFORE_TAG_NAME",
1341
+ "EOF_IN_CDATA": 6,
1342
+ "6": "EOF_IN_CDATA",
1343
+ "EOF_IN_COMMENT": 7,
1344
+ "7": "EOF_IN_COMMENT",
1345
+ "EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT": 8,
1346
+ "8": "EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT",
1347
+ "EOF_IN_TAG": 9,
1348
+ "9": "EOF_IN_TAG",
1349
+ "INCORRECTLY_CLOSED_COMMENT": 10,
1350
+ "10": "INCORRECTLY_CLOSED_COMMENT",
1351
+ "INCORRECTLY_OPENED_COMMENT": 11,
1352
+ "11": "INCORRECTLY_OPENED_COMMENT",
1353
+ "INVALID_FIRST_CHARACTER_OF_TAG_NAME": 12,
1354
+ "12": "INVALID_FIRST_CHARACTER_OF_TAG_NAME",
1355
+ "MISSING_ATTRIBUTE_VALUE": 13,
1356
+ "13": "MISSING_ATTRIBUTE_VALUE",
1357
+ "MISSING_END_TAG_NAME": 14,
1358
+ "14": "MISSING_END_TAG_NAME",
1359
+ "MISSING_WHITESPACE_BETWEEN_ATTRIBUTES": 15,
1360
+ "15": "MISSING_WHITESPACE_BETWEEN_ATTRIBUTES",
1361
+ "NESTED_COMMENT": 16,
1362
+ "16": "NESTED_COMMENT",
1363
+ "UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME": 17,
1364
+ "17": "UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME",
1365
+ "UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE": 18,
1366
+ "18": "UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE",
1367
+ "UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME": 19,
1368
+ "19": "UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME",
1369
+ "UNEXPECTED_NULL_CHARACTER": 20,
1370
+ "20": "UNEXPECTED_NULL_CHARACTER",
1371
+ "UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME": 21,
1372
+ "21": "UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME",
1373
+ "UNEXPECTED_SOLIDUS_IN_TAG": 22,
1374
+ "22": "UNEXPECTED_SOLIDUS_IN_TAG",
1375
+ "X_INVALID_END_TAG": 23,
1376
+ "23": "X_INVALID_END_TAG",
1377
+ "X_MISSING_END_TAG": 24,
1378
+ "24": "X_MISSING_END_TAG",
1379
+ "X_MISSING_INTERPOLATION_END": 25,
1380
+ "25": "X_MISSING_INTERPOLATION_END",
1381
+ "X_MISSING_DIRECTIVE_NAME": 26,
1382
+ "26": "X_MISSING_DIRECTIVE_NAME",
1383
+ "X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END": 27,
1384
+ "27": "X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END",
1385
+ "X_V_IF_NO_EXPRESSION": 28,
1386
+ "28": "X_V_IF_NO_EXPRESSION",
1387
+ "X_V_IF_SAME_KEY": 29,
1388
+ "29": "X_V_IF_SAME_KEY",
1389
+ "X_V_ELSE_NO_ADJACENT_IF": 30,
1390
+ "30": "X_V_ELSE_NO_ADJACENT_IF",
1391
+ "X_V_FOR_NO_EXPRESSION": 31,
1392
+ "31": "X_V_FOR_NO_EXPRESSION",
1393
+ "X_V_FOR_MALFORMED_EXPRESSION": 32,
1394
+ "32": "X_V_FOR_MALFORMED_EXPRESSION",
1395
+ "X_V_FOR_TEMPLATE_KEY_PLACEMENT": 33,
1396
+ "33": "X_V_FOR_TEMPLATE_KEY_PLACEMENT",
1397
+ "X_V_BIND_NO_EXPRESSION": 34,
1398
+ "34": "X_V_BIND_NO_EXPRESSION",
1399
+ "X_V_ON_NO_EXPRESSION": 35,
1400
+ "35": "X_V_ON_NO_EXPRESSION",
1401
+ "X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET": 36,
1402
+ "36": "X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET",
1403
+ "X_V_SLOT_MIXED_SLOT_USAGE": 37,
1404
+ "37": "X_V_SLOT_MIXED_SLOT_USAGE",
1405
+ "X_V_SLOT_DUPLICATE_SLOT_NAMES": 38,
1406
+ "38": "X_V_SLOT_DUPLICATE_SLOT_NAMES",
1407
+ "X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN": 39,
1408
+ "39": "X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN",
1409
+ "X_V_SLOT_MISPLACED": 40,
1410
+ "40": "X_V_SLOT_MISPLACED",
1411
+ "X_V_MODEL_NO_EXPRESSION": 41,
1412
+ "41": "X_V_MODEL_NO_EXPRESSION",
1413
+ "X_V_MODEL_MALFORMED_EXPRESSION": 42,
1414
+ "42": "X_V_MODEL_MALFORMED_EXPRESSION",
1415
+ "X_V_MODEL_ON_SCOPE_VARIABLE": 43,
1416
+ "43": "X_V_MODEL_ON_SCOPE_VARIABLE",
1417
+ "X_V_MODEL_ON_PROPS": 44,
1418
+ "44": "X_V_MODEL_ON_PROPS",
1419
+ "X_INVALID_EXPRESSION": 45,
1420
+ "45": "X_INVALID_EXPRESSION",
1421
+ "X_KEEP_ALIVE_INVALID_CHILDREN": 46,
1422
+ "46": "X_KEEP_ALIVE_INVALID_CHILDREN",
1423
+ "X_VNODE_HOOKS": 47,
1424
+ "47": "X_VNODE_HOOKS",
1425
+ "X_PREFIX_ID_NOT_SUPPORTED": 48,
1426
+ "48": "X_PREFIX_ID_NOT_SUPPORTED",
1427
+ "X_MODULE_MODE_NOT_SUPPORTED": 49,
1428
+ "49": "X_MODULE_MODE_NOT_SUPPORTED",
1429
+ "X_CACHE_HANDLER_NOT_SUPPORTED": 50,
1430
+ "50": "X_CACHE_HANDLER_NOT_SUPPORTED",
1431
+ "X_SCOPE_ID_NOT_SUPPORTED": 51,
1432
+ "51": "X_SCOPE_ID_NOT_SUPPORTED",
1433
+ "__EXTEND_POINT__": 52,
1434
+ "52": "__EXTEND_POINT__"
1435
+ };
1231
1436
  const errorMessages = {
1232
1437
  // parse errors
1233
1438
  [0]: "Illegal comment.",
@@ -1280,16 +1485,14 @@ const errorMessages = {
1280
1485
  Use a v-bind binding combined with a v-on listener that emits update:x event instead.`,
1281
1486
  [45]: `Error parsing JavaScript expression: `,
1282
1487
  [46]: `<KeepAlive> expects exactly one child component.`,
1488
+ [47]: `@vnode-* hooks in templates are deprecated. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support will be removed in 3.4.`,
1283
1489
  // generic errors
1284
- [47]: `"prefixIdentifiers" option is not supported in this build of compiler.`,
1285
- [48]: `ES module mode is not supported in this build of compiler.`,
1286
- [49]: `"cacheHandlers" option is only supported when the "prefixIdentifiers" option is enabled.`,
1287
- [50]: `"scopeId" option is only supported in module mode.`,
1288
- // deprecations
1289
- [51]: `@vnode-* hooks in templates are deprecated. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support will be removed in 3.4.`,
1290
- [52]: `v-is="component-name" has been deprecated. Use is="vue:component-name" instead. v-is support will be removed in 3.4.`,
1490
+ [48]: `"prefixIdentifiers" option is not supported in this build of compiler.`,
1491
+ [49]: `ES module mode is not supported in this build of compiler.`,
1492
+ [50]: `"cacheHandlers" option is only supported when the "prefixIdentifiers" option is enabled.`,
1493
+ [51]: `"scopeId" option is only supported in module mode.`,
1291
1494
  // just to fulfill types
1292
- [53]: ``
1495
+ [52]: ``
1293
1496
  };
1294
1497
 
1295
1498
  const isStaticExp = (p) => p.type === 4 && p.isStatic;
@@ -1609,7 +1812,8 @@ const defaultParserOptions = {
1609
1812
  isCustomElement: shared.NO,
1610
1813
  onError: defaultOnError,
1611
1814
  onWarn: defaultOnWarn,
1612
- comments: false
1815
+ comments: false,
1816
+ prefixIdentifiers: false
1613
1817
  };
1614
1818
  let currentOptions = defaultParserOptions;
1615
1819
  let currentRoot = null;
@@ -1651,7 +1855,7 @@ const tokenizer = new Tokenizer(stack, {
1651
1855
  }
1652
1856
  addNode({
1653
1857
  type: 5,
1654
- content: createSimpleExpression(exp, false, getLoc(innerStart, innerEnd)),
1858
+ content: createExp(exp, false, getLoc(innerStart, innerEnd)),
1655
1859
  loc: getLoc(start, end)
1656
1860
  });
1657
1861
  },
@@ -1744,7 +1948,7 @@ const tokenizer = new Tokenizer(stack, {
1744
1948
  loc: getLoc(start)
1745
1949
  };
1746
1950
  if (name === "pre") {
1747
- inVPre = true;
1951
+ inVPre = tokenizer.inVPre = true;
1748
1952
  currentVPreBoundary = currentOpenTag;
1749
1953
  const props = currentOpenTag.props;
1750
1954
  for (let i = 0; i < props.length; i++) {
@@ -1764,7 +1968,7 @@ const tokenizer = new Tokenizer(stack, {
1764
1968
  setLocEnd(currentProp.nameLoc, end);
1765
1969
  } else {
1766
1970
  const isStatic = arg[0] !== `[`;
1767
- currentProp.arg = createSimpleExpression(
1971
+ currentProp.arg = createExp(
1768
1972
  isStatic ? arg : arg.slice(1, -1),
1769
1973
  isStatic,
1770
1974
  getLoc(start, end),
@@ -1831,10 +2035,22 @@ const tokenizer = new Tokenizer(stack, {
1831
2035
  tokenizer.enterRCDATA(toCharCodes(`</template`), 0);
1832
2036
  }
1833
2037
  } else {
1834
- currentProp.exp = createSimpleExpression(
2038
+ let expParseMode = 0 /* Normal */;
2039
+ {
2040
+ if (currentProp.name === "for") {
2041
+ expParseMode = 3 /* Skip */;
2042
+ } else if (currentProp.name === "slot") {
2043
+ expParseMode = 1 /* Params */;
2044
+ } else if (currentProp.name === "on" && currentAttrValue.includes(";")) {
2045
+ expParseMode = 2 /* Statements */;
2046
+ }
2047
+ }
2048
+ currentProp.exp = createExp(
1835
2049
  currentAttrValue,
1836
2050
  false,
1837
- getLoc(currentAttrStartIndex, currentAttrEndIndex)
2051
+ getLoc(currentAttrStartIndex, currentAttrEndIndex),
2052
+ 0,
2053
+ expParseMode
1838
2054
  );
1839
2055
  if (currentProp.name === "for") {
1840
2056
  currentProp.forParseResult = parseForExpression(currentProp.exp);
@@ -1937,10 +2153,16 @@ function parseForExpression(input) {
1937
2153
  if (!inMatch)
1938
2154
  return;
1939
2155
  const [, LHS, RHS] = inMatch;
1940
- const createAliasExpression = (content, offset) => {
2156
+ const createAliasExpression = (content, offset, asParam = false) => {
1941
2157
  const start = loc.start.offset + offset;
1942
2158
  const end = start + content.length;
1943
- return createSimpleExpression(content, false, getLoc(start, end));
2159
+ return createExp(
2160
+ content,
2161
+ false,
2162
+ getLoc(start, end),
2163
+ 0,
2164
+ asParam ? 1 /* Params */ : 0 /* Normal */
2165
+ );
1944
2166
  };
1945
2167
  const result = {
1946
2168
  source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),
@@ -1958,7 +2180,7 @@ function parseForExpression(input) {
1958
2180
  let keyOffset;
1959
2181
  if (keyContent) {
1960
2182
  keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);
1961
- result.key = createAliasExpression(keyContent, keyOffset);
2183
+ result.key = createAliasExpression(keyContent, keyOffset, true);
1962
2184
  }
1963
2185
  if (iteratorMatch[2]) {
1964
2186
  const indexContent = iteratorMatch[2].trim();
@@ -1968,13 +2190,14 @@ function parseForExpression(input) {
1968
2190
  exp.indexOf(
1969
2191
  indexContent,
1970
2192
  result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length
1971
- )
2193
+ ),
2194
+ true
1972
2195
  );
1973
2196
  }
1974
2197
  }
1975
2198
  }
1976
2199
  if (valueContent) {
1977
- result.value = createAliasExpression(valueContent, trimmedOffset);
2200
+ result.value = createAliasExpression(valueContent, trimmedOffset, true);
1978
2201
  }
1979
2202
  return result;
1980
2203
  }
@@ -2045,7 +2268,7 @@ function onCloseTag(el, end, isImplied = false) {
2045
2268
  inPre--;
2046
2269
  }
2047
2270
  if (currentVPreBoundary === el) {
2048
- inVPre = false;
2271
+ inVPre = tokenizer.inVPre = false;
2049
2272
  currentVPreBoundary = null;
2050
2273
  }
2051
2274
  if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {
@@ -2250,8 +2473,36 @@ function dirToAttr(dir) {
2250
2473
  }
2251
2474
  return attr;
2252
2475
  }
2253
- function emitError(code, index) {
2254
- currentOptions.onError(createCompilerError(code, getLoc(index, index)));
2476
+ function createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {
2477
+ const exp = createSimpleExpression(content, isStatic, loc, constType);
2478
+ if (!isStatic && currentOptions.prefixIdentifiers && parseMode !== 3 /* Skip */ && content.trim()) {
2479
+ if (isSimpleIdentifier(content)) {
2480
+ exp.ast = null;
2481
+ return exp;
2482
+ }
2483
+ try {
2484
+ const plugins = currentOptions.expressionPlugins;
2485
+ const options = {
2486
+ plugins: plugins ? [...plugins, "typescript"] : ["typescript"]
2487
+ };
2488
+ if (parseMode === 2 /* Statements */) {
2489
+ exp.ast = parser.parse(` ${content} `, options).program;
2490
+ } else if (parseMode === 1 /* Params */) {
2491
+ exp.ast = parser.parseExpression(`(${content})=>{}`, options);
2492
+ } else {
2493
+ exp.ast = parser.parseExpression(`(${content})`, options);
2494
+ }
2495
+ } catch (e) {
2496
+ exp.ast = false;
2497
+ emitError(45, loc.start.offset, e.message);
2498
+ }
2499
+ }
2500
+ return exp;
2501
+ }
2502
+ function emitError(code, index, message) {
2503
+ currentOptions.onError(
2504
+ createCompilerError(code, getLoc(index, index), void 0, message)
2505
+ );
2255
2506
  }
2256
2507
  function reset() {
2257
2508
  tokenizer.reset();
@@ -2275,6 +2526,7 @@ function baseParse(input, options) {
2275
2526
  }
2276
2527
  }
2277
2528
  tokenizer.mode = currentOptions.parseMode === "html" ? 1 : currentOptions.parseMode === "sfc" ? 2 : 0;
2529
+ tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;
2278
2530
  const delimiters = options == null ? void 0 : options.delimiters;
2279
2531
  if (delimiters) {
2280
2532
  tokenizer.delimiterOpen = toCharCodes(delimiters[0]);
@@ -3603,7 +3855,7 @@ function genReturnStatement({ returns }, context) {
3603
3855
  }
3604
3856
 
3605
3857
  function walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {
3606
- const rootExp = root.type === "Program" && root.body[0].type === "ExpressionStatement" && root.body[0].expression;
3858
+ const rootExp = root.type === "Program" ? root.body[0].type === "ExpressionStatement" && root.body[0].expression : root;
3607
3859
  estreeWalker.walk(root, {
3608
3860
  enter(node, parent) {
3609
3861
  parent && parentStack.push(parent);
@@ -3952,7 +4204,11 @@ function processExpression(node, context, asParams = false, asRawStatements = fa
3952
4204
  };
3953
4205
  const rawExp = node.content;
3954
4206
  const bailConstant = constantBailRE.test(rawExp);
3955
- if (isSimpleIdentifier(rawExp)) {
4207
+ let ast = node.ast;
4208
+ if (ast === false) {
4209
+ return node;
4210
+ }
4211
+ if (ast === null || !ast && isSimpleIdentifier(rawExp)) {
3956
4212
  const isScopeVarReference = context.identifiers[rawExp];
3957
4213
  const isAllowedGlobal = shared.isGloballyAllowed(rawExp);
3958
4214
  const isLiteral = isLiteralWhitelisted(rawExp);
@@ -3970,22 +4226,23 @@ function processExpression(node, context, asParams = false, asRawStatements = fa
3970
4226
  }
3971
4227
  return node;
3972
4228
  }
3973
- let ast;
3974
- const source = asRawStatements ? ` ${rawExp} ` : `(${rawExp})${asParams ? `=>{}` : ``}`;
3975
- try {
3976
- ast = parser.parse(source, {
3977
- plugins: context.expressionPlugins
3978
- }).program;
3979
- } catch (e) {
3980
- context.onError(
3981
- createCompilerError(
3982
- 45,
3983
- node.loc,
3984
- void 0,
3985
- e.message
3986
- )
3987
- );
3988
- return node;
4229
+ if (!ast) {
4230
+ const source = asRawStatements ? ` ${rawExp} ` : `(${rawExp})${asParams ? `=>{}` : ``}`;
4231
+ try {
4232
+ ast = parser.parse(source, {
4233
+ plugins: context.expressionPlugins
4234
+ }).program;
4235
+ } catch (e) {
4236
+ context.onError(
4237
+ createCompilerError(
4238
+ 45,
4239
+ node.loc,
4240
+ void 0,
4241
+ e.message
4242
+ )
4243
+ );
4244
+ return node;
4245
+ }
3989
4246
  }
3990
4247
  const ids = [];
3991
4248
  const parentStack = [];
@@ -4028,15 +4285,15 @@ function processExpression(node, context, asParams = false, asRawStatements = fa
4028
4285
  if (leadingText.length || id.prefix) {
4029
4286
  children.push(leadingText + (id.prefix || ``));
4030
4287
  }
4031
- const source2 = rawExp.slice(start, end);
4288
+ const source = rawExp.slice(start, end);
4032
4289
  children.push(
4033
4290
  createSimpleExpression(
4034
4291
  id.name,
4035
4292
  false,
4036
4293
  {
4037
- start: advancePositionWithClone(node.loc.start, source2, start),
4038
- end: advancePositionWithClone(node.loc.start, source2, end),
4039
- source: source2
4294
+ start: advancePositionWithClone(node.loc.start, source, start),
4295
+ end: advancePositionWithClone(node.loc.start, source, end),
4296
+ source
4040
4297
  },
4041
4298
  id.isConstant ? 3 : 0
4042
4299
  )
@@ -4048,6 +4305,7 @@ function processExpression(node, context, asParams = false, asRawStatements = fa
4048
4305
  let ret;
4049
4306
  if (children.length) {
4050
4307
  ret = createCompoundExpression(children, node.loc);
4308
+ ret.ast = ast;
4051
4309
  } else {
4052
4310
  ret = node;
4053
4311
  ret.constType = bailConstant ? 0 : 3;
@@ -4983,6 +5241,10 @@ function resolveSetupReference(name, context) {
4983
5241
  `${context.helperString(UNREF)}(${fromMaybeRef})`
4984
5242
  ) : `$setup[${JSON.stringify(fromMaybeRef)}]`;
4985
5243
  }
5244
+ const fromProps = checkType("props");
5245
+ if (fromProps) {
5246
+ return `${context.helperString(UNREF)}(${context.inline ? "__props" : "$props"}[${JSON.stringify(fromProps)}])`;
5247
+ }
4986
5248
  }
4987
5249
  function buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {
4988
5250
  const { tag, loc: elementLoc, children } = node;
@@ -5023,6 +5285,9 @@ function buildProps(node, context, props = node.props, isComponent, isDynamicCom
5023
5285
  if (isEventHandler && shared.isReservedProp(name)) {
5024
5286
  hasVnodeHook = true;
5025
5287
  }
5288
+ if (isEventHandler && value.type === 14) {
5289
+ value = value.arguments[0];
5290
+ }
5026
5291
  if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {
5027
5292
  return;
5028
5293
  }
@@ -5995,10 +6260,10 @@ function baseCompile(source, options = {}) {
5995
6260
  const isModuleMode = options.mode === "module";
5996
6261
  const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;
5997
6262
  if (!prefixIdentifiers && options.cacheHandlers) {
5998
- onError(createCompilerError(49));
6263
+ onError(createCompilerError(50));
5999
6264
  }
6000
6265
  if (options.scopeId && !isModuleMode) {
6001
- onError(createCompilerError(50));
6266
+ onError(createCompilerError(51));
6002
6267
  }
6003
6268
  const ast = shared.isString(source) ? baseParse(source, options) : source;
6004
6269
  const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);
@@ -6033,10 +6298,24 @@ function baseCompile(source, options = {}) {
6033
6298
  );
6034
6299
  }
6035
6300
 
6301
+ const BindingTypes = {
6302
+ "DATA": "data",
6303
+ "PROPS": "props",
6304
+ "PROPS_ALIASED": "props-aliased",
6305
+ "SETUP_LET": "setup-let",
6306
+ "SETUP_CONST": "setup-const",
6307
+ "SETUP_REACTIVE_CONST": "setup-reactive-const",
6308
+ "SETUP_MAYBE_REF": "setup-maybe-ref",
6309
+ "SETUP_REF": "setup-ref",
6310
+ "OPTIONS": "options",
6311
+ "LITERAL_CONST": "literal-const"
6312
+ };
6313
+
6036
6314
  const noopDirectiveTransform = () => ({ props: [] });
6037
6315
 
6038
6316
  exports.generateCodeFrame = shared.generateCodeFrame;
6039
6317
  exports.BASE_TRANSITION = BASE_TRANSITION;
6318
+ exports.BindingTypes = BindingTypes;
6040
6319
  exports.CAMELIZE = CAMELIZE;
6041
6320
  exports.CAPITALIZE = CAPITALIZE;
6042
6321
  exports.CREATE_BLOCK = CREATE_BLOCK;
@@ -6047,6 +6326,10 @@ exports.CREATE_SLOTS = CREATE_SLOTS;
6047
6326
  exports.CREATE_STATIC = CREATE_STATIC;
6048
6327
  exports.CREATE_TEXT = CREATE_TEXT;
6049
6328
  exports.CREATE_VNODE = CREATE_VNODE;
6329
+ exports.CompilerDeprecationTypes = CompilerDeprecationTypes;
6330
+ exports.ConstantTypes = ConstantTypes;
6331
+ exports.ElementTypes = ElementTypes;
6332
+ exports.ErrorCodes = ErrorCodes;
6050
6333
  exports.FRAGMENT = FRAGMENT;
6051
6334
  exports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;
6052
6335
  exports.IS_MEMO_SAME = IS_MEMO_SAME;
@@ -6056,6 +6339,8 @@ exports.MERGE_PROPS = MERGE_PROPS;
6056
6339
  exports.NORMALIZE_CLASS = NORMALIZE_CLASS;
6057
6340
  exports.NORMALIZE_PROPS = NORMALIZE_PROPS;
6058
6341
  exports.NORMALIZE_STYLE = NORMALIZE_STYLE;
6342
+ exports.Namespaces = Namespaces;
6343
+ exports.NodeTypes = NodeTypes;
6059
6344
  exports.OPEN_BLOCK = OPEN_BLOCK;
6060
6345
  exports.POP_SCOPE_ID = POP_SCOPE_ID;
6061
6346
  exports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;