123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _types = require("../tokenizer/types");
- var _parseError = require("../parse-error");
- const PlaceholderErrors = (0, _parseError.ParseErrorEnum)`placeholders`({
- ClassNameIsRequired: "A class name is required.",
- UnexpectedSpace: "Unexpected space in placeholder."
- });
- var _default = superClass => class PlaceholdersParserMixin extends superClass {
- parsePlaceholder(expectedNode) {
- if (this.match(142)) {
- const node = this.startNode();
- this.next();
- this.assertNoSpace();
- node.name = super.parseIdentifier(true);
- this.assertNoSpace();
- this.expect(142);
- return this.finishPlaceholder(node, expectedNode);
- }
- }
- finishPlaceholder(node, expectedNode) {
- const isFinished = !!(node.expectedNode && node.type === "Placeholder");
- node.expectedNode = expectedNode;
- return isFinished ? node : this.finishNode(node, "Placeholder");
- }
- getTokenFromCode(code) {
- if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {
- this.finishOp(142, 2);
- } else {
- super.getTokenFromCode(code);
- }
- }
- parseExprAtom(refExpressionErrors) {
- return this.parsePlaceholder("Expression") || super.parseExprAtom(refExpressionErrors);
- }
- parseIdentifier(liberal) {
- return this.parsePlaceholder("Identifier") || super.parseIdentifier(liberal);
- }
- checkReservedWord(word, startLoc, checkKeywords, isBinding) {
- if (word !== undefined) {
- super.checkReservedWord(word, startLoc, checkKeywords, isBinding);
- }
- }
- parseBindingAtom() {
- return this.parsePlaceholder("Pattern") || super.parseBindingAtom();
- }
- isValidLVal(type, isParenthesized, binding) {
- return type === "Placeholder" || super.isValidLVal(type, isParenthesized, binding);
- }
- toAssignable(node, isLHS) {
- if (node && node.type === "Placeholder" && node.expectedNode === "Expression") {
- node.expectedNode = "Pattern";
- } else {
- super.toAssignable(node, isLHS);
- }
- }
- chStartsBindingIdentifier(ch, pos) {
- if (super.chStartsBindingIdentifier(ch, pos)) {
- return true;
- }
- const nextToken = this.lookahead();
- if (nextToken.type === 142) {
- return true;
- }
- return false;
- }
- verifyBreakContinue(node, isBreak) {
- if (node.label && node.label.type === "Placeholder") return;
- super.verifyBreakContinue(node, isBreak);
- }
- parseExpressionStatement(node, expr) {
- if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) {
- return super.parseExpressionStatement(node, expr);
- }
- if (this.match(14)) {
- const stmt = node;
- stmt.label = this.finishPlaceholder(expr, "Identifier");
- this.next();
- stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();
- return this.finishNode(stmt, "LabeledStatement");
- }
- this.semicolon();
- node.name = expr.name;
- return this.finishPlaceholder(node, "Statement");
- }
- parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) {
- return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse);
- }
- parseFunctionId(requireId) {
- return this.parsePlaceholder("Identifier") || super.parseFunctionId(requireId);
- }
- parseClass(node, isStatement, optionalId) {
- const type = isStatement ? "ClassDeclaration" : "ClassExpression";
- this.next();
- const oldStrict = this.state.strict;
- const placeholder = this.parsePlaceholder("Identifier");
- if (placeholder) {
- if (this.match(81) || this.match(142) || this.match(5)) {
- node.id = placeholder;
- } else if (optionalId || !isStatement) {
- node.id = null;
- node.body = this.finishPlaceholder(placeholder, "ClassBody");
- return this.finishNode(node, type);
- } else {
- throw this.raise(PlaceholderErrors.ClassNameIsRequired, {
- at: this.state.startLoc
- });
- }
- } else {
- this.parseClassId(node, isStatement, optionalId);
- }
- super.parseClassSuper(node);
- node.body = this.parsePlaceholder("ClassBody") || super.parseClassBody(!!node.superClass, oldStrict);
- return this.finishNode(node, type);
- }
- parseExport(node, decorators) {
- const placeholder = this.parsePlaceholder("Identifier");
- if (!placeholder) return super.parseExport(node, decorators);
- if (!this.isContextual(97) && !this.match(12)) {
- node.specifiers = [];
- node.source = null;
- node.declaration = this.finishPlaceholder(placeholder, "Declaration");
- return this.finishNode(node, "ExportNamedDeclaration");
- }
- this.expectPlugin("exportDefaultFrom");
- const specifier = this.startNode();
- specifier.exported = placeholder;
- node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
- return super.parseExport(node, decorators);
- }
- isExportDefaultSpecifier() {
- if (this.match(65)) {
- const next = this.nextTokenStart();
- if (this.isUnparsedContextual(next, "from")) {
- if (this.input.startsWith((0, _types.tokenLabelName)(142), this.nextTokenStartSince(next + 4))) {
- return true;
- }
- }
- }
- return super.isExportDefaultSpecifier();
- }
- maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier) {
- var _specifiers;
- if ((_specifiers = node.specifiers) != null && _specifiers.length) {
- return true;
- }
- return super.maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier);
- }
- checkExport(node) {
- const {
- specifiers
- } = node;
- if (specifiers != null && specifiers.length) {
- node.specifiers = specifiers.filter(node => node.exported.type === "Placeholder");
- }
- super.checkExport(node);
- node.specifiers = specifiers;
- }
- parseImport(node) {
- const placeholder = this.parsePlaceholder("Identifier");
- if (!placeholder) return super.parseImport(node);
- node.specifiers = [];
- if (!this.isContextual(97) && !this.match(12)) {
- node.source = this.finishPlaceholder(placeholder, "StringLiteral");
- this.semicolon();
- return this.finishNode(node, "ImportDeclaration");
- }
- const specifier = this.startNodeAtNode(placeholder);
- specifier.local = placeholder;
- node.specifiers.push(this.finishNode(specifier, "ImportDefaultSpecifier"));
- if (this.eat(12)) {
- const hasStarImport = this.maybeParseStarImportSpecifier(node);
- if (!hasStarImport) this.parseNamedImportSpecifiers(node);
- }
- this.expectContextual(97);
- node.source = this.parseImportSource();
- this.semicolon();
- return this.finishNode(node, "ImportDeclaration");
- }
- parseImportSource() {
- return this.parsePlaceholder("StringLiteral") || super.parseImportSource();
- }
- assertNoSpace() {
- if (this.state.start > this.state.lastTokEndLoc.index) {
- this.raise(PlaceholderErrors.UnexpectedSpace, {
- at: this.state.lastTokEndLoc
- });
- }
- }
- };
- exports.default = _default;
- //# sourceMappingURL=placeholders.js.map
|