mirror of
https://github.com/crazy-max/ghaction-upx.git
synced 2024-12-26 09:56:08 -07:00
204 lines
6.8 KiB
JavaScript
204 lines
6.8 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
var _types = require("../tokenizer/types");
|
||
|
|
||
|
var N = _interopRequireWildcard(require("../types"));
|
||
|
|
||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||
|
|
||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||
|
|
||
|
_types.types.placeholder = new _types.TokenType("%%", {
|
||
|
startsExpr: true
|
||
|
});
|
||
|
|
||
|
var _default = superClass => class extends superClass {
|
||
|
parsePlaceholder(expectedNode) {
|
||
|
if (this.match(_types.types.placeholder)) {
|
||
|
const node = this.startNode();
|
||
|
this.next();
|
||
|
this.assertNoSpace("Unexpected space in placeholder.");
|
||
|
node.name = super.parseIdentifier(true);
|
||
|
this.assertNoSpace("Unexpected space in placeholder.");
|
||
|
this.expect(_types.types.placeholder);
|
||
|
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) {
|
||
|
return this.finishOp(_types.types.placeholder, 2);
|
||
|
}
|
||
|
|
||
|
return super.getTokenFromCode(...arguments);
|
||
|
}
|
||
|
|
||
|
parseExprAtom() {
|
||
|
return this.parsePlaceholder("Expression") || super.parseExprAtom(...arguments);
|
||
|
}
|
||
|
|
||
|
parseIdentifier() {
|
||
|
return this.parsePlaceholder("Identifier") || super.parseIdentifier(...arguments);
|
||
|
}
|
||
|
|
||
|
checkReservedWord(word) {
|
||
|
if (word !== undefined) super.checkReservedWord(...arguments);
|
||
|
}
|
||
|
|
||
|
parseBindingAtom() {
|
||
|
return this.parsePlaceholder("Pattern") || super.parseBindingAtom(...arguments);
|
||
|
}
|
||
|
|
||
|
checkLVal(expr) {
|
||
|
if (expr.type !== "Placeholder") super.checkLVal(...arguments);
|
||
|
}
|
||
|
|
||
|
toAssignable(node) {
|
||
|
if (node && node.type === "Placeholder" && node.expectedNode === "Expression") {
|
||
|
node.expectedNode = "Pattern";
|
||
|
return node;
|
||
|
}
|
||
|
|
||
|
return super.toAssignable(...arguments);
|
||
|
}
|
||
|
|
||
|
verifyBreakContinue(node) {
|
||
|
if (node.label && node.label.type === "Placeholder") return;
|
||
|
super.verifyBreakContinue(...arguments);
|
||
|
}
|
||
|
|
||
|
parseExpressionStatement(node, expr) {
|
||
|
if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) {
|
||
|
return super.parseExpressionStatement(...arguments);
|
||
|
}
|
||
|
|
||
|
if (this.match(_types.types.colon)) {
|
||
|
const stmt = node;
|
||
|
stmt.label = this.finishPlaceholder(expr, "Identifier");
|
||
|
this.next();
|
||
|
stmt.body = this.parseStatement("label");
|
||
|
return this.finishNode(stmt, "LabeledStatement");
|
||
|
}
|
||
|
|
||
|
this.semicolon();
|
||
|
node.name = expr.name;
|
||
|
return this.finishPlaceholder(node, "Statement");
|
||
|
}
|
||
|
|
||
|
parseBlock() {
|
||
|
return this.parsePlaceholder("BlockStatement") || super.parseBlock(...arguments);
|
||
|
}
|
||
|
|
||
|
parseFunctionId() {
|
||
|
return this.parsePlaceholder("Identifier") || super.parseFunctionId(...arguments);
|
||
|
}
|
||
|
|
||
|
parseClass(node, isStatement, optionalId) {
|
||
|
const type = isStatement ? "ClassDeclaration" : "ClassExpression";
|
||
|
this.next();
|
||
|
this.takeDecorators(node);
|
||
|
const placeholder = this.parsePlaceholder("Identifier");
|
||
|
|
||
|
if (placeholder) {
|
||
|
if (this.match(_types.types._extends) || this.match(_types.types.placeholder) || this.match(_types.types.braceL)) {
|
||
|
node.id = placeholder;
|
||
|
} else if (optionalId || !isStatement) {
|
||
|
node.id = null;
|
||
|
node.body = this.finishPlaceholder(placeholder, "ClassBody");
|
||
|
return this.finishNode(node, type);
|
||
|
} else {
|
||
|
this.unexpected(null, "A class name is required");
|
||
|
}
|
||
|
} else {
|
||
|
this.parseClassId(node, isStatement, optionalId);
|
||
|
}
|
||
|
|
||
|
this.parseClassSuper(node);
|
||
|
node.body = this.parsePlaceholder("ClassBody") || this.parseClassBody(!!node.superClass);
|
||
|
return this.finishNode(node, type);
|
||
|
}
|
||
|
|
||
|
parseExport(node) {
|
||
|
const placeholder = this.parsePlaceholder("Identifier");
|
||
|
if (!placeholder) return super.parseExport(...arguments);
|
||
|
|
||
|
if (!this.isContextual("from") && !this.match(_types.types.comma)) {
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
maybeParseExportDefaultSpecifier(node) {
|
||
|
if (node.specifiers && node.specifiers.length > 0) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return super.maybeParseExportDefaultSpecifier(...arguments);
|
||
|
}
|
||
|
|
||
|
checkExport(node) {
|
||
|
const {
|
||
|
specifiers
|
||
|
} = node;
|
||
|
|
||
|
if (specifiers && 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(...arguments);
|
||
|
node.specifiers = [];
|
||
|
|
||
|
if (!this.isContextual("from") && !this.match(_types.types.comma)) {
|
||
|
node.source = this.finishPlaceholder(placeholder, "StringLiteral");
|
||
|
this.semicolon();
|
||
|
return this.finishNode(node, "ImportDeclaration");
|
||
|
}
|
||
|
|
||
|
const specifier = this.startNodeAtNode(placeholder);
|
||
|
specifier.local = placeholder;
|
||
|
this.finishNode(specifier, "ImportDefaultSpecifier");
|
||
|
node.specifiers.push(specifier);
|
||
|
|
||
|
if (this.eat(_types.types.comma)) {
|
||
|
const hasStarImport = this.maybeParseStarImportSpecifier(node);
|
||
|
if (!hasStarImport) this.parseNamedImportSpecifiers(node);
|
||
|
}
|
||
|
|
||
|
this.expectContextual("from");
|
||
|
node.source = this.parseImportSource();
|
||
|
this.semicolon();
|
||
|
return this.finishNode(node, "ImportDeclaration");
|
||
|
}
|
||
|
|
||
|
parseImportSource() {
|
||
|
return this.parsePlaceholder("StringLiteral") || super.parseImportSource(...arguments);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
exports.default = _default;
|