generate-ip 2.0.2 → 2.1.0
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 +118 -16
- package/dist/generate-ip.min.js +7 -7
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
### Randomly generate IPv4 and IPv6 addresses.
|
|
4
4
|
|
|
5
5
|
<a href="#%EF%B8%8F-mit-license"><img height=31 src="https://img.shields.io/badge/License-MIT-orange.svg?logo=internetarchive&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
6
|
-
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.0
|
|
6
|
+
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.1.0"><img height=31 src="https://img.shields.io/badge/Latest_Build-2.1.0-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
7
7
|
<a href="https://www.npmjs.com/package/generate-ip?activeTab=code"><img height=31 src="https://img.shields.io/npm/unpacked-size/generate-ip?style=for-the-badge&logo=ebox&logoColor=white&labelColor=464646&color=blue"></a>
|
|
8
|
-
<a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:generate-ip/generate-ip.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%3Agenerate-ip%2Fgenerate-ip.js%26metricKeys%3Dvulnerabilities&query=%24.component.measures.0.value&style=for-the-badge&logo=sonarcloud&logoColor=white&labelColor=464646&label=Vulnerabilities&color=gold"></a>
|
|
8
|
+
<a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:generate-ip/generate-ip.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%3Agenerate-ip%2Fsrc%2Fgenerate-ip.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>
|
|
11
11
|
|
|
@@ -35,9 +35,9 @@ $ npm install generate-ip
|
|
|
35
35
|
|
|
36
36
|
<img height=6px width="100%" src="https://raw.githubusercontent.com/adamlui/js-utils/main/docs/images/aqua-separator.png">
|
|
37
37
|
|
|
38
|
-
## 🔌
|
|
38
|
+
## 🔌 Importing the APIs
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
### <img height=18 src="https://i.imgur.com/JIeAdsr.png"> Node.js
|
|
41
41
|
|
|
42
42
|
#### ESM:
|
|
43
43
|
|
|
@@ -51,7 +51,54 @@ import { ipv4, ipv6 } from 'generate-ip';
|
|
|
51
51
|
const { ipv4, ipv6 } = require('generate-ip');
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
### <picture><source media="(prefers-color-scheme: dark)" srcset="https://i.imgur.com/JSEb19A.png"><img width=16 src="https://i.imgur.com/5VPxf9y.png"></picture> Web
|
|
55
|
+
|
|
56
|
+
#### HTML script tag:
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<script src="https://cdn.jsdelivr.net/npm/generate-ip@2.1.0/dist/generate-ip.min.js"></script>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### ES6:
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
(async () => {
|
|
66
|
+
await import('https://cdn.jsdelivr.net/npm/generate-ip@2.1.0/dist/generate-ip.min.js');
|
|
67
|
+
// Your code here...
|
|
68
|
+
})();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### ES5:
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
var xhr = new XMLHttpRequest();
|
|
75
|
+
xhr.open('GET', 'https://cdn.jsdelivr.net/npm/generate-ip@2.1.0/dist/generate-ip.min.js');
|
|
76
|
+
xhr.onload = function() {
|
|
77
|
+
if (xhr.status === 200) {
|
|
78
|
+
var generateIP = document.createElement('script');
|
|
79
|
+
generateIP.textContent = xhr.responseText;
|
|
80
|
+
document.head.append(generateIP);
|
|
81
|
+
// Your code here...
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
xhr.send();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### <img height=17 src="https://raw.githubusercontent.com/KudoAI/chatgpt.js/main/starters/media/images/icons/tampermonkey-icon28.png"><img height=17.5 src="https://raw.githubusercontent.com/KudoAI/chatgpt.js/main/starters/media/images/icons/violentmonkey-icon100.png"> Greasemonkey
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
...
|
|
91
|
+
// @require https://cdn.jsdelivr.net/npm/generate-ip@2.1.0/dist/generate-ip.min.js
|
|
92
|
+
// ==/UserScript==
|
|
93
|
+
|
|
94
|
+
// Your code here...
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
<br>
|
|
98
|
+
|
|
99
|
+
<img height=6px width="100%" src="https://raw.githubusercontent.com/adamlui/js-utils/main/docs/images/aqua-separator.png">
|
|
100
|
+
|
|
101
|
+
## 📋 API usage
|
|
55
102
|
|
|
56
103
|
### `ipv4` methods
|
|
57
104
|
|
|
@@ -61,18 +108,42 @@ Use the `ipv4` methods to [**generate**](#ipv4generateoptions) and [**validate**
|
|
|
61
108
|
|
|
62
109
|
#### `ipv4.generate([options])`
|
|
63
110
|
|
|
64
|
-
Generates **one** IPv4 address:
|
|
111
|
+
Generates **one** IPv4 address if `qty` option is not given, returning a string:
|
|
65
112
|
|
|
66
113
|
```js
|
|
67
114
|
const ip = ipv4.generate();
|
|
68
|
-
console.log(ip);
|
|
115
|
+
console.log(ip);
|
|
116
|
+
|
|
117
|
+
/* sample output:
|
|
118
|
+
|
|
119
|
+
ipv4.generate() » Generating IPv4 address...
|
|
120
|
+
ipv4.generate() » IPv4 address generated!
|
|
121
|
+
ipv4.generate() » Check returned string.
|
|
122
|
+
'36.42.224.208'
|
|
123
|
+
*/
|
|
69
124
|
```
|
|
70
125
|
|
|
71
|
-
|
|
126
|
+
...or **multiple** IPv4 addresses if `qty` option is given, returning an array of strings:
|
|
72
127
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
128
|
+
```js
|
|
129
|
+
const ips = ipv4.generate({ qty: 3 });
|
|
130
|
+
console.log(ips);
|
|
131
|
+
|
|
132
|
+
/* sample output:
|
|
133
|
+
|
|
134
|
+
ipv4.generate() » Generating IPv4 addresses...
|
|
135
|
+
ipv4.generate() » IPv4 addresses generated!
|
|
136
|
+
ipv4.generate() » Check returned array.
|
|
137
|
+
[ '194.84.176.172', '192.186.53.120', '50.191.111.87' ]
|
|
138
|
+
*/
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Available options:
|
|
142
|
+
|
|
143
|
+
Name | Type | Description | Default Value
|
|
144
|
+
------------|---------|-------------------------------------|---------------
|
|
145
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
146
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
76
147
|
|
|
77
148
|
#
|
|
78
149
|
|
|
@@ -108,18 +179,48 @@ Use the `ipv6` methods to [**generate**](#ipv6generateoptions), [**format**](#ip
|
|
|
108
179
|
|
|
109
180
|
#### `ipv6.generate([options])`
|
|
110
181
|
|
|
111
|
-
Generates **one** IPv6 address,
|
|
182
|
+
Generates **one** IPv6 address if `qty` option is not given, returning a string:
|
|
112
183
|
|
|
113
184
|
```js
|
|
114
185
|
const ip = ipv6.generate();
|
|
115
|
-
console.log(ip);
|
|
186
|
+
console.log(ip);
|
|
187
|
+
|
|
188
|
+
/* sample output:
|
|
189
|
+
|
|
190
|
+
ipv6.generate() » Generating IPv6 address...
|
|
191
|
+
ipv6.generate() » IPv6 address generated!
|
|
192
|
+
ipv6.generate() » Check returned string.
|
|
193
|
+
'1379:6748:810c:5e16:b6c9:ae2:939f:8f2a'
|
|
194
|
+
*/
|
|
116
195
|
```
|
|
117
196
|
|
|
118
|
-
|
|
197
|
+
...or **multiple** IPv6 addresses if `qty` option is given, returning an array of strings:
|
|
198
|
+
|
|
199
|
+
```js
|
|
200
|
+
const ips = ipv4.generate({ qty: 5 });
|
|
201
|
+
console.log(ips);
|
|
202
|
+
|
|
203
|
+
/* sample output:
|
|
204
|
+
|
|
205
|
+
ipv6.generate() » Generating IPv6 addresses...
|
|
206
|
+
ipv6.generate() » IPv6 addresses generated!
|
|
207
|
+
ipv6.generate() » Check returned array.
|
|
208
|
+
[
|
|
209
|
+
'8218:19b9:7709:4282:65e1:7ee:319e:32ef',
|
|
210
|
+
'e940:754d:ae46:ae18:94dd:b43c:583:68c2',
|
|
211
|
+
'b570:b4f8:68f:62e2:99cb:ad0f:6237:9d51',
|
|
212
|
+
'98a7:f4e5:2f4e:8a2d:56bb:dc28:f94a:46a8',
|
|
213
|
+
'ca59:590a:9b6c:ea25:94fa:37d6:9bac:7ff6'
|
|
214
|
+
]
|
|
215
|
+
*/
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Available options:
|
|
119
219
|
|
|
120
220
|
Name | Type | Description | Default Value
|
|
121
221
|
---------------|---------|--------------------------------------|---------------
|
|
122
222
|
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
223
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
123
224
|
`leadingZeros` | Boolean | Include leading zeros in hex pieces. | `false`
|
|
124
225
|
`doubleColon` | Boolean | Replace series of zeros w/ `::` | `true`
|
|
125
226
|
|
|
@@ -138,10 +239,11 @@ console.log(formattedAddress);
|
|
|
138
239
|
|
|
139
240
|
/* outputs:
|
|
140
241
|
|
|
141
|
-
ipv6.format() » Formatting 0d::ffff:192.1.56.10/96...
|
|
142
242
|
ipv6.format() » Expanding '::' into zero series...
|
|
143
243
|
ipv6.format() » Adding leading zeros...
|
|
144
|
-
|
|
244
|
+
ipv6.format() » IP formatted successfully!
|
|
245
|
+
ipv6.format() » Check returned string.
|
|
246
|
+
'000d:0000:0000:0000:0000:0000:ffff:192.1.56.10/96'
|
|
145
247
|
*/
|
|
146
248
|
```
|
|
147
249
|
|
package/dist/generate-ip.min.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const
|
|
3
|
-
`+`ipv4.generate() » Valid options: [ ${Object.keys(o).join(", ")} ]`);if("boolean"!=typeof e[
|
|
4
|
-
`+`ipv4.validate() » Valid options: [ ${Object.keys(r).join(", ")} ]`);if("boolean"!=typeof o[n])return console.error(`ipv4.validate() » ERROR:
|
|
5
|
-
`+`ipv6.generate() » Valid options: [ ${Object.keys(o).join(", ")} ]`);if("boolean"!=typeof e[
|
|
2
|
+
const i=require("crypto")["randomInt"],n=require("child_process")["execSync"],s={generate:function(e={}){var o={verbose:!0};e={...o,...e};for(const t of Object.keys(e)){if(!Object.prototype.hasOwnProperty.call(o,t))return console.error(`ipv4.generate() » ERROR: \`${t}\` is an invalid option.
|
|
3
|
+
`+`ipv4.generate() » Valid options: [ ${Object.keys(o).join(", ")} ]`);if("boolean"!=typeof e[t])return console.error(`ipv4.generate() » ERROR: [${t}] option can only be set to \`true\` or \`false\`.`)}e.verbose&&console.info("ipv4.generate() » Generating IPv4 address...");var r=[];for(let e=0;e<4;e++)r.push(i(0,256));var n=r.join(".");return e.verbose&&console.info("ipv4.generate() » IPv4 address generated!"+(require.main!==module?"\nipv4.generate() » Check returned string.":"")),n},validate:function(e,o={}){var r={verbose:!0};if(o={...r,...o},"string"!=typeof e)return console.error("ipv4.validate() » ERROR: 1st arg <address> must be a string.");for(const n of Object.keys(o)){if(!Object.prototype.hasOwnProperty.call(r,n))return console.error(`ipv4.validate() » ERROR: \`${n}\` is an invalid option.
|
|
4
|
+
`+`ipv4.validate() » Valid options: [ ${Object.keys(r).join(", ")} ]`);if("boolean"!=typeof o[n])return console.error(`ipv4.validate() » ERROR: [${n}] option can only be set to \`true\` or \`false\`.`)}o.verbose&&console.info("ipv4.validate() » Validating IPv4 address...");e=e.split("."),e=!(4!==e.length||e.some(e=>!/^\d+$/.test(e)||parseInt(e,10)<0||255<parseInt(e,10)));return o.verbose&&console.info(`ipv4.validate() » IP is ${e?"":"in"}valid IPv4 address!`),e}},e={generate:function(e={}){var o={verbose:!0,leadingZeros:!1,doubleColon:!0};for(const t in e={...o,...e}){if(!Object.prototype.hasOwnProperty.call(o,t))return console.error(`ipv6.generate() » ERROR: \`${t}\` is an invalid option.
|
|
5
|
+
`+`ipv6.generate() » Valid options: [ ${Object.keys(o).join(", ")} ]`);if("boolean"!=typeof e[t])return console.error(`ipv6.generate() » ERROR: [${t}] option can only be \`true\` or \`false\`.`)}e.verbose&&console.info("ipv6.generate() » Generating IPv6 address...");var r=[];for(let e=0;e<8;e++){let o="";for(let e=0;e<4;e++)o+=i(0,16).toString(16);r.push(o)}var n=this.format(r.join(":"),{...e,verbose:!1});return e.verbose&&console.info("ipv6.generate() » IPv6 address generated!"+(require.main!==module?"\nipv6.generate() » Check returned string.":"")),n},format:function(e,o={}){var r,n,t={verbose:!0,leadingZeros:!1,doubleColon:!0};if(o={...t,...o},"string"!=typeof e)return console.error("ipv6.format() » ERROR: 1st arg <address> must be a string.");if(!this.validate(e,{verbose:!1}))return console.error(`ipv6.format() » ERROR:
|
|
6
6
|
- ${e} is not a valid IPv6 address.`);for(const a in o){if(!Object.prototype.hasOwnProperty.call(t,a))return console.error(`ipv6.format() » ERROR: \`${a}\` is an invalid option.
|
|
7
|
-
`+`ipv6.format() » Valid options: [ ${Object.keys(t).join(", ")} ]`);if("boolean"!=typeof o[a])return console.error(`ipv6.format() » ERROR: [${a}] option can only be \`true\` or \`false\`.`)}
|
|
8
|
-
`+`ipv6.validate() » Valid options: [ ${Object.keys(r).join(", ")} ]`);if("boolean"!=typeof o[i])return console.error(`ipv6.validate() » ERROR: [${i}] option can only be \`true\` or \`false\`.`)}o.verbose&&console.info(
|
|
7
|
+
`+`ipv6.format() » Valid options: [ ${Object.keys(t).join(", ")} ]`);if("boolean"!=typeof o[a])return console.error(`ipv6.format() » ERROR: [${a}] option can only be \`true\` or \`false\`.`)}let i=e;if(i=o.doubleColon?(o.verbose&&console.info("ipv6.format() » Replacing zero series w/ '::'..."),i.replace(/:(?:0+:)+/,"::")):(o.verbose&&console.info("ipv6.format() » Expanding '::' into zero series..."),n=i.split(":").filter(Boolean).length,r=o.leadingZeros?"0000":"0",n=Array(8-n).fill(r).join(":"),i.replace("::",`:${n}:`)),o.leadingZeros){o.verbose&&console.info("ipv6.format() » Adding leading zeros...");var s=i.split(":");for(let e=0;e<s.length;e++)for(;s[e].length<4;)s[e]="0"+s[e];i=s.join(":")}else o.verbose&&console.info("ipv6.format() » Stripping leading zeros..."),i=e.replace(/(^|(?<=:))0+(?!:)/g,"$1");return o.verbose&&(i!==e?console.info("ipv6.format() » IP formatted successfully!\nipv6.format() » Check returned string."):console.info("ipv6.format() » IP already formatted to specs.")),i},validate:function(e,o={}){var r={verbose:!0};if(o={...r,...o},"string"!=typeof e)return console.error("ipv6.validate() » ERROR: 1st arg <address> must be a string.");for(const i in o){if(!Object.prototype.hasOwnProperty.call(r,i))return console.error(`ipv6.validate() » ERROR: \`${i}\` is an invalid option.
|
|
8
|
+
`+`ipv6.validate() » Valid options: [ ${Object.keys(r).join(", ")} ]`);if("boolean"!=typeof o[i])return console.error(`ipv6.validate() » ERROR: [${i}] option can only be \`true\` or \`false\`.`)}o.verbose&&console.info("ipv6.validate() » Validating IPv6 address...");const n=e.split(/::?/),t=n[n.length-1];e=!(e.includes("::")&&2<e.split("::").length||/:{3,}/g.test(e)||n.length<2||8<n.length||n.some(e=>!(/^[\dA-Fa-f]{1,4}$/.test(e)||e===t&&s.validate(t.replace(/\/(?:0|(?:[1-2]?\d)|32|96)$/,""),{verbose:!1}))));return o.verbose&&console.info(`ipv6.validate() » IP is ${e?"":"in"}valid IPv6 address!`),e}};if(require.main!==module)module.exports={ipv4:s,ipv6:e};else{const l="[0m",p="[1;91m",c="[1;33m",v="[1;97m",f={infoCmds:{help:/^--?h(?:elp)?$/,version:/^--?ve?r?s?i?o?n?$/}};let o=!1,r;for(const d of Object.keys(f))for(const g of Object.keys(f[d]))o||process.argv.forEach(e=>{e.startsWith("-")&&(r=f[d][g].test(e)?void(o=!0):e)});if(r&&(console.error(`
|
|
9
9
|
${p}ERROR: Arg [${r}] not recognized.`+l),console.info(`
|
|
10
|
-
${c}Valid arguments are below.`+l),
|
|
10
|
+
${c}Valid arguments are below.`+l),t(["infoCmds"]),process.exit(1)),process.argv.some(e=>f.infoCmds.help.test(e)))t();else if(process.argv.some(e=>f.infoCmds.version.test(e)))console.info("v"+require("./package.json").version);else{const u=s.generate({verbose:!1});a(u),console.log(v+u+l)}function t(e=["cmdFormat","formatOptions","infoCmds"]){const o={cmdFormat:[`
|
|
11
11
|
${c}generate-ip [commands]`+l],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,t=[],o=e.match(/\S+|\s+/g);let r="";o.forEach(e=>{var o=n-(0===t.length?0:29);r.length+e.length>o&&(t.push(0===t.length?r:r.trimStart()),r=""),r+=e}),t.push(0===t.length?r:r.trimStart()),t.forEach((e,o)=>console.info(0===o?e:" ".repeat(29)+e))}})})}function a(e){e=e.replace(/\s+$/,"").replace(/"/g,'""'),"darwin"===process.platform?n(`printf "${e}" | pbcopy`):"linux"===process.platform?n(`printf "${e}" | xclip -selection clipboard`):"win32"===process.platform&&n(`Set-Clipboard -Value "${e}"`,{shell:"powershell"})}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "generate-ip",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Randomly generate IPv4 and IPv6 addresses.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Adam Lui",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"docs"
|
|
16
16
|
],
|
|
17
17
|
"bin": {
|
|
18
|
-
"generateip": "dist/
|
|
19
|
-
"generate-ip": "dist/
|
|
18
|
+
"generateip": "dist/cli.min.js",
|
|
19
|
+
"generate-ip": "dist/cli.min.js"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
23
|
-
"build": "minify-js
|
|
23
|
+
"build": "minify-js src dist",
|
|
24
24
|
"bump:patch": "bash utils/bump.sh patch",
|
|
25
25
|
"bump:minor": "bash utils/bump.sh minor",
|
|
26
26
|
"bump:major": "bash utils/bump.sh major",
|
|
@@ -52,6 +52,6 @@
|
|
|
52
52
|
"url": "https://github.com/sponsors/adamlui"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@adamlui/minify.js": "^1.4.
|
|
55
|
+
"@adamlui/minify.js": "^1.4.7"
|
|
56
56
|
}
|
|
57
57
|
}
|