66 lines
2.4 KiB
JavaScript
66 lines
2.4 KiB
JavaScript
var _ = require('lodash'),
|
|
sdk = require('postman-collection'),
|
|
|
|
/**
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
FUNCTION = 'function',
|
|
|
|
SAFE_CONTEXT_PROPERTIES = ['replayState', 'coords'];
|
|
|
|
/**
|
|
* Creates a context object to be used with `http-request.command` extension.
|
|
*
|
|
* @function createItemContext
|
|
*
|
|
* @param {Object} payload
|
|
* @param {Item} payload.item
|
|
* @param {Object} [payload.coords]
|
|
* @param {Object} [defaults]
|
|
* @param {Object} [defaults.replayState]
|
|
* @param {Object} [defaults.coords]
|
|
*
|
|
* @returns {ItemContext}
|
|
*/
|
|
module.exports = function (payload, defaults) {
|
|
// extract properties from defaults that can/should be reused in new context
|
|
var context = defaults ? _.pick(defaults, SAFE_CONTEXT_PROPERTIES) : {};
|
|
|
|
// set cursor to context
|
|
!context.coords && (context.coords = payload.coords);
|
|
|
|
// save original item for reference
|
|
context.originalItem = payload.item;
|
|
|
|
// we clone item from the payload, so that we can make any changes we need there, without mutating the
|
|
// collection
|
|
context.item = new sdk.Item(payload.item.toJSON());
|
|
|
|
// get a reference to the Auth instance from the item, so changes are synced back
|
|
context.auth = context.originalItem.getAuth();
|
|
|
|
// Make sure run is not errored out if older version of collection SDK is used.
|
|
// @todo remove this safety check in the next release
|
|
if (typeof context.originalItem.getProtocolProfileBehaviorResolved === FUNCTION) {
|
|
// get protocolProfileBehavior for the item, also inherited from parent
|
|
context.protocolProfileBehavior = context.originalItem.getProtocolProfileBehaviorResolved();
|
|
}
|
|
else {
|
|
// get protocolProfileBehavior for the item
|
|
context.protocolProfileBehavior = context.originalItem.protocolProfileBehavior;
|
|
}
|
|
|
|
/**
|
|
* @typedef {Object} ItemContext
|
|
* @property {Object} coords - current cursor
|
|
* @property {Item} originalItem - reference to the item in the collection
|
|
* @property {Item} item - Holds a copy of the item given in the payload, so that it can be manipulated
|
|
* as necessary
|
|
* @property {RequestAuthBase|undefined} auth - If present, is the instance of Auth in the collection, which
|
|
* is changed as necessary using intermediate requests, etc.
|
|
* @property {ReplayState} replayState - has context on number of replays(if any) for this request
|
|
*/
|
|
return context;
|
|
};
|