├── .gitignore ├── README.md ├── package.json ├── bin └── index.js └── lib.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules 3 | *collections* 4 | *.http -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Generator for converting postman json to vscode rest client 2 | 3 | ![Image](https://i.imgur.com/LYVq22b.gif) 4 | 5 | ## How to use 6 | 7 | ```bash 8 | npm -g i vsrest-postman-generator 9 | 10 | vsrest {file-postmant}.json 11 | ``` 12 | 13 | output `collections` will be attached on your current working directory -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vsrest-postman-generator", 3 | "version": "1.0.2", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "bin": { 10 | "vsrest": "./bin/index.js" 11 | }, 12 | "author": "alfathdirk@gmail.com", 13 | "license": "MIT" 14 | } 15 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const convert = require('../lib.js'); 4 | const { cwd } = require('process'); 5 | const fileArg = process.argv.slice(2)[0]; 6 | const fs = require('fs'); 7 | let pathDir = cwd()+ '/' + fileArg; 8 | try { 9 | // console.log(fileArg); 10 | let readFile = fs.readFileSync(pathDir, 'utf8'); 11 | convert(JSON.parse(readFile).item); 12 | } catch (error) { 13 | console.error('error on convert', error.message); 14 | } -------------------------------------------------------------------------------- /lib.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | let result = ''; 4 | let dir = 'collections'; 5 | let defaultEnv = ` 6 | @url = https://sample.com/ 7 | @token = token 8 | @contentType = application/json 9 | `; 10 | 11 | let parseDataToRest = (val) => { 12 | const baseUrl = val?.request?.url?.raw; 13 | let str = '' 14 | str += '### '+ val.name+ '\n'; 15 | let urls = val?.request?.url?.query?.map((v, k) => { 16 | if(v.key) { 17 | return `\n${v.disabled ? '#' : ''}\t${k > 0 ? '&' : '?'}${v.key}=${v.value}`; 18 | } 19 | }).join(''); 20 | 21 | str += `${val.request.method} ${baseUrl?.split('?')[0]} ${urls || ''}\n`; 22 | // console.log(val?.request?.url?.raw?.replace(/(\?|&)/g, '\n\t$1') || 'no data'); 23 | // str += `${val.request.method} ${val?.request?.url?.raw?.replace(/(\?|&)/g, '\n\t$1') || 'no data'}\n`; 24 | if(val?.request?.body?.mode !== 'formdata') { 25 | val.request.header.map((v, k) => { 26 | str += `${v.disabled ? '# ' : ''}${v.key}: ${v.value}\n`; 27 | }); 28 | str += '\n'; 29 | } 30 | 31 | if(val.request.method !== 'GET' && val.request.body) { 32 | const { mode } = val.request.body; 33 | switch (mode) { 34 | case 'formdata': 35 | str += 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW\n\n'; 36 | val.request.body.formdata.map((v, k) => { 37 | str += `------WebKitFormBoundary7MA4YWxkTrZu0gW\nContent-Disposition: form-data; name="${v.key}"${v.type === 'file' ? `; filename="${v.key}.png"\nContent-Type: image/png\n\n< ./${v.key}.png\n`: `\n\n${v.value}\n`}`; 38 | }); 39 | str += `------WebKitFormBoundary7MA4YWxkTrZu0gW--\n`; 40 | break; 41 | case 'urlencoded': 42 | val.request.body.urlencoded.map((v, k) => { 43 | str += `${v.disabled ? '# ' : ''}${k > 0 ? '&' : ''}${v.key}=${v.value}\n`; 44 | }); 45 | break; 46 | default: 47 | //json 48 | str += val.request.body.raw; 49 | // console.log(val.request.body); 50 | break; 51 | } 52 | } 53 | str += '\n'; 54 | return str; 55 | } 56 | 57 | 58 | let doConvert = (data) => { 59 | 60 | return data.map((val) => { 61 | if(val.item) { 62 | let data = doConvert(val.item); 63 | if (!fs.existsSync(dir)){ 64 | fs.mkdirSync(dir); 65 | } 66 | fs.writeFileSync(`${dir}/${val.name}.http`, `${defaultEnv}\n\n${data.join('')}`, 'utf-8'); 67 | } else { 68 | result = parseDataToRest(val); 69 | return result; 70 | } 71 | }) 72 | } 73 | 74 | module.exports = doConvert; 75 | // doConvert(collections.item); --------------------------------------------------------------------------------