From cf1c144e7c2d9c1750d6e3469ff1c60dfea1c0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 21 Aug 2022 06:00:48 +0300 Subject: [PATCH 01/10] Add pure ESM package notice to README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3ffd7ef..50dcb98 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ const currency = await googleCurrencyScraper({ // } ``` +_This package is a [pure ESM package](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)._ + ## API ### googleCurrencyScraper({ from, to }) From 619730a181f67c0c7e6ec1b311b27dea7e15508a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 21 Aug 2022 06:06:00 +0300 Subject: [PATCH 02/10] Update .npmignore --- .npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmignore b/.npmignore index 1b76d96..43bf88b 100644 --- a/.npmignore +++ b/.npmignore @@ -1 +1,2 @@ /update-dependencies.js +/.run/ From d46ab2984191c9266ba3c234dfc78f254a027301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 21 Aug 2022 06:06:58 +0300 Subject: [PATCH 03/10] Update dependencies --- package-lock.json | 48 +++++++++++++++++++++++++++++------------------ package.json | 4 ++-- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index e904942..d66f183 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.1.0", "license": "MIT", "dependencies": { - "dayjs": "^1.11.4", - "puppeteer": "^16.1.0" + "dayjs": "^1.11.5", + "puppeteer": "^16.2.0" }, "devDependencies": { "@jest/globals": "^28.1.3", @@ -1843,9 +1843,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", - "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", + "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==" }, "node_modules/debug": { "version": "4.3.4", @@ -2466,6 +2466,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3917,6 +3918,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -4213,6 +4215,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -4227,6 +4230,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -4253,6 +4257,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -4291,6 +4296,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -4375,6 +4381,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -4463,9 +4470,9 @@ } }, "node_modules/puppeteer": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.1.0.tgz", - "integrity": "sha512-lhykJLbH2bbBaP3NfYI2Vj0T4ctrdfVdEVf8glZITPnLfqrJ0nfUzAYuIz5YcA79k5lmFKANIhEXex+jQChU3g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz", + "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==", "hasInstallScript": true, "dependencies": { "cross-fetch": "3.1.5", @@ -4473,7 +4480,6 @@ "devtools-protocol": "0.0.1019158", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", @@ -6850,9 +6856,9 @@ } }, "dayjs": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", - "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==" + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", + "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==" }, "debug": { "version": "4.3.4", @@ -7314,6 +7320,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -8364,6 +8371,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -8588,6 +8596,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -8596,6 +8605,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -8612,7 +8622,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "parent-module": { "version": "1.0.1", @@ -8638,7 +8649,8 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -8696,6 +8708,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "requires": { "find-up": "^4.0.0" } @@ -8762,16 +8775,15 @@ "dev": true }, "puppeteer": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.1.0.tgz", - "integrity": "sha512-lhykJLbH2bbBaP3NfYI2Vj0T4ctrdfVdEVf8glZITPnLfqrJ0nfUzAYuIz5YcA79k5lmFKANIhEXex+jQChU3g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz", + "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==", "requires": { "cross-fetch": "3.1.5", "debug": "4.3.4", "devtools-protocol": "0.0.1019158", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", diff --git a/package.json b/package.json index 2b40e70..11072fc 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "currency api" ], "dependencies": { - "dayjs": "^1.11.4", - "puppeteer": "^16.1.0" + "dayjs": "^1.11.5", + "puppeteer": "^16.2.0" }, "devDependencies": { "@jest/globals": "^28.1.3", From 1398bd8eb63aa37867c35dc38761822bb1e4dd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 06:39:05 +0300 Subject: [PATCH 04/10] Add update-dependencies.js to tsconfig.json exclude list --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 2a9d5fd..3a217cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,8 @@ "**/*.js" ], "exclude": [ - "**/*.test.js" + "**/*.test.js", + "update-dependencies.js" ], "compilerOptions": { "declaration": true, From bc78b4ea35b2b18f11157be6862862a4635f6dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 06:39:17 +0300 Subject: [PATCH 05/10] Fix code style in update-dependencies.js --- update-dependencies.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/update-dependencies.js b/update-dependencies.js index af612f2..ea83a54 100644 --- a/update-dependencies.js +++ b/update-dependencies.js @@ -1,8 +1,8 @@ import { exec } from "child_process"; -import packageJson from "./package.json" assert { type: 'json' }; +import packageJson from "./package.json" assert { type: "json" }; -if(packageJson.dependencies !== undefined) { +if (packageJson.dependencies !== undefined) { const dependencies = Object.keys(packageJson.dependencies); (async () => { @@ -10,7 +10,7 @@ if(packageJson.dependencies !== undefined) { })(); } -if(packageJson.devDependencies !== undefined) { +if (packageJson.devDependencies !== undefined) { const devDependencies = Object.keys(packageJson.devDependencies); (async () => { From c05c18f26ac6f2bb9bfec9f3ea8ba05ac7173746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 06:41:01 +0300 Subject: [PATCH 06/10] Update JSDoc --- src/google-currency-scraper.js | 12 ++++++------ src/utils/currency-code.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/google-currency-scraper.js b/src/google-currency-scraper.js index 4bb1e50..1852a15 100644 --- a/src/google-currency-scraper.js +++ b/src/google-currency-scraper.js @@ -6,9 +6,9 @@ import { getDate, parseAndNormalizeDateInSearchResult } from "./utils/date.js"; /** * @param {object} params - * @param {CurrencyCode|string} params.from - * @param {CurrencyCode|string} params.to - * @returns {Promise<{from: CurrencyCode|string, to: CurrencyCode|string, rate: number, dateUpdated: string}>} + * @param {CurrencyCode | string} params.from + * @param {CurrencyCode | string} params.to + * @returns {Promise<{from: CurrencyCode | string, to: CurrencyCode | string, rate: number, dateUpdated: string}>} */ const googleCurrencyScraper = async ({ from, to }) => { if (!isValidCurrencyCode(from)) { @@ -55,9 +55,9 @@ const googleCurrencyScraper = async ({ from, to }) => { /** * @param {*} page * @param {object} params - * @param {CurrencyCode|string} params.from - * @param {CurrencyCode|string} params.to - * @returns {Promise<*|null>} + * @param {CurrencyCode | string} params.from + * @param {CurrencyCode | string} params.to + * @returns {Promise<* | null>} */ async function goToGoogleCurrencySearchResult(page, { from, to }) { const qs = objectToQueryString({ diff --git a/src/utils/currency-code.js b/src/utils/currency-code.js index 2440aa7..a4c6124 100644 --- a/src/utils/currency-code.js +++ b/src/utils/currency-code.js @@ -188,7 +188,7 @@ const CurrencyCode = { }; /** - * @param {CurrencyCode|string} code + * @param {CurrencyCode | string} code * @returns {boolean} */ const isValidCurrencyCode = code => code in CurrencyCode; From 66ace57dd5b0e9d347f022a6c4cc7719a05d7f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 06:47:25 +0300 Subject: [PATCH 07/10] Update comments in google-currency-scraper.js --- src/google-currency-scraper.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/google-currency-scraper.js b/src/google-currency-scraper.js index 1852a15..dd53474 100644 --- a/src/google-currency-scraper.js +++ b/src/google-currency-scraper.js @@ -32,10 +32,13 @@ const googleCurrencyScraper = async ({ from, to }) => { const page = await openNewPage(browser); - // To lighter page and faster load times, I emulate a mobile device + // To lighter page and faster load times, I emulate a mobile device. + // So why iPhone 7? + // It doesn't matter which one as long as it's a mobile device. + // That's why I chose iPhone 7 as I use it in real life :) await emulateDevice(page, "iPhone 7"); - // To lighter page and faster load times, load only document + // To lighter page and faster load times, make sure load only document. await ensurePageLoadOnlyDocument(page); await goToGoogleCurrencySearchResult(page, { from, to }); From 98ada88b55cd4994c6588ca9e8131732e99f149b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 07:02:05 +0300 Subject: [PATCH 08/10] Fix deprecation of querystring package --- src/utils/object-to-query-string.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/utils/object-to-query-string.js b/src/utils/object-to-query-string.js index c1b48b2..5777c3a 100644 --- a/src/utils/object-to-query-string.js +++ b/src/utils/object-to-query-string.js @@ -1,11 +1,20 @@ -import querystring from "querystring"; - /** * @param {object} object * @returns {string} */ const objectToQueryString = object => { - return querystring.stringify(object); + const objectToArray = []; + for (const [name, values] of Object.entries(object)) { + if (Array.isArray(values)) { + values.forEach(value => { + objectToArray.push([name, value]); + }); + } else { + objectToArray.push([name, values]); + } + } + + return new URLSearchParams(objectToArray).toString(); }; export { From fdda6d4fce87635427d051a14dbeb0d5e3e5dd00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 07:02:31 +0300 Subject: [PATCH 09/10] Increase Jest timeout to 20 seconds --- src/google-currency-scraper.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google-currency-scraper.test.js b/src/google-currency-scraper.test.js index d7eb534..64fc171 100644 --- a/src/google-currency-scraper.test.js +++ b/src/google-currency-scraper.test.js @@ -2,7 +2,7 @@ import googleCurrencyScraper from "./google-currency-scraper.js"; import { jest } from "@jest/globals"; import { getDate } from "./utils/date.js"; -jest.setTimeout(15000); +jest.setTimeout(20_000); describe("google-currency-scraper", () => { const date = Date; From 51b53f92ad2997033c8263b119bb03161fd71b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= <ozgurgorgulu54@gmail.com> Date: Sun, 28 Aug 2022 07:04:06 +0300 Subject: [PATCH 10/10] 1.1.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d66f183..deef8cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "google-currency-scraper", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "google-currency-scraper", - "version": "1.1.0", + "version": "1.1.1", "license": "MIT", "dependencies": { "dayjs": "^1.11.5", diff --git a/package.json b/package.json index 11072fc..3bdc502 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "google-currency-scraper", - "version": "1.1.0", + "version": "1.1.1", "description": "'google-currency-scraper' goes Google '1 USD to TRY' (for example) search result and scrape exchange rate and last updated date for you by using Puppeteer under the hood.", "license": "MIT", "type": "module",