@adamlui/geolocate 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ### Fetch IP geolocation data from the CLI.
4
4
 
5
- <a href="https://github.com/adamlui/js-utils/releases/tag/geolocate-2.0.0"><img height=31 src="https://img.shields.io/badge/Latest_Build-2.0.0-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
5
+ <a href="https://github.com/adamlui/js-utils/releases/tag/geolocate-2.0.2"><img height=31 src="https://img.shields.io/badge/Latest_Build-2.0.2-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
6
6
  <a href="https://www.npmjs.com/package/@adamlui/geolocate?activeTab=code"><img height=31 src="https://img.shields.io/npm/unpacked-size/%40adamlui%2Fgeolocate?style=for-the-badge&logo=ebox&logoColor=white&labelColor=464646&color=blue"></a>
7
- <a href="https://github.com/adamlui/js-utils/blob/geolocate-2.0.0/geolocate/dist/geolocate.min.js"><img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/geolocate/dist/geolocate.min.js?branch=geolocate-2.0.0&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
7
+ <a href="https://github.com/adamlui/js-utils/blob/geolocate-2.0.2/geolocate/dist/geolocate.min.js"><img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/geolocate/dist/geolocate.min.js?branch=geolocate-2.0.2&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
8
8
  <a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:geolocate/src/geolocate.js"><img height=31 src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fsonarcloud.io%2Fapi%2Fmeasures%2Fcomponent%3Fcomponent%3Dadamlui_js-utils%3Ageolocate%2Fsrc%2Fgeolocate.js%26metricKeys%3Dvulnerabilities&query=%24.component.measures.0.value&style=for-the-badge&logo=sonarcloud&logoColor=white&labelColor=464646&label=Vulnerabilities&color=gold"></a>
9
9
 
10
10
  <br>
@@ -47,7 +47,7 @@ Sample output:
47
47
 
48
48
  <img src="https://github.com/adamlui/js-utils/blob/main/geolocate/media/images/screenshots/cli-geolocate-8.8.8.8.jpg">
49
49
 
50
- **💡 Note:** If no IPv4 address is passed, your own one will be used.
50
+ **📝 Note:** If no IPv4 address is passed, your own one will be used.
51
51
 
52
52
  ### Command line options
53
53
 
@@ -89,14 +89,14 @@ const geo = require('@adamlui/geolocate');
89
89
  #### <> HTML script tag:
90
90
 
91
91
  ```html
92
- <script src="https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js"></script>
92
+ <script src="https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js"></script>
93
93
  ```
94
94
 
95
95
  #### ES6:
96
96
 
97
97
  ```js
98
98
  (async () => {
99
- await import('https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js');
99
+ await import('https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js');
100
100
  // Your code here...
101
101
  })();
102
102
  ```
@@ -105,7 +105,7 @@ const geo = require('@adamlui/geolocate');
105
105
 
106
106
  ```js
107
107
  ...
108
- // @require https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js
108
+ // @require https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js
109
109
  // ==/UserScript==
110
110
 
111
111
  // Your code here...
@@ -113,7 +113,7 @@ const geo = require('@adamlui/geolocate');
113
113
 
114
114
  <br>
115
115
 
116
- 📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.0.0` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/@adamlui/geolocate/dist/geolocate.min.js`
116
+ **📝 Note:** To always import the latest version (not recommended in production!) remove the `@2.0.2` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/@adamlui/geolocate/dist/geolocate.min.js`
117
117
 
118
118
  <br>
119
119
 
@@ -123,9 +123,13 @@ const geo = require('@adamlui/geolocate');
123
123
 
124
124
  ### `locate([ips, options])`
125
125
 
126
- Asynchronous method to fetch geolocation data for each `ip` passed in an array, returned as an array of data objects:
126
+ 💡 Asynchronous method to fetch geolocation data for each `ip` passed in an array, returned as an array of data objects.
127
+
128
+ Example:
127
129
 
128
130
  ```js
131
+ const geo = require('@adamlui/geolocate');
132
+
129
133
  // Using await syntax
130
134
  (async () => {
131
135
  const location = await geo.locate('8.8.8.8');
@@ -138,7 +142,7 @@ geo.locate('8.8.8.8').then(location => {
138
142
  });
139
143
 
140
144
  /* outputs:
141
- {
145
+ [{
142
146
  ip: '8.8.8.8',
143
147
  country: 'United States',
144
148
  countryCode: 'US',
@@ -150,11 +154,11 @@ geo.locate('8.8.8.8').then(location => {
150
154
  lon: -77.5,
151
155
  timezone: 'America/New_York',
152
156
  isp: 'Google LLC'
153
- }
157
+ }]
154
158
  */
155
159
  ```
