Innovenergy_trunk/frontend/node_modules/testcafe-hammerhead/lib/processing/script/node-builder.js

207 lines
12 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTempVarsDeclaration = exports.createHtmlProcessorWrapper = exports.createExpandedConcatOperation = exports.createArrayWrapper = exports.createGetPostMessageMethodCall = exports.createGetProxyUrlMethodCall = exports.getProxyUrlLiteral = exports.createGetEvalMethodCall = exports.createComputedPropertySetWrapper = exports.createComputedPropertyGetWrapper = exports.createPropertyGetWrapper = exports.createMethodCallWrapper = exports.createPropertySetWrapper = exports.createLocationSetWrapper = exports.createLocationGetWrapper = exports.createProcessScriptMethodCall = exports.createVariableDeclaration = exports.createVariableDeclarator = exports.createBlockStatement = exports.createAssignmentExprStmt = exports.createSimpleLiteral = exports.createConditionalExpression = exports.createUndefined = exports.createReturnStatement = exports.createSequenceExpression = exports.createBinaryExpression = exports.createMemberExpression = exports.createArrayExpression = exports.createSimpleCallExpression = exports.createAssignmentExpression = exports.createExpressionStatement = exports.createIdentifier = void 0;
const esotope_hammerhead_1 = require("esotope-hammerhead");
const instruction_1 = __importDefault(require("./instruction"));
const url_1 = require("../../utils/url");
const temp_variables_1 = __importDefault(require("./transformers/temp-variables"));
function createIdentifier(name) {
return { type: esotope_hammerhead_1.Syntax.Identifier, name };
}
exports.createIdentifier = createIdentifier;
function createExpressionStatement(expression) {
return { type: esotope_hammerhead_1.Syntax.ExpressionStatement, expression };
}
exports.createExpressionStatement = createExpressionStatement;
function createAssignmentExpression(left, operator, right) {
//@ts-ignore the `right` value can actually be null, but the AssignmentExpression type definition
// does not allow to the `right` value be null
return { type: esotope_hammerhead_1.Syntax.AssignmentExpression, operator, left, right };
}
exports.createAssignmentExpression = createAssignmentExpression;
function createSimpleCallExpression(callee, args) {
return { type: esotope_hammerhead_1.Syntax.CallExpression, callee, arguments: args, optional: false };
}
exports.createSimpleCallExpression = createSimpleCallExpression;
function createArrayExpression(elements) {
return { type: esotope_hammerhead_1.Syntax.ArrayExpression, elements };
}
exports.createArrayExpression = createArrayExpression;
function createMemberExpression(object, property, computed) {
return { type: esotope_hammerhead_1.Syntax.MemberExpression, object, property, computed, optional: false };
}
exports.createMemberExpression = createMemberExpression;
function createBinaryExpression(left, operator, right) {
return { type: esotope_hammerhead_1.Syntax.BinaryExpression, left, right, operator };
}
exports.createBinaryExpression = createBinaryExpression;
function createSequenceExpression(expressions) {
//@ts-ignore SequenceExpression can actually
// TODO: To write to https://github.com/estree/estree that SequenceExpression must include Pattern
return { type: esotope_hammerhead_1.Syntax.SequenceExpression, expressions };
}
exports.createSequenceExpression = createSequenceExpression;
function createThisExpression() {
return { type: esotope_hammerhead_1.Syntax.ThisExpression };
}
function createLogicalExpression(left, operator, right) {
return { type: esotope_hammerhead_1.Syntax.LogicalExpression, left, right, operator };
}
function createReturnStatement(argument = null) {
return { type: esotope_hammerhead_1.Syntax.ReturnStatement, argument };
}
exports.createReturnStatement = createReturnStatement;
function createFunctionExpression(id, params, body, async = false, generator = false) {
return { type: esotope_hammerhead_1.Syntax.FunctionExpression, id, params, body, async, generator };
}
function createUnaryExpression(operator, argument) {
return { type: esotope_hammerhead_1.Syntax.UnaryExpression, operator, prefix: true, argument };
}
function createUndefined() {
return createUnaryExpression('void', createSimpleLiteral(0));
}
exports.createUndefined = createUndefined;
function createConditionalExpression(test, consequent, alternate) {
return { type: esotope_hammerhead_1.Syntax.ConditionalExpression, test, consequent, alternate };
}
exports.createConditionalExpression = createConditionalExpression;
function createSimpleLiteral(value) {
return { type: esotope_hammerhead_1.Syntax.Literal, value };
}
exports.createSimpleLiteral = createSimpleLiteral;
function createAssignmentExprStmt(left, right) {
return createExpressionStatement(createAssignmentExpression(left, '=', right));
}
exports.createAssignmentExprStmt = createAssignmentExprStmt;
function createBlockStatement(body) {
return { type: esotope_hammerhead_1.Syntax.BlockStatement, body };
}
exports.createBlockStatement = createBlockStatement;
function createVariableDeclarator(id, init = null) {
return { type: esotope_hammerhead_1.Syntax.VariableDeclarator, id, init };
}
exports.createVariableDeclarator = createVariableDeclarator;
function createVariableDeclaration(kind, declarations) {
return { type: esotope_hammerhead_1.Syntax.VariableDeclaration, declarations, kind };
}
exports.createVariableDeclaration = createVariableDeclaration;
function createProcessScriptMethodCall(arg, isApply) {
const args = [arg];
const processScriptIdentifier = createIdentifier(instruction_1.default.processScript);
if (isApply)
args.push(createSimpleLiteral(true));
return createSimpleCallExpression(processScriptIdentifier, args);
}
exports.createProcessScriptMethodCall = createProcessScriptMethodCall;
function createLocationGetWrapper(location) {
const getLocationIdentifier = createIdentifier(instruction_1.default.getLocation);
return createSimpleCallExpression(getLocationIdentifier, [location]);
}
exports.createLocationGetWrapper = createLocationGetWrapper;
function createLocationSetWrapper(locationIdentifier, value, wrapWithSequence) {
const tempIdentifier = createIdentifier(temp_variables_1.default.generateName());
const setLocationIdentifier = createIdentifier(instruction_1.default.setLocation);
const setLocationCall = createSimpleCallExpression(setLocationIdentifier, [locationIdentifier, tempIdentifier]);
const locationAssignment = createAssignmentExpression(locationIdentifier, '=', tempIdentifier);
const callIdentifier = createIdentifier('call');
const functionWrapper = createFunctionExpression(null, [], createBlockStatement([
createVariableDeclaration('var', [createVariableDeclarator(tempIdentifier, value)]),
createReturnStatement(createLogicalExpression(setLocationCall, '||', locationAssignment)),
]));
const functionWrapperCallMember = createMemberExpression(functionWrapper, callIdentifier, false);
const functionWrapperCall = createSimpleCallExpression(functionWrapperCallMember, [createThisExpression()]);
if (wrapWithSequence)
return createSequenceExpression([createSimpleLiteral(0), functionWrapperCall]);
return functionWrapperCall;
}
exports.createLocationSetWrapper = createLocationSetWrapper;
function createPropertySetWrapper(propertyName, obj, value) {
const setPropertyIdentifier = createIdentifier(instruction_1.default.setProperty);
return createSimpleCallExpression(setPropertyIdentifier, [obj, createSimpleLiteral(propertyName), value]);
}
exports.createPropertySetWrapper = createPropertySetWrapper;
function createMethodCallWrapper(owner, method, methodArgs, optional = false) {
const callMethodIdentifier = createIdentifier(instruction_1.default.callMethod);
const methodArgsArray = createArrayExpression(methodArgs);
const args = [owner, method, methodArgsArray];
if (optional)
args.push(createSimpleLiteral(optional));
return createSimpleCallExpression(callMethodIdentifier, args);
}
exports.createMethodCallWrapper = createMethodCallWrapper;
function createPropertyGetWrapper(propertyName, owner, optional = false) {
const getPropertyIdentifier = createIdentifier(instruction_1.default.getProperty);
const args = [owner, createSimpleLiteral(propertyName)];
if (optional)
args.push(createSimpleLiteral(optional));
return createSimpleCallExpression(getPropertyIdentifier, args);
}
exports.createPropertyGetWrapper = createPropertyGetWrapper;
function createComputedPropertyGetWrapper(property, owner, optional = false) {
const getPropertyIdentifier = createIdentifier(instruction_1.default.getProperty);
const args = [owner, property];
if (optional)
args.push(createSimpleLiteral(optional));
return createSimpleCallExpression(getPropertyIdentifier, args);
}
exports.createComputedPropertyGetWrapper = createComputedPropertyGetWrapper;
function createComputedPropertySetWrapper(property, owner, value) {
const setPropertyIdentifier = createIdentifier(instruction_1.default.setProperty);
return createSimpleCallExpression(setPropertyIdentifier, [owner, property, value]);
}
exports.createComputedPropertySetWrapper = createComputedPropertySetWrapper;
function createGetEvalMethodCall(node) {
const getEvalIdentifier = createIdentifier(instruction_1.default.getEval);
return createSimpleCallExpression(getEvalIdentifier, [node]);
}
exports.createGetEvalMethodCall = createGetEvalMethodCall;
function getProxyUrlLiteral(source, resolver) {
const proxyUrl = resolver(String(source.value), (0, url_1.getResourceTypeString)({ isScript: true }));
return createSimpleLiteral(proxyUrl);
}
exports.getProxyUrlLiteral = getProxyUrlLiteral;
function createGetProxyUrlMethodCall(arg, baseUrl) {
const getProxyUrlIdentifier = createIdentifier(instruction_1.default.getProxyUrl);
const args = [arg];
if (baseUrl)
args.push(createSimpleLiteral(baseUrl));
return createSimpleCallExpression(getProxyUrlIdentifier, args);
}
exports.createGetProxyUrlMethodCall = createGetProxyUrlMethodCall;
function createGetPostMessageMethodCall(node) {
const getPostMessageIdentifier = createIdentifier(instruction_1.default.getPostMessage);
const args = node.type === esotope_hammerhead_1.Syntax.MemberExpression
? [node.object]
: [createSimpleLiteral(null), node];
return createSimpleCallExpression(getPostMessageIdentifier, args);
}
exports.createGetPostMessageMethodCall = createGetPostMessageMethodCall;
function createArrayWrapper(array) {
const arrayIdentifier = createIdentifier(instruction_1.default.arrayFrom);
return createSimpleCallExpression(arrayIdentifier, [array]);
}
exports.createArrayWrapper = createArrayWrapper;
function createExpandedConcatOperation(left, right) {
return createAssignmentExpression(left, '=', createBinaryExpression(left, '+', right));
}
exports.createExpandedConcatOperation = createExpandedConcatOperation;
function createHtmlProcessorWrapper(node) {
const processHtmlIdentifier = createIdentifier(instruction_1.default.processHtml);
const parentIdentifier = createIdentifier('parent');
const windowIdentifier = createIdentifier('window');
const processHtmlThroughParent = createMemberExpression(parentIdentifier, processHtmlIdentifier, false);
const processHtmlCall = createSimpleCallExpression(processHtmlThroughParent, [windowIdentifier, node.expression]);
return createExpressionStatement(processHtmlCall);
}
exports.createHtmlProcessorWrapper = createHtmlProcessorWrapper;
function createTempVarsDeclaration(tempVars) {
const declarations = [];
for (const variable of tempVars)
declarations.push(createVariableDeclarator(createIdentifier(variable)));
return createVariableDeclaration('var', declarations);
}
exports.createTempVarsDeclaration = createTempVarsDeclaration;