86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
const _ = require('lodash'),
|
|
sdk = require('postman-collection'),
|
|
|
|
PROPERTY = {
|
|
REQUEST: 'request',
|
|
SCRIPT: 'script',
|
|
DATA: 'data',
|
|
COOKIES: 'cookies',
|
|
RESPONSE: 'response'
|
|
},
|
|
|
|
TARGETS_WITH_REQUEST = {
|
|
test: true,
|
|
prerequest: true
|
|
},
|
|
|
|
TARGETS_WITH_RESPONSE = {
|
|
test: true
|
|
},
|
|
|
|
CONTEXT_VARIABLE_SCOPES = ['_variables', 'environment', 'collectionVariables', 'globals'],
|
|
|
|
trackingOptions = { autoCompact: true };
|
|
|
|
class Execution {
|
|
constructor (id, event, context, options) {
|
|
this.id = id;
|
|
this.target = event.listen || PROPERTY.SCRIPT;
|
|
this.legacy = options.legacy || {};
|
|
this.cursor = _.isObject(options.cursor) ? options.cursor : {};
|
|
|
|
this.data = _.get(context, PROPERTY.DATA, {});
|
|
this.cookies = new sdk.CookieList(null, context.cookies);
|
|
|
|
CONTEXT_VARIABLE_SCOPES.forEach((variableScope) => {
|
|
// normalize variable scope instances
|
|
this[variableScope] = sdk.VariableScope.isVariableScope(context[variableScope]) ?
|
|
context[variableScope] : new sdk.VariableScope(context[variableScope]);
|
|
|
|
// enable change tracking
|
|
this[variableScope].enableTracking(trackingOptions);
|
|
});
|
|
|
|
if (TARGETS_WITH_REQUEST[this.target] || _.has(context, PROPERTY.REQUEST)) {
|
|
/**
|
|
* @note:
|
|
* this reference is passed on as `pm.request`, pm api adds helper functions like `to` to `pm.request`
|
|
* sandbox overrides collection Request.prototype.toJSON to remove helpers before toJSON, see `purse.js`
|
|
*/
|
|
this.request = sdk.Request.isRequest(context.request) ? context.request : new sdk.Request(context.request);
|
|
}
|
|
|
|
if (TARGETS_WITH_RESPONSE[this.target] || _.has(context, PROPERTY.RESPONSE)) {
|
|
/**
|
|
* @note:
|
|
* this reference is passed on as `pm.response`, pm api adds helper functions like `to` to `pm.response`
|
|
* sandbox overrides collection Response.prototype.toJSON to remove helpers before toJSON, see `purse.js`
|
|
*/
|
|
this.response = sdk.Response.isResponse(context.response) ?
|
|
context.response : new sdk.Response(context.response);
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} Return
|
|
*
|
|
* @property {Boolean} async - true if the executed script was async, false otherwise
|
|
* @property {Visualizer} visualizer - visualizer data
|
|
* @property {*} nextRequest - next request to send
|
|
*/
|
|
this.return = {};
|
|
}
|
|
|
|
toJSON () {
|
|
return _.mapValues(this, function (value) {
|
|
// if there is no specific json serialiser, return the raw value
|
|
if (!_.isFunction(value && value.toJSON)) {
|
|
return value;
|
|
}
|
|
|
|
return value.toJSON();
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = Execution;
|