diff --git a/package-lock.json b/package-lock.json index fde619cc..d8c3f353 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,6 +67,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "lint-staged": "^15.0.2", + "npm-run-all": "^4.1.5", "postcss": "^8.4.21", "postcss-nesting": "^11.2.1", "prettier": "^2.8.4", @@ -4688,6 +4689,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -4815,6 +4822,12 @@ "react-is": "^16.7.0" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", @@ -5377,6 +5390,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5534,6 +5553,43 @@ "node": ">=16.0.0" } }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", @@ -5659,6 +5715,15 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5793,12 +5858,39 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5816,6 +5908,110 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -6620,6 +6816,41 @@ "pify": "^2.3.0" } }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7003,6 +7234,15 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -7094,6 +7334,38 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, "node_modules/stack-generator": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", @@ -7219,6 +7491,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.padend": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -7837,6 +8126,16 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vite": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", diff --git a/package.json b/package.json index 6bb4543c..a96c3c14 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { + "start": "run-s build:plugins tauri-dev", "tauri-dev": "YAAK_ENV=development tauri dev --no-watch --config src-tauri/tauri-dev.conf.json", "tauri-build": "tauri build", "tauri": "tauri", @@ -13,6 +14,10 @@ "build:icon:release": "tauri icon design/icon.png --output src-tauri/icons/release", "build:icon:dev": "tauri icon design/icon-dev.png --output src-tauri/icons/dev", "build:frontend": "vite build", + "build:plugins": "run-p build:plugin:importer-insomnia build:plugin:importer-postman build:plugin:importer-yaak", + "build:plugin:importer-insomnia": "cd src-tauri/plugins/importer-insomnia && vite build", + "build:plugin:importer-postman": "cd src-tauri/plugins/importer-postman && vite build", + "build:plugin:importer-yaak": "cd src-tauri/plugins/importer-yaak && vite build", "test": "vitest", "coverage": "vitest run --coverage", "prepare": "husky install" @@ -77,6 +82,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "lint-staged": "^15.0.2", + "npm-run-all": "^4.1.5", "postcss": "^8.4.21", "postcss-nesting": "^11.2.1", "prettier": "^2.8.4", diff --git a/src-tauri/plugins/importer-insomnia/out/index.js b/src-tauri/plugins/importer-insomnia/out/index.js index 078aab21..7a86bcc1 100644 --- a/src-tauri/plugins/importer-insomnia/out/index.js +++ b/src-tauri/plugins/importer-insomnia/out/index.js @@ -8,10 +8,10 @@ function S(e, t) { workspaceId: t, model: 'environment', name: e.name, - variables: Object.entries(e.data).map(([n, s]) => ({ + variables: Object.entries(e.data).map(([n, a]) => ({ enabled: !0, name: n, - value: `${s}`, + value: `${a}`, })), } ); @@ -19,10 +19,10 @@ function S(e, t) { function I(e) { return m(e) && e._type === 'workspace'; } -function g(e) { +function y(e) { return m(e) && e._type === 'request_group'; } -function y(e) { +function g(e) { return m(e) && e._type === 'request'; } function f(e) { @@ -31,41 +31,41 @@ function f(e) { function m(e) { return Object.prototype.toString.call(e) === '[object Object]'; } -function O(e) { +function w(e) { return Object.prototype.toString.call(e) === '[object String]'; } -function _(e) { +function O(e) { return Object.entries(e).map(([t, n]) => ({ enabled: !0, name: t, value: `${n}`, })); } -function d(e) { - return O(e) ? e.replaceAll(/{{\s*(_\.)?([^}]+)\s*}}/g, '${[$2]}') : e; +function l(e) { + return w(e) ? e.replaceAll(/{{\s*(_\.)?([^}]+)\s*}}/g, '${[$2]}') : e; } function h(e, t, n = 0) { - var u, r; + var c, o; console.log('IMPORTING REQUEST', e._id, e.name, JSON.stringify(e, null, 2)); - let s = null, - o = null; - ((u = e.body) == null ? void 0 : u.mimeType) === 'application/graphql' - ? ((s = 'graphql'), (o = d(e.body.text))) - : ((r = e.body) == null ? void 0 : r.mimeType) === 'application/json' && - ((s = 'application/json'), (o = d(e.body.text))); let a = null, - l = {}; + r = null; + ((c = e.body) == null ? void 0 : c.mimeType) === 'application/graphql' + ? ((a = 'graphql'), (r = l(e.body.text))) + : ((o = e.body) == null ? void 0 : o.mimeType) === 'application/json' && + ((a = 'application/json'), (r = l(e.body.text))); + let i = null, + u = {}; return ( e.authentication.type === 'bearer' - ? ((a = 'bearer'), - (l = { - token: d(e.authentication.token), + ? ((i = 'bearer'), + (u = { + token: l(e.authentication.token), })) : e.authentication.type === 'basic' && - ((a = 'basic'), - (l = { - username: d(e.authentication.username), - password: d(e.authentication.password), + ((i = 'basic'), + (u = { + username: l(e.authentication.username), + password: l(e.authentication.password), })), { id: e._id, @@ -76,36 +76,23 @@ function h(e, t, n = 0) { model: 'http_request', sortPriority: n, name: e.name, - url: d(e.url), - body: o, - bodyType: s, - authentication: l, - authenticationType: a, + url: l(e.url), + body: r, + bodyType: a, + authentication: u, + authenticationType: i, method: e.method, headers: (e.headers ?? []) - .map(({ name: c, value: p, disabled: i }) => ({ - enabled: !i, - name: c, + .map(({ name: d, value: p, disabled: s }) => ({ + enabled: !s, + name: d, value: p, })) - .filter(({ name: c, value: p }) => c !== '' || p !== ''), + .filter(({ name: d, value: p }) => d !== '' || p !== ''), } ); } -function w(e, t) { - return ( - console.log('IMPORTING Workspace', e._id, e.name, JSON.stringify(e, null, 2)), - { - id: e._id, - createdAt: new Date(e.created ?? Date.now()).toISOString().replace('Z', ''), - updatedAt: new Date(e.updated ?? Date.now()).toISOString().replace('Z', ''), - model: 'workspace', - name: e.name, - variables: t, - } - ); -} -function D(e, t) { +function _(e, t) { return ( console.log('IMPORTING FOLDER', e._id, e.name, JSON.stringify(e, null, 2)), { @@ -120,32 +107,40 @@ function D(e, t) { ); } function b(e) { + console.log('RUNNING INSOMNIA'); let t; try { t = JSON.parse(e); } catch { return; } - if (!m(t)) return; + if (!m(t) || !Array.isArray(t.resources)) return; const n = { workspaces: [], requests: [], environments: [], folders: [], }, - s = t.resources.filter(I); - for (const o of s) { - const a = t.resources.find((r) => f(r) && r.parentId === o._id); - n.workspaces.push(w(o, a ? _(a.data) : [])); - const l = t.resources.filter((r) => f(r) && r.parentId === (a == null ? void 0 : a._id)); - n.environments.push(...l.map((r) => S(r, o._id))); - const u = (r) => { - const c = t.resources.filter((i) => i.parentId === r); + a = t.resources.filter(I); + for (const r of a) { + const i = t.resources.find((o) => f(o) && o.parentId === r._id); + n.workspaces.push({ + id: r._id, + createdAt: new Date(a.created ?? Date.now()).toISOString().replace('Z', ''), + updatedAt: new Date(a.updated ?? Date.now()).toISOString().replace('Z', ''), + model: 'workspace', + name: r.name, + variables: i ? O(i.data) : [], + }); + const u = t.resources.filter((o) => f(o) && o.parentId === (i == null ? void 0 : i._id)); + n.environments.push(...u.map((o) => S(o, r._id))); + const c = (o) => { + const d = t.resources.filter((s) => s.parentId === o); let p = 0; - for (const i of c) - g(i) ? (n.folders.push(D(i, o._id)), u(i._id)) : y(i) && n.requests.push(h(i, o._id, p++)); + for (const s of d) + y(s) ? (n.folders.push(_(s, r._id)), c(s._id)) : g(s) && n.requests.push(h(s, r._id, p++)); }; - u(o._id); + c(r._id); } return ( (n.requests = n.requests.filter(Boolean)), diff --git a/src-tauri/plugins/importer-insomnia/src/importers/workspace.js b/src-tauri/plugins/importer-insomnia/src/importers/workspace.js deleted file mode 100644 index 7d759127..00000000 --- a/src-tauri/plugins/importer-insomnia/src/importers/workspace.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Import an Insomnia workspace object. - * @param {Object} w - The workspace object to import. - */ -export function importWorkspace(w, variables) { - console.log('IMPORTING Workspace', w._id, w.name, JSON.stringify(w, null, 2)); - return { - id: w._id, - createdAt: new Date(w.created ?? Date.now()).toISOString().replace('Z', ''), - updatedAt: new Date(w.updated ?? Date.now()).toISOString().replace('Z', ''), - model: 'workspace', - name: w.name, - variables, - }; -} diff --git a/src-tauri/plugins/importer-insomnia/src/index.js b/src-tauri/plugins/importer-insomnia/src/index.js index 32775c4f..47f6dd3a 100644 --- a/src-tauri/plugins/importer-insomnia/src/index.js +++ b/src-tauri/plugins/importer-insomnia/src/index.js @@ -1,6 +1,5 @@ import { importEnvironment } from './importers/environment.js'; import { importRequest } from './importers/request.js'; -import { importWorkspace } from './importers/workspace.js'; import { isEnvironment, isJSObject, @@ -12,16 +11,16 @@ import { parseVariables } from './helpers/variables.js'; import { importFolder } from './importers/folder.js'; export function pluginHookImport(contents) { + console.log('RUNNING INSOMNIA'); let parsed; try { parsed = JSON.parse(contents); } catch (e) { - return undefined; + return; } - if (!isJSObject(parsed)) { - return undefined; - } + if (!isJSObject(parsed)) return; + if (!Array.isArray(parsed.resources)) return; const resources = { workspaces: [], @@ -36,12 +35,14 @@ export function pluginHookImport(contents) { const baseEnvironment = parsed.resources.find( (r) => isEnvironment(r) && r.parentId === workspaceToImport._id, ); - resources.workspaces.push( - importWorkspace( - workspaceToImport, - baseEnvironment ? parseVariables(baseEnvironment.data) : [], - ), - ); + resources.workspaces.push({ + id: workspaceToImport._id, + createdAt: new Date(workspacesToImport.created ?? Date.now()).toISOString().replace('Z', ''), + updatedAt: new Date(workspacesToImport.updated ?? Date.now()).toISOString().replace('Z', ''), + model: 'workspace', + name: workspaceToImport.name, + variables: baseEnvironment ? parseVariables(baseEnvironment.data) : [], + }); const environmentsToImport = parsed.resources.filter( (r) => isEnvironment(r) && r.parentId === baseEnvironment?._id, ); diff --git a/src-tauri/plugins/importer-postman/out/index.js b/src-tauri/plugins/importer-postman/out/index.js index 9f656bce..af663223 100644 --- a/src-tauri/plugins/importer-postman/out/index.js +++ b/src-tauri/plugins/importer-postman/out/index.js @@ -1,10 +1,12 @@ -const m = 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json'; -function b(e) { - const r = p(e); - if (r == null) return; - const i = s(r.info); - if (i.schema !== m || !Array.isArray(r.item)) return; - const n = { +const y = 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json', + f = 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json', + b = [f, y]; +function T(e) { + const t = h(e); + if (t == null) return; + const i = s(t.info); + if (!b.includes(i.schema) || !Array.isArray(t.item)) return; + const r = { workspaces: [], environments: [], requests: [], @@ -16,48 +18,66 @@ function b(e) { name: i.name || 'Postman Import', description: i.description || '', }; - n.workspaces.push(c); - const u = (o, l = null) => { + r.workspaces.push(c); + const d = (o, l = null) => { if (typeof o.name == 'string' && Array.isArray(o.item)) { - const t = { + const n = { model: 'folder', workspaceId: c.id, - id: `fld_${n.folders.length}`, + id: `fld_${r.folders.length}`, name: o.name, folderId: l, }; - n.folders.push(t); - for (const a of o.item) u(a, t.id); + r.folders.push(n); + for (const a of o.item) d(a, n.id); } else if (typeof o.name == 'string' && 'request' in o) { - const t = s(o.request), - a = f(t.body), - d = { + const n = s(o.request), + a = q(n.body), + u = g(n.auth), + m = { model: 'http_request', - id: `req_${n.requests.length}`, + id: `req_${r.requests.length}`, workspaceId: c.id, folderId: l, name: o.name, - method: t.method || 'GET', - url: s(t.url).raw, - headers: [...a.headers, ...h(t.header).map(y)], + method: n.method || 'GET', + url: typeof n.url == 'string' ? n.url : s(n.url).raw, body: a.body, bodyType: a.bodyType, - // TODO: support auth - // ...importAuth(r.auth), + authentication: u.authentication, + authenticationType: u.authenticationType, + headers: [ + ...a.headers, + ...u.headers, + ...A(n.header).map((p) => ({ + name: p.key, + value: p.value, + enabled: !p.disabled, + })), + ], }; - n.requests.push(d); + r.requests.push(m); } else console.log('Unknown item', o, l); }; - for (const o of r.item) u(o); - return { resources: n }; + for (const o of t.item) d(o); + return { resources: r }; } -function y(e) { - const r = s(e); - return { name: r.key, value: r.value, enabled: !0 }; +function g(e) { + const t = s(e); + return 'basic' in t + ? { + headers: [], + authenticationType: 'basic', + authentication: { + username: t.basic.username || '', + password: t.basic.password || '', + }, + } + : { headers: [], authenticationType: null, authentication: {} }; } -function f(e) { - const r = s(e); - return 'graphql' in r +function q(e) { + const t = s(e); + return 'graphql' in t ? { headers: [ { @@ -68,14 +88,14 @@ function f(e) { ], bodyType: 'graphql', body: JSON.stringify( - { query: r.graphql.query, variables: p(r.graphql.variables) }, + { query: t.graphql.query, variables: h(t.graphql.variables) }, null, 2, ), } - : { bodyType: null, body: null }; + : { headers: [], bodyType: null, body: null }; } -function p(e) { +function h(e) { try { return s(JSON.parse(e)); } catch {} @@ -84,7 +104,7 @@ function p(e) { function s(e) { return Object.prototype.toString.call(e) === '[object Object]' ? e : {}; } -function h(e) { +function A(e) { return Object.prototype.toString.call(e) === '[object Array]' ? e : []; } -export { b as pluginHookImport }; +export { T as pluginHookImport }; diff --git a/src-tauri/plugins/importer-postman/src/index.ts b/src-tauri/plugins/importer-postman/src/index.ts index b1c4e148..1fca3dee 100644 --- a/src-tauri/plugins/importer-postman/src/index.ts +++ b/src-tauri/plugins/importer-postman/src/index.ts @@ -1,6 +1,8 @@ import { Environment, Folder, HttpRequest, Workspace } from '../../../../src-web/lib/models'; const POSTMAN_2_1_0_SCHEMA = 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json'; +const POSTMAN_2_0_0_SCHEMA = 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json'; +const VALID_SCHEMAS = [POSTMAN_2_0_0_SCHEMA, POSTMAN_2_1_0_SCHEMA]; type AtLeast = Partial & Pick; @@ -16,7 +18,8 @@ export function pluginHookImport(contents: string): { resources: ExportResources if (root == null) return; const info = toRecord(root.info); - if (info.schema !== POSTMAN_2_1_0_SCHEMA || !Array.isArray(root.item)) { + const isValidSchema = VALID_SCHEMAS.includes(info.schema); + if (!isValidSchema || !Array.isArray(root.item)) { return; } @@ -51,6 +54,7 @@ export function pluginHookImport(contents: string): { resources: ExportResources } else if (typeof v.name === 'string' && 'request' in v) { const r = toRecord(v.request); const bodyPatch = importBody(r.body); + const authPatch = importAuth(r.auth); const request: ExportResources['requests'][0] = { model: 'http_request', id: `req_${exportResources.requests.length}`, @@ -58,13 +62,22 @@ export function pluginHookImport(contents: string): { resources: ExportResources folderId, name: v.name, method: r.method || 'GET', - url: toRecord(r.url).raw, - headers: [...bodyPatch.headers, ...toArray(r.header).map(importHeader)], + url: typeof r.url === 'string' ? r.url : toRecord(r.url).raw, body: bodyPatch.body, bodyType: bodyPatch.bodyType, - - // TODO: support auth - // ...importAuth(r.auth), + authentication: authPatch.authentication, + authenticationType: authPatch.authenticationType, + headers: [ + ...bodyPatch.headers, + ...authPatch.headers, + ...toArray(r.header).map((h) => { + return { + name: h.key, + value: h.value, + enabled: !h.disabled, + }; + }), + ], }; exportResources.requests.push(request); } else { @@ -79,10 +92,23 @@ export function pluginHookImport(contents: string): { resources: ExportResources return { resources: exportResources }; } -function importHeader(h: any): HttpRequest['headers'][0] { - const header = toRecord(h); - // TODO: support header - return { name: header.key, value: header.value, enabled: true }; +function importAuth( + rawAuth: any, +): Pick { + const auth = toRecord(rawAuth); + if ('basic' in auth) { + return { + headers: [], + authenticationType: 'basic', + authentication: { + username: auth.basic.username || '', + password: auth.basic.password || '', + }, + }; + } else { + // TODO: support other auth types + return { headers: [], authenticationType: null, authentication: {} }; + } } function importBody(rawBody: any): Pick { diff --git a/src-web/components/core/Editor/twig/completion.ts b/src-web/components/core/Editor/twig/completion.ts index 4558674b..e609748b 100644 --- a/src-web/components/core/Editor/twig/completion.ts +++ b/src-web/components/core/Editor/twig/completion.ts @@ -1,5 +1,4 @@ import type { CompletionContext } from '@codemirror/autocomplete'; -import { w } from '@tauri-apps/api/clipboard-79413165'; const openTag = '${[ '; const closeTag = ' ]}'; @@ -12,8 +11,8 @@ export interface TwigCompletionConfig { options: TwigCompletionOption[]; } -const MIN_MATCH_VAR = 2; -const MIN_MATCH_NAME = 1; +const MIN_MATCH_VAR = 1; +const MIN_MATCH_NAME = 2; export function twigCompletion({ options }: TwigCompletionConfig) { return function completions(context: CompletionContext) {