Spaces:
Sleeping
Sleeping
| ; | |
| 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) { | |
| var _expr$extra; | |
| if (expr.type !== "Placeholder" || (_expr$extra = expr.extra) != null && _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 | |