38 lines
1.7 KiB
Plaintext
38 lines
1.7 KiB
Plaintext
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _index = require('../tokenizer/index');
|
||
|
var _types = require('../tokenizer/types');
|
||
|
var _base = require('../traverser/base');
|
||
|
var _expression = require('../traverser/expression');
|
||
|
var _flow = require('./flow');
|
||
|
var _typescript = require('./typescript');
|
||
|
|
||
|
/**
|
||
|
* Common parser code for TypeScript and Flow.
|
||
|
*/
|
||
|
|
||
|
// An apparent conditional expression could actually be an optional parameter in an arrow function.
|
||
|
function typedParseConditional(noIn) {
|
||
|
// If we see ?:, this can't possibly be a valid conditional. typedParseParenItem will be called
|
||
|
// later to finish off the arrow parameter. We also need to handle bare ? tokens for optional
|
||
|
// parameters without type annotations, i.e. ?, and ?) .
|
||
|
if (_index.match.call(void 0, _types.TokenType.question)) {
|
||
|
const nextType = _index.lookaheadType.call(void 0, );
|
||
|
if (nextType === _types.TokenType.colon || nextType === _types.TokenType.comma || nextType === _types.TokenType.parenR) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
_expression.baseParseConditional.call(void 0, noIn);
|
||
|
} exports.typedParseConditional = typedParseConditional;
|
||
|
|
||
|
// Note: These "type casts" are *not* valid TS expressions.
|
||
|
// But we parse them here and change them when completing the arrow function.
|
||
|
function typedParseParenItem() {
|
||
|
_index.eatTypeToken.call(void 0, _types.TokenType.question);
|
||
|
if (_index.match.call(void 0, _types.TokenType.colon)) {
|
||
|
if (_base.isTypeScriptEnabled) {
|
||
|
_typescript.tsParseTypeAnnotation.call(void 0, );
|
||
|
} else if (_base.isFlowEnabled) {
|
||
|
_flow.flowParseTypeAnnotation.call(void 0, );
|
||
|
}
|
||
|
}
|
||
|
} exports.typedParseParenItem = typedParseParenItem;
|