Forked from wesleyegberto/convert-postman-to-insomnia.js
Created
August 3, 2022 18:51
-
-
Save tadeubdev/34bea6bfda088b65c9fcbe7dc5ec375e to your computer and use it in GitHub Desktop.
Revisions
-
wesleyegberto created this gist
Sep 22, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,208 @@ /** * Script to parse a Postman backupt to Insomnia keeping the same structure. * * It parses: * - Folders * - Requests * - Environments * * Notes: Insomnia doesn't accept vars with dots, if you are using you must replace yours URLs manually (see ENVIRONMENTS_EXPORTS). */ 'use strict'; const fs = require('fs'); const postmanDump = require('./Backup.postman_dump.json'); if (!postmanDump) { throw new Error('Invalid JSON'); } if (postmanDump.version != 1) { throw new Error('Version not supported, try 1!'); } function generateId(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } String.prototype.toId = function toId() { return this.replace(/-/g, ''); }; // always a new workspace to avoid problems const WORKDIR = 'wrk_' + generateId(20); const ENVBASE = 'env_' + generateId(20); const resources = [ { _id: WORKDIR, _type: 'workspace', name: 'Postman Dump ' + (new Date()).toISOString(), parentId: null, scope: null, }, { _id: 'spc_' + generateId(20), _type: 'api_spec', parentId: WORKDIR, fileName: 'Insomnia', contents: '', contentType: 'yaml', }, { _id: ENVBASE, _type: 'environment', parentId: WORKDIR, name: 'Base Environment', data: {}, dataPropertyOrder: {}, color: null, isPrivate: false, metaSortKey: 1597080078957, }, ]; function mapRequest(request) { const parentId = request.folder|| request.collectionId; const mapped = { _id: 'req_' + request.id.toId(), _type: 'request', parentId: 'fld_' + parentId.toId(), name: request.name, description: request.description || '', url: request.url || '', method: request.method, }; if (request.headerData && request.headerData.length) { mapped.headers = request.headerData.map(header => ({ id: 'pair_' + generateId(10), name: header.key, value: header.value, })); } if (request.queryParams && request.queryParams.length) { mapped.parameters = request.queryParams.map(param => ({ id: 'pair_' + generateId(10), name: param.key, value: param.value, disabled: !param.enabled, })); } if (request.auth) { mapped.authentication = { type: request.auth.type }; if (request.auth.bearer && request.auth.bearer.length > 0) { mapped.authentication.token = request.auth.bearer[0].value } } if (request.dataMode == 'urlencoded' && request.data && request.data.length) { mapped.body = { mimeType: 'application/x-www-form-urlencoded', params: request.data.map(param => ({ id: 'pair_' + generateId(10), name: param.key, value: param.value })) }; } if (request.dataMode == 'raw') { mapped.body = { mimeType: 'application/json', text: request.rawModeData, }; } return mapped; } function parseFolder(collection, folders) { const parent = { _id: 'fld_' + collection.id.toId(), _type: 'request_group', name: collection.name, description: collection.description, parentId: collection.parentId, }; resources.push(parent); if (collection.folders_order && collection.folders_order.length) { console.log(collection.id, '- Verifying folders'); folders.forEach(folder => { if (collection.folders_order.findIndex(fId => fId == folder.id) > -1) { console.log('Parent: ', collection.id, ':', parent._id, ' -> ', folder.id); folder.parentId = parent._id; parseFolder(folder, folders); } }); } } function parseCollection(collection) { collection.parentId = WORKDIR; console.log('Collection', collection.name, '- Folders:', collection.folders.length, '- Requests:', collection.requests.length); parseFolder(collection, collection.folders); if (collection.requests && collection.requests.length) { collection.requests.forEach(request => { resources.push(mapRequest(request)); }); } } console.log('Starting parsing'); if (postmanDump && postmanDump.collections) { console.log('Parsing collections'); postmanDump.collections.forEach(collection => parseCollection(collection)); } // ENVIRONMENTS_EXPORTS if (postmanDump.environments && postmanDump.environments.length) { console.log('Parsing environments'); postmanDump.environments.forEach(env => { console.log('Adding environment:', env.name); const mapped = { _id: 'env_' + env.id.toId(), _type: 'environment', parentId: ENVBASE, name: env.name, data: {} }; if (env.values && env.values.length) { env.values.forEach(item => { const key = item.key.replace(/[-.]/g, '_'); mapped.data[key] = item.value; }); } resources.push(mapped); }); } console.log('Finished parsing, exporting JSON'); const data = JSON.stringify({ _type: 'export', __export_format: 4, resources: resources, }); fs.writeFileSync('insomnia-converted-from-postman.json', data); console.log('Exported finished');