From 490d79224c49af6755c82f81734c1033cd9db10f Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:48:02 +0900 Subject: [PATCH 1/8] chore: add cosmiconfig and remove dotenv dependencies --- package-lock.json | 101 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 21 insertions(+), 82 deletions(-) diff --git a/package-lock.json b/package-lock.json index b10c772..07212cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "axios": "^0.27.2", "chalk": "^4.1.2", "commander": "^9.4.0", - "dotenv": "^16.0.2", + "cosmiconfig": "^7.0.1", "ora": "^5.4.1", "qs": "^6.11.0" }, @@ -58,7 +58,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -280,7 +279,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -312,7 +310,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -326,7 +323,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -338,7 +334,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -352,7 +347,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -360,14 +354,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -376,7 +368,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1638,8 +1629,7 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prettier": { "version": "2.7.0", @@ -2333,7 +2323,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -2635,7 +2624,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -2856,14 +2844,6 @@ "node": ">=8" } }, - "node_modules/dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", - "engines": { - "node": ">=12" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", @@ -2892,7 +2872,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -2973,7 +2952,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -4014,7 +3992,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4030,7 +4007,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -4110,8 +4086,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -5044,8 +5019,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -5074,8 +5048,7 @@ "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", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -5181,8 +5154,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/locate-path": { "version": "6.0.0", @@ -5729,7 +5701,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -5741,7 +5712,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5792,7 +5762,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -7243,7 +7212,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -7321,7 +7289,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -7490,8 +7457,7 @@ "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -7514,7 +7480,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -7525,7 +7490,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -7534,7 +7498,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7545,7 +7508,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -7553,20 +7515,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -8591,8 +8550,7 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prettier": { "version": "2.7.0", @@ -9060,8 +9018,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", @@ -9285,7 +9242,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -9443,11 +9399,6 @@ "is-obj": "^2.0.0" } }, - "dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" - }, "electron-to-chromium": { "version": "1.4.254", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz", @@ -9470,7 +9421,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -9535,8 +9485,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "eslint": { "version": "8.23.1", @@ -10275,7 +10224,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10284,8 +10232,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -10346,8 +10293,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { "version": "1.0.4", @@ -11033,8 +10979,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", @@ -11054,8 +10999,7 @@ "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", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "1.0.0", @@ -11132,8 +11076,7 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "locate-path": { "version": "6.0.0", @@ -11539,7 +11482,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -11548,7 +11490,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11583,8 +11524,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "picocolors": { "version": "1.0.0", @@ -12615,8 +12555,7 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "17.5.1", diff --git a/package.json b/package.json index 22bf829..973cf5b 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "axios": "^0.27.2", "chalk": "^4.1.2", "commander": "^9.4.0", - "dotenv": "^16.0.2", + "cosmiconfig": "^7.0.1", "ora": "^5.4.1", "qs": "^6.11.0" } From a00ca63a484eda24affb255b78bbe004d637d52e Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:48:16 +0900 Subject: [PATCH 2/8] chore: remove .env.example --- .env.example | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index 05c512a..0000000 --- a/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -X_NAVER_CLIENT_ID= -X_NAVER_CLIENT_SECRET= From 1f7d8079ecbff39e288a1edd3dc61760987bb2d5 Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:48:34 +0900 Subject: [PATCH 3/8] chore: add .jeromerc.json to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 37ce9fb..efc1b68 100644 --- a/.gitignore +++ b/.gitignore @@ -168,5 +168,6 @@ examples/ !examples/Localizable-empty.strings !examples/Localizable.badExt !examples/Localizable.strings +.jeromerc.json # End of https://www.toptal.com/developers/gitignore/api/vim,node,macos From 3c874b3ff04325b71e92e84da3780fd90ffe5f72 Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:48:48 +0900 Subject: [PATCH 4/8] feat: add Config typing --- src/types.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/types.ts b/src/types.ts index ba59f99..228d517 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,6 +6,11 @@ type CLIArgs = { target: PapagoLocalKeys; }; +type Config = { + X_NAVER_CLIENT_ID: string; + X_NAVER_CLIENT_SECRET: string; +}; + type KeyValues = { key: string; value: string; @@ -38,6 +43,7 @@ type PapagoFailureResponse = { export type { CLIArgs, + Config, KeyValues, PapagoFailureResponse, PapagoLocalKeys, From 1707ea74038bf77963e6523c6a77a3c0672163ae Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:49:21 +0900 Subject: [PATCH 5/8] feat: add Config related custom errors --- src/lib/errors.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib/errors.ts b/src/lib/errors.ts index d060dfb..6d6fae5 100644 --- a/src/lib/errors.ts +++ b/src/lib/errors.ts @@ -1,4 +1,19 @@ /* eslint-disable max-classes-per-file -- Error subclasses only */ +class ConfigFileNotFoundError extends Error { + constructor() { + super('Config file not found.'); + } +} + +class ConfigPropertyNotFoundError extends Error { + public configPath: string; + + constructor(property: string, configPath: string) { + super(`Property \`${property}\` not found in the config file.`); + this.configPath = configPath; + } +} + class FileNotExistError extends Error { constructor() { super('File does not exist.'); @@ -24,6 +39,8 @@ class PapagoError extends Error { } export { + ConfigFileNotFoundError, + ConfigPropertyNotFoundError, FileInvalidExtensionError, FileNotExistError, NothingToTranslateError, From efe252fae301c99e8ce414bc8240e6ed0d9ae7a1 Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:49:42 +0900 Subject: [PATCH 6/8] feat: add extractConfig method --- src/lib/extractConfig.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/lib/index.ts | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 src/lib/extractConfig.ts diff --git a/src/lib/extractConfig.ts b/src/lib/extractConfig.ts new file mode 100644 index 0000000..b4958e4 --- /dev/null +++ b/src/lib/extractConfig.ts @@ -0,0 +1,38 @@ +import { cosmiconfigSync } from 'cosmiconfig'; + +import { ConfigFileNotFoundError, ConfigPropertyNotFoundError } from './errors'; + +import { Config } from '../types'; + +type Result = { + config: Config; + configPath: string; +}; + +function extractConfig(): Result { + const config = cosmiconfigSync('jerome').search(); + + if (!config) { + throw new ConfigFileNotFoundError(); + } + + const castedConfig = config.config as Config; + + if (!castedConfig.X_NAVER_CLIENT_ID) { + throw new ConfigPropertyNotFoundError( + 'X_NAVER_CLIENT_ID', + config.filepath, + ); + } + + if (!castedConfig.X_NAVER_CLIENT_SECRET) { + throw new ConfigPropertyNotFoundError( + 'X_NAVER_CLIENT_SECRET', + config.filepath, + ); + } + + return { config: config.config, configPath: config.filepath }; +} + +export default extractConfig; diff --git a/src/lib/index.ts b/src/lib/index.ts index 5b3f1f2..7b2e701 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,3 +1,4 @@ +import extractConfig from './extractConfig'; import extractKeyValues from './extractKeyValues'; import extractText from './extractText'; import hasValidExtension from './hasValidExtension'; @@ -9,6 +10,7 @@ import { translate } from './translate'; import writeFile from './writeFile'; export { + extractConfig, extractKeyValues, extractText, hasValidExtension, From 4439c6b2b1bebdd3128906828e1d099b7cef72f1 Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:49:59 +0900 Subject: [PATCH 7/8] fix: remove unnused dependency --- src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 491a5dd..ce90095 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,5 @@ #!/usr/bin/env node -import { AxiosError } from 'axios'; import { Command, Option } from 'commander'; import ora from 'ora'; From d0fe37b48e78ba4e7cd5789ebe98c2e61735596c Mon Sep 17 00:00:00 2001 From: Florian Ludot Date: Tue, 20 Sep 2022 23:50:19 +0900 Subject: [PATCH 8/8] feat: implement config file support --- src/index.ts | 17 +++++++++++++---- src/lib/logging.ts | 2 ++ src/lib/translate.test.ts | 19 +++++++++++++------ src/lib/translate.ts | 19 ++++++++++++------- 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/index.ts b/src/index.ts index ce90095..74f8da9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import { Command, Option } from 'commander'; import ora from 'ora'; import { + extractConfig, papagoLocals, parseFile, renderErrorLogs, @@ -14,6 +15,8 @@ import { writeFile, } from './lib'; import { + ConfigFileNotFoundError, + ConfigPropertyNotFoundError, FileInvalidExtensionError, FileNotExistError, PapagoError, @@ -57,13 +60,15 @@ program.parse(); const { input, source, target } = program.opts(); async function main() { - renderHeaderLogs(version, input, source, target); - const testInputSpinner = ora(); const translationSpinner = ora(); const writeSpinner = ora(); try { + const { config, configPath } = extractConfig(); + + renderHeaderLogs(version, configPath, input, source, target); + testInputSpinner.start(`Testing input file: ${input}`); testInput(input); testInputSpinner.succeed(`Valid input file: ${input}`); @@ -73,7 +78,7 @@ async function main() { translationSpinner.start( `Translating ${papagoLocals[source]} to ${papagoLocals[target]}`, ); - const translations = await translate(keyValues, source, target); + const translations = await translate(config, keyValues, source, target); translationSpinner.succeed( `Translated ${papagoLocals[source]} to ${papagoLocals[target]}`, ); @@ -85,7 +90,11 @@ async function main() { renderFooterLogs(); process.exit(0); } catch (e) { - if ( + if (e instanceof ConfigFileNotFoundError) { + renderHeaderLogs(version, null, input, source, target); + } else if (e instanceof ConfigPropertyNotFoundError) { + renderHeaderLogs(version, e.configPath, input, source, target); + } else if ( e instanceof FileNotExistError || e instanceof FileInvalidExtensionError ) { diff --git a/src/lib/logging.ts b/src/lib/logging.ts index 548078e..9ee1219 100644 --- a/src/lib/logging.ts +++ b/src/lib/logging.ts @@ -5,6 +5,7 @@ import { PapagoLocalKeys } from '../types'; /* eslint-disable no-console */ function renderHeaderLogs( version: string, + configPath: string | null, input: string, source: PapagoLocalKeys, target: PapagoLocalKeys, @@ -17,6 +18,7 @@ function renderHeaderLogs( console.log(` \\____/ \\___|_| \\___/|_| |_| |_|\\___| v${version}`); console.log(); + console.log(`${chalk.bold('Config:')} ${configPath ?? ''}`); console.log(`${chalk.bold('Input:')} ${input}`); console.log(`${chalk.bold('Source:')} ${source}`); console.log(`${chalk.bold('Target:')} ${target}`); diff --git a/src/lib/translate.test.ts b/src/lib/translate.test.ts index 4a2ac64..73b8768 100644 --- a/src/lib/translate.test.ts +++ b/src/lib/translate.test.ts @@ -2,11 +2,16 @@ import axios from 'axios'; import { buildTextPackets, requestsBuilder, translate } from './translate'; -import { KeyValues } from '../types'; +import { Config, KeyValues } from '../types'; jest.mock('axios'); const mockedAxios = axios as jest.Mocked; +const dummyConfig: Config = { + X_NAVER_CLIENT_ID: '', + X_NAVER_CLIENT_SECRET: '', +}; + describe('buildTextPackets', () => { test('should return empty array as keyValues is empty', () => { expect(buildTextPackets([])).toEqual([]); @@ -52,13 +57,13 @@ describe('buildTextPackets', () => { describe('requestsBuilder', () => { test('should return empty array as packets is empty', () => { - expect(requestsBuilder([], 'ko', 'en')).toEqual([]); + expect(requestsBuilder(dummyConfig, [], 'ko', 'en')).toEqual([]); }); test('should return 3 requests', () => { - expect(requestsBuilder(['홈', '홈', '홈'], 'ko', 'en').length).toEqual( - 3, - ); + expect( + requestsBuilder(dummyConfig, ['홈', '홈', '홈'], 'ko', 'en').length, + ).toEqual(3); }); }); @@ -89,7 +94,9 @@ describe('translate', () => { { key: '6788d684', value: '그럼요!' }, ]; mockedAxios.post.mockResolvedValue({ data }); - await expect(translate(keyValues, 'ko', 'en')).resolves.toEqual( + await expect( + translate(dummyConfig, keyValues, 'ko', 'en'), + ).resolves.toEqual( 'Home\n\nMy Carrot\n\nDoes the Carrot App help you keep alive?\n\nNo.\n\nOf course!', ); }); diff --git a/src/lib/translate.ts b/src/lib/translate.ts index 696c98e..631dd85 100644 --- a/src/lib/translate.ts +++ b/src/lib/translate.ts @@ -1,12 +1,14 @@ import axios, { AxiosError, AxiosRequestHeaders, AxiosResponse } from 'axios'; -import dotenv from 'dotenv'; import { stringify } from 'qs'; -import { KeyValues, PapagoFailureResponse, PapagoOkResponse } from '../types'; +import { + Config, + KeyValues, + PapagoFailureResponse, + PapagoOkResponse, +} from '../types'; import { PapagoError } from './errors'; -dotenv.config(); - function buildTextPackets(keyValues: KeyValues): string[] { const max = 5000; const packets: string[] = []; @@ -39,14 +41,16 @@ function buildTextPackets(keyValues: KeyValues): string[] { } function requestsBuilder( + config: Config, packets: string[], baseLocal: string, toLocal: string, ): Promise>[] { + const { X_NAVER_CLIENT_ID, X_NAVER_CLIENT_SECRET } = config; const baseUrl = 'https://openapi.naver.com/v1/papago/n2mt'; const headers: AxiosRequestHeaders = { - 'X-Naver-Client-Id': process.env.X_NAVER_CLIENT_ID ?? '', - 'X-Naver-Client-Secret': process.env.X_NAVER_CLIENT_SECRET ?? '', + 'X-Naver-Client-Id': X_NAVER_CLIENT_ID, + 'X-Naver-Client-Secret': X_NAVER_CLIENT_SECRET, }; const requests: Promise>[] = []; @@ -70,12 +74,13 @@ function requestsBuilder( } async function translate( + config: Config, keyValues: KeyValues, baseLocal: string, toLocals: string, ): Promise { const packets = buildTextPackets(keyValues); - const requests = requestsBuilder(packets, baseLocal, toLocals); + const requests = requestsBuilder(config, packets, baseLocal, toLocals); return Promise.all(requests) .then((responses) => {