UNPKG

postman-sandbox

Version:

Sandbox for Postman Scripts to run in Node.js or browser

75 lines (59 loc) 1.9 kB
class Datasets { constructor (id, bridge, timers) { this._bridge = bridge; this._timers = timers; this._event = `execution.datasets.${id}`; this._handler = (eventId, ...args) => { this._timers.clearEvent(eventId, ...args); }; this._bridge.on(this._event, this._handler); } exec (...args) { return new Promise((resolve, reject) => { const eventId = this._timers.setEvent((err, ...args) => { if (err) { return reject(err instanceof Error ? err : new Error(err.message || err)); } resolve(...args); }); this._bridge.dispatch(this._event, eventId, ...args); }); } dispose () { this._bridge.off(this._event, this._handler); } } async function *iterateRows (rows) { for (const row of rows) { yield row; } } function wrapQueryResult (result) { const safeRows = result && Array.isArray(result.rows) ? result.rows : [], wrapped = { columns: (result && result.columns) || [], rows: iterateRows(safeRows) }; if (result && result.staleDatasources) { wrapped.staleDatasources = result.staleDatasources; } return wrapped; } const getDatasetsInterface = (datasets) => { return function (datasetId) { return { executeView: async (viewId, params) => { const result = await datasets('executeView', datasetId, viewId, params); return wrapQueryResult(result); }, executeQuery: async (sql, params) => { const result = await datasets('executeQuery', datasetId, sql, params); return wrapQueryResult(result); } }; }; }; module.exports = { Datasets, getDatasetsInterface };