156
160
 
157
- **💡 Note:** If no IPv4 address is passed, your own one will be used.
161
+ **📝 Note:** If no IPv4 address is passed, your own one will be used.
158
162
 
159
163
  Available options (passed as object properties):
160
164
 
@@ -182,14 +186,14 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
182
186
 
183
187
  ## 🛠️ Related utilities
184
188
 
185
- ### <img height=21px src="https://i.imgur.com/kvf7fXm.png"> [generate-ip](https://js-utils.com/generate-ip) <a href="https://github.com/toolleeo/cli-apps#networking"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
189
+ ### <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/adamlui/js-utils/main/generate-ip/media/images/icons/node-graph/white/icon55x49.png"><img height=21 src="https://raw.githubusercontent.com/adamlui/js-utils/main/generate-ip/media/images/icons/node-graph/black/icon55x49.png"></picture> [generate-ip](https://js-utils.com/generate-ip) <a href="https://github.com/toolleeo/cli-apps#networking"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
186
190
 
187
191
  > Randomly generate, format, and validate IPv4/IPv6 addresses.
188
192
  <br>[Install](https://docs.js-utils.com/generate-ip/#-installation) /
189
193
  [Readme](https://docs.js-utils.com/generate-ip/#readme) /
190
194
  [API usage](https://docs.js-utils.com/generate-ip/#-api-usage) /
191
195
  [CLI usage](https://docs.js-utils.com/generate-ip/#-command-line-usage) /
192
- [Discuss](https://js-utils.com/discussions)
196
+ [Discuss](https://github.js-utils.com/discussions)
193
197
 
194
198
  ### [🔒 generate-pw](../generate-pw) <a href="https://github.com/toolleeo/cli-apps#password-managers"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
195
199
 
@@ -198,12 +202,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
198
202
  [Readme](https://docs.js-utils.com/generate-pw/#readme) /
199
203
  [API usage](https://docs.js-utils.com/generate-pw/#-api-usage) /
200
204
  [CLI usage](https://docs.js-utils.com/generate-pw/#-command-line-usage) /
201
- [Discuss](https://js-utils.com/discussions)
205
+ [Discuss](https://github.js-utils.com/discussions)
202
206
 
203
207
  <br>
204
208
 
205
209
  <img height=6px width="100%" src="https://raw.githubusercontent.com/adamlui/js-utils/main/docs/images/aqua-separator.png">
206
210
 
207
211
  <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/adamlui/js-utils/main/media/images/icons/home/white/icon32x27.png"><img height=13 src="https://raw.githubusercontent.com/adamlui/js-utils/main/media/images/icons/home/dark-gray/icon32x27.png"></picture> <a href="https://js-utils.com">**More JavaScript utilities**</a> /
208
- <a href="https://js-utils.com/discussions">Discuss</a> /
212
+ <a href="https://github.js-utils.com/discussions">Discuss</a> /
209
213
  <a href="#-geolocate">Back to top ↑</a>
package/dist/cli.min.js CHANGED
@@ -4,11 +4,13 @@
4
4
  * Source: https://code.js-utils.com/geolocate
5
5
  * Documentation: https://docs.js-utils.com/geolocate
6
6
  */
7
- (async()=>{const s="@adamlui/geolocate",e=require(__dirname.match(/src/)?"./geolocate":"./geolocate.min"),n=require("fs"),i=require("path"),r=require("child_process")["execSync"],o="",t="",l="",c={},a={flags:{quietMode:/^--?q(?:uiet)?(?:-?mode)?$/},infoCmds:{help:/^--?h(?:elp)?$/,version:/^--?ve?r?s?i?o?n?$/}};if(process.argv.forEach(o=>{var e,s;o.startsWith("-")&&(e=Object.keys(a.flags).find(e=>a.flags[e].test(o)),s=Object.keys(a.infoCmds).find(e=>a.infoCmds[e].test(o)),e?c[e]=!0:s||(console.error(`
7
+ const pkgName="@adamlui/geolocate",docURL="https://docs.js-utils.com/geolocate/#-command-line-usage";(async()=>{const e=require(__dirname.match(/src/)?"./geolocate":"./geolocate.min"),s=require("fs"),n=require("path"),i=require("child_process")["execSync"],r="",t="",c="",l={},a={flags:{quietMode:/^--?q(?:uiet)?(?:-?mode)?$/},infoCmds:{help:/^--?h(?:elp)?$/,version:/^--?ve?r?s?i?o?n?$/}};if(process.argv.forEach(o=>{var e,s;o.startsWith("-")&&(e=Object.keys(a.flags).find(e=>a.flags[e].test(o)),s=Object.keys(a.infoCmds).find(e=>a.infoCmds[e].test(o)),e?l[e]=!0:s||(console.error(`
8
8
  ERROR: Arg [${o}] not recognized.`),console.info(`
9
- ${t}Valid arguments are below.`),u(["flags","infoCmds"]),console.info(`
9
+ ${t}Valid arguments are below.`),d(["configOptions","infoCmds"]),console.info(`
10
10
  ${t}For more help, type 'minify-js --help' or visit
11
- https://docs.js-utils.com/geolocate/#-command-line-usage`),process.exit(1)))}),process.argv.some(e=>a.infoCmds.help.test(e)))u();else if(process.argv.some(e=>a.infoCmds.version.test(e))){var p=r(`npm view ${s} version`).toString().trim()||"none";let e,o=process.cwd();for(;"/"!=o;){var m=i.join(o,"package.json");if(n.existsSync(m)){m=require(m);e=(m.dependencies?.[s]||m.devDependencies?.[s])?.match(/(\d+\.\d+\.\d+)/)[0]||"none";break}o=i.dirname(o)}console.info(`
12
- Global version: `+p),console.info("Local version: "+e)}else{var f,d=process.argv.slice(2),g=[];for(let e=0;e<d.length;e++)d[e].startsWith("-")||(f=d[e].replace(/\[|\]/g,""),g.push(f));p=await e.locate(g,{verbose:!c.quietMode});p||process.exit(1),c.quietMode||1!=p.length||(console.info(`
13
- IP: `+l+p[0].ip+o),console.info("Country: "+l+p[0].country+o),console.info("Region: "+l+p[0].regionName+o),console.info("City: "+l+p[0].city+o),console.info("Latitude: "+l+p[0].lat+o),console.info("Longitude: "+l+p[0].lon+o),console.info("ISP: "+l+p[0].isp+o)),c.quietMode||console.info("\nCopying to clipboard..."),h=(h=JSON.stringify(p)).replace(/\s+$/,"").replace(/"/g,'""'),"darwin"==process.platform?r(`printf "${h}" | pbcopy`):"linux"==process.platform?r(`printf "${h}" | xclip -selection clipboard`):"win32"==process.platform&&r(`Set-Clipboard -Value "${h}"`,{shell:"powershell"})}var h;function u(e=["cmdFormat","flags","infoCmds"]){const o={cmdFormat:[`
14
- ${t}geolocate [ip1] [ip2] [...] [options|commands]`],flags:["\nBoolean options:"," -q, --quiet Suppress all logging except errors."],infoCmds:["\nInfo commands:"," -h, --help Display help screen."," -v, --version Show version number."]};e.forEach(e=>{o[e]?.forEach(e=>{{const n=process.stdout.columns||80,i=[],o=e.match(/\S+|\s+/g);let s="";o.forEach(e=>{var o=n-(0==i.length?0:29);s.length+e.length>o&&(i.push(0==i.length?s:s.trimStart()),s=""),s+=e}),i.push(0==i.length?s:s.trimStart()),i.forEach((e,o)=>console.info(0==o?e:" ".repeat(29)+e))}})})}})();
11
+ `+docURL+r),process.exit(1)))}),process.argv.some(e=>a.infoCmds.help.test(e)))d();else if(process.argv.some(e=>a.infoCmds.version.test(e))){var p=i(`npm view ${pkgName} version`).toString().trim()||"none";let e,o=process.cwd();for(;"/"!=o;){var f=n.join(o,"package.json");if(s.existsSync(f)){f=require(f);e=(f.dependencies?.[pkgName]||f.devDependencies?.[pkgName])?.match(/(\d+\.\d+\.\d+)/)[0]||"none";break}o=n.dirname(o)}console.info(`
12
+ Global version: `+p),console.info("Local version: "+e)}else{var o,m=[];for(const h of process.argv.slice(2))h.startsWith("-")||(o=h.replace(/[[\]]/g,""),m.push(o));p=await e.locate(m,{verbose:!l.quietMode});p||process.exit(1),l.quietMode||1!=p.length||(console.info(`
13
+ IP: `+c+p[0].ip+r),console.info("Country: "+c+p[0].country+r),console.info("Region: "+c+p[0].regionName+r),console.info("City: "+c+p[0].city+r),console.info("Zip: "+c+p[0].zip+r),console.info("Latitude: "+c+p[0].lat+r),console.info("Longitude: "+c+p[0].lon+r),console.info("Time zone: "+c+p[0].timezone.replace(/_/g," ").replace(/\//g," / ")+r),console.info("ISP: "+c+p[0].isp+r)),l.quietMode||console.info("\nCopying to clipboard..."),g=(g=JSON.stringify(p)).replace(/\s+$/,"").replace(/"/g,'""'),"darwin"==process.platform?i(`printf "${g}" | pbcopy`):"linux"==process.platform?i(`printf "${g}" | xclip -selection clipboard`):"win32"==process.platform&&i(`Set-Clipboard -Value "${g}"`,{shell:"powershell"})}var g;function d(e=["usage","configOptions","infoCmds"]){const o={usage:[`
14
+ ${c}Usage:`," geolocate [ip1] [ip2] [...] [options|commands]"],configOptions:[`
15
+ ${c}Config options:`," -q, --quiet Suppress all logging except errors."],infoCmds:[`
16
+ ${c}Info commands:`," -h, --help Display help screen."," -v, --version Show version number."]};e.forEach(e=>{o[e]?.forEach(e=>{{const n=process.stdout.columns||80,i=[],o=e.match(/\S+|\s+/g);let s="";o.forEach(e=>{var o=n-(0==i.length?0:29);s.length+e.length>o&&(i.push(0==i.length?s:s.trimStart()),s=""),s+=e}),i.push(0==i.length?s:s.trimStart()),i.forEach((e,o)=>console.info(0==o?e:" ".repeat(29)+e))}})})}})();
@@ -3,4 +3,4 @@
3
3
  * Source: https://code.js-utils.com/geolocate
4
4
  * Documentation: https://docs.js-utils.com/geolocate
5
5
  */
6
- async function geolocate(e,t={}){var o={verbose:!0};(e=Array.isArray(e)?e:[e])[0]=e[0]||await fetch("https://ifconfig.me/ip").then(e=>e.text()).catch(()=>fetch("http://ip-api.com/json/").then(e=>e.json()).then(e=>e.query)).catch(async()=>{try{var e=require("child_process")["exec"],o=require("util")["promisify"],{stdout:t,stderr:r}=await o(e)("curl -s ifconfig.me");return r?console.error("geolocate() »",r):t.trim()}catch(e){console.error("geolocate() »",e)}});for(const n of e){t.verbose&&console.info(`geolocate() » Validating ${n}...`);let o;try{o=require("generate-ip").ipv4.validate}catch(e){await import("https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js"),o=ipv4.validate}if(o&&!o(n,{verbose:!1}))return console.error(`geolocate() » ERROR: ${n} is not a valid IPv4 address.`)}if(validateOptions(t,o,"https://docs.js-utils.com/geolocate/#locateip","geolocate('8.8.8.8', { verbose: false })")){t={...o,...t};try{var r=[];for(const i of e){t.verbose&&console.info(`geolocate() » Fetching geolocation data for ${i}...`);let e;if("undefined"!=typeof fetch)e=await fetch("http://ip-api.com/json/"+i);else{if("function"!=typeof require)return console.error("geolocate() » ERROR: Environment not supported.");e=await require("axios").get("http://ip-api.com/json/"+i)}const{status:a,org:c,as:s,query:l,...p}=await e.json();r.push(p)}return!t.verbose||"undefined"!=typeof require&&/cli(?:\.min)?\.js$/.test(require.main.filename)||console.info("geolocate() » Success! Check returned array."),r}catch(e){console.error("geolocate() »",e)}}}function validateOptions(e,o,t,r){const n=JSON.stringify(o,null,2).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'").replace(/\n\s*/g," "),i=Object.keys(o).join(", "),a=Object.keys(o).filter(e=>"boolean"==typeof o[e]);let c="validateOptions() » ";try{c=validateOptions.caller?.name+"() » "}catch(e){}var s=r.split(",").findIndex(e=>e.trim().startsWith("{"))+1,l=(s+=["st","nd","rd"][s-1]||"th",()=>{console.info(`${c}Valid options: [ ${i} ]`),console.info(c+"If omitted, default settings are: "+n)}),p=()=>{console.info(c+"For more help, please visit "+t)};if("object"!=typeof e)return console.error(c+`ERROR: ${"0th"==s?"[O":s+" arg [o"}ptions] can only be an object of key/values.`),console.info(c+"Example valid call: "+r),l(),p(),!1;for(const f in e){if(!Object.prototype.hasOwnProperty.call(o,f))return console.error(`${c}ERROR: \`${f}\` is an invalid option.`),l(),p(),!1;if(a.includes(f)&&"boolean"!=typeof e[f])return console.error(`${c}ERROR: [${f}] option can only be \`true\` or \`false\`.`),p(),!1}return!0}const apiFunctions={geolocate:geolocate,locate:geolocate};try{module.exports={...apiFunctions}}catch(e){}try{window.geo={...apiFunctions}}catch(e){}
6
+ async function geolocate(e,a={}){var o={verbose:!0};(e=Array.isArray(e)?e:[e])[0]=e[0]||await fetch("https://ifconfig.me/ip").then(e=>e.text()).catch(()=>fetch("http://ip-api.com/json/").then(e=>e.json()).then(e=>e.query)).catch(async()=>{try{var e=require("child_process")["exec"],o=require("util")["promisify"],{stdout:t,stderr:r}=await o(e)("curl -s ifconfig.me");return r?console.error("geolocate() »",r):t.trim()}catch(e){console.error("geolocate() »",e)}});for(const t of e){a.verbose&&console.info(`geolocate() » Validating ${t}...`);let o;try{o=require("generate-ip").ipv4.validate}catch(e){await import("https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js"),o=ipv4.validate}if(o&&!o(t,{verbose:!1}))return console.error(`geolocate() » ERROR: ${t} is not a valid IPv4 address.`)}if(validateOptions(a,o,"https://docs.js-utils.com/geolocate/#locateip","geolocate('8.8.8.8', { verbose: false })")){a={...o,...a};try{var c=[];for(const s of e){a.verbose&&console.info(`geolocate() » Fetching geolocation data for ${s}...`);let e;if("undefined"!=typeof fetch)e=await fetch("http://ip-api.com/json/"+s);else{if("function"!=typeof require)return console.error("geolocate() » ERROR: Environment not supported.");e=await require("axios").get("http://ip-api.com/json/"+s)}let{status:o,org:t,as:r,query:i,...n}=await e.json();n={ip:s,...n},c.push(n)}return!a.verbose||"undefined"!=typeof require&&/cli(?:\.min)?\.js$/.test(require.main.filename)||console.info("geolocate() » Success! Check returned array."),c}catch(e){console.error("geolocate() »",e)}}}function validateOptions(e,o,t,r){const i=JSON.stringify(o,null,2).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'").replace(/\n\s*/g," "),n=Object.keys(o).join(", "),a=Object.keys(o).filter(e=>"boolean"==typeof o[e]);let c="validateOptions() » ";try{c=validateOptions.caller?.name+"() » "}catch(e){}var s=r.split(",").findIndex(e=>e.trim().startsWith("{"))+1,l=(s+=["st","nd","rd"][s-1]||"th",()=>{console.info(`${c}Valid options: [ ${n} ]`),console.info(c+"If omitted, default settings are: "+i)}),p=()=>{console.info(c+"For more help, please visit "+t)};if("object"!=typeof e)return console.error(c+`ERROR: ${"0th"==s?"[O":s+" arg [o"}ptions] can only be an object of key/values.`),console.info(c+"Example valid call: "+r),l(),p(),!1;for(const f in e){if(!Object.prototype.hasOwnProperty.call(o,f))return console.error(`${c}ERROR: \`${f}\` is an invalid option.`),l(),p(),!1;if(a.includes(f)&&"boolean"!=typeof e[f])return console.error(`${c}ERROR: [${f}] option can only be \`true\` or \`false\`.`),p(),!1}return!0}const apiFunctions={geolocate:geolocate,locate:geolocate};try{module.exports={...apiFunctions}}catch(e){}try{window.geo={...apiFunctions}}catch(e){}
package/docs/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ### Fetch IP geolocation data from the CLI.
4
4
 
5
- <a href="https://github.com/adamlui/js-utils/releases/tag/geolocate-2.0.0"><img height=31 src="https://img.shields.io/badge/Latest_Build-2.0.0-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
5
+ <a href="https://github.com/adamlui/js-utils/releases/tag/geolocate-2.0.2"><img height=31 src="https://img.shields.io/badge/Latest_Build-2.0.2-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
6
6
  <a href="https://www.npmjs.com/package/@adamlui/geolocate?activeTab=code"><img height=31 src="https://img.shields.io/npm/unpacked-size/%40adamlui%2Fgeolocate?style=for-the-badge&logo=ebox&logoColor=white&labelColor=464646&color=blue"></a>
7
- <a href="https://github.com/adamlui/js-utils/blob/geolocate-2.0.0/geolocate/dist/geolocate.min.js"><img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/geolocate/dist/geolocate.min.js?branch=geolocate-2.0.0&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
7
+ <a href="https://github.com/adamlui/js-utils/blob/geolocate-2.0.2/geolocate/dist/geolocate.min.js"><img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/geolocate/dist/geolocate.min.js?branch=geolocate-2.0.2&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
8
8
  <a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:geolocate/src/geolocate.js"><img height=31 src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fsonarcloud.io%2Fapi%2Fmeasures%2Fcomponent%3Fcomponent%3Dadamlui_js-utils%3Ageolocate%2Fsrc%2Fgeolocate.js%26metricKeys%3Dvulnerabilities&query=%24.component.measures.0.value&style=for-the-badge&logo=sonarcloud&logoColor=white&labelColor=464646&label=Vulnerabilities&color=gold"></a>
9
9
 
10
10
  <br>
@@ -47,7 +47,7 @@ Sample output:
47
47
 
48
48
  <img src="https://github.com/adamlui/js-utils/blob/main/geolocate/media/images/screenshots/cli-geolocate-8.8.8.8.jpg">
49
49
 
50
- **💡 Note:** If no IPv4 address is passed, your own one will be used.
50
+ **📝 Note:** If no IPv4 address is passed, your own one will be used.
51
51
 
52
52
  ### Command line options
53
53
 
@@ -89,14 +89,14 @@ const geo = require('@adamlui/geolocate');
89
89
  #### <> HTML script tag:
90
90
 
91
91
  ```html
92
- <script src="https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js"></script>
92
+ <script src="https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js"></script>
93
93
  ```
94
94
 
95
95
  #### ES6:
96
96
 
97
97
  ```js
98
98
  (async () => {
99
- await import('https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js');
99
+ await import('https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js');
100
100
  // Your code here...
101
101
  })();
102
102
  ```
@@ -105,7 +105,7 @@ const geo = require('@adamlui/geolocate');
105
105
 
106
106
  ```js
107
107
  ...
108
- // @require https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.0/dist/geolocate.min.js
108
+ // @require https://cdn.jsdelivr.net/npm/@adamlui/geolocate@2.0.2/dist/geolocate.min.js
109
109
  // ==/UserScript==
110
110
 
111
111
  // Your code here...
@@ -113,7 +113,7 @@ const geo = require('@adamlui/geolocate');
113
113
 
114
114
  <br>
115
115
 
116
- 📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.0.0` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/@adamlui/geolocate/dist/geolocate.min.js`
116
+ **📝 Note:** To always import the latest version (not recommended in production!) remove the `@2.0.2` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/@adamlui/geolocate/dist/geolocate.min.js`
117
117
 
118
118
  <br>
119
119
 
@@ -123,9 +123,13 @@ const geo = require('@adamlui/geolocate');
123
123
 
124
124
  ### `locate([ips, options])`
125
125
 
126
- Asynchronous method to fetch geolocation data for each `ip` passed in an array, returned as an array of data objects:
126
+ 💡 Asynchronous method to fetch geolocation data for each `ip` passed in an array, returned as an array of data objects.
127
+
128
+ Example:
127
129
 
128
130
  ```js
131
+ const geo = require('@adamlui/geolocate');
132
+
129
133
  // Using await syntax
130
134
  (async () => {
131
135
  const location = await geo.locate('8.8.8.8');
@@ -138,7 +142,7 @@ geo.locate('8.8.8.8').then(location => {
138
142
  });
139
143
 
140
144
  /* outputs:
141
- {
145
+ [{
142
146
  ip: '8.8.8.8',
143
147
  country: 'United States',
144
148
  countryCode: 'US',
@@ -150,11 +154,11 @@ geo.locate('8.8.8.8').then(location => {
150
154
  lon: -77.5,
151
155
  timezone: 'America/New_York',
152
156
  isp: 'Google LLC'
153
- }
157
+ }]
154
158
  */
155
159
  ```
156
160
 
157
- **💡 Note:** If no IPv4 address is passed, your own one will be used.
161
+ **📝 Note:** If no IPv4 address is passed, your own one will be used.
158
162
 
159
163
  Available options (passed as object properties):
160
164
 
@@ -182,14 +186,14 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
182
186
 
183
187
  ## 🛠️ Related utilities
184
188
 
185
- ### <img height=21px src="https://i.imgur.com/kvf7fXm.png"> [generate-ip](https://js-utils.com/generate-ip) <a href="https://github.com/toolleeo/cli-apps#networking"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
189
+ ### <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/adamlui/js-utils/main/generate-ip/media/images/icons/node-graph/white/icon55x49.png"><img height=21 src="https://raw.githubusercontent.com/adamlui/js-utils/main/generate-ip/media/images/icons/node-graph/black/icon55x49.png"></picture> [generate-ip](https://js-utils.com/generate-ip) <a href="https://github.com/toolleeo/cli-apps#networking"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
186
190
 
187
191
  > Randomly generate, format, and validate IPv4/IPv6 addresses.
188
192
  <br>[Install](https://docs.js-utils.com/generate-ip/#-installation) /
189
193
  [Readme](https://docs.js-utils.com/generate-ip/#readme) /
190
194
  [API usage](https://docs.js-utils.com/generate-ip/#-api-usage) /
191
195
  [CLI usage](https://docs.js-utils.com/generate-ip/#-command-line-usage) /
192
- [Discuss](https://js-utils.com/discussions)
196
+ [Discuss](https://github.js-utils.com/discussions)
193
197
 
194
198
  ### [🔒 generate-pw](../generate-pw) <a href="https://github.com/toolleeo/cli-apps#password-managers"><img height=18 src="https://awesome.re/mentioned-badge.svg"></a>
195
199
 
@@ -198,12 +202,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
198
202
  [Readme](https://docs.js-utils.com/generate-pw/#readme) /
199
203
  [API usage](https://docs.js-utils.com/generate-pw/#-api-usage) /
200
204
  [CLI usage](https://docs.js-utils.com/generate-pw/#-command-line-usage) /
201
- [Discuss](https://js-utils.com/discussions)
205
+ [Discuss](https://github.js-utils.com/discussions)
202
206
 
203
207
  <br>
204
208
 
205
209
  <img height=6px width="100%" src="https://raw.githubusercontent.com/adamlui/js-utils/main/docs/images/aqua-separator.png">
206
210
 
207
211
  <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/adamlui/js-utils/main/media/images/icons/home/white/icon32x27.png"><img height=13 src="https://raw.githubusercontent.com/adamlui/js-utils/main/media/images/icons/home/dark-gray/icon32x27.png"></picture> <a href="https://js-utils.com">**More JavaScript utilities**</a> /
208
- <a href="https://js-utils.com/discussions">Discuss</a> /
212
+ <a href="https://github.js-utils.com/discussions">Discuss</a> /
209
213
  <a href="#-geolocate">Back to top ↑</a>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adamlui/geolocate",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Fetch IP geolocation data from the CLI.",
5
5
  "author": {
6
6
  "name": "Adam Lui",
@@ -47,9 +47,9 @@
47
47
  "url": "https://github.com/adamlui/js-utils/issues"
48
48
  },
49
49
  "dependencies": {
50
- "generate-ip": "^2.2.4"
50
+ "generate-ip": "^2.2.8"
51
51
  },
52
52
  "devDependencies": {
53
- "@adamlui/minify.js": "^1.5.3"
53
+ "@adamlui/minify.js": "^1.5.5"
54
54
  }
55
55
  }