generate-ip 2.5.0 → 2.7.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 +31 -22
- package/dist/data/generate-ip.config.mjs +6 -3
- package/dist/data/messages.json +16 -9
- package/dist/data/{app.json → package-data.json} +1 -1
- package/docs/README.md +33 -24
- package/package.json +13 -9
- package/dist/cli/index.min.js +0 -8
- package/dist/cli/lib/data.min.js +0 -6
- package/dist/cli/lib/language.min.js +0 -8
- package/dist/cli/lib/log.min.js +0 -22
- package/dist/cli/lib/settings.min.js +0 -8
- package/dist/generate-ip.min.js +0 -6
package/README.md
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
<a href="#%EF%B8%8F-mit-license">
|
|
12
12
|
<img height=31 src="https://img.shields.io/badge/License-MIT-orange.svg?logo=internetarchive&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
13
|
-
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.
|
|
14
|
-
<img height=31 src="https://img.shields.io/badge/Latest_Build-2.
|
|
13
|
+
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.7.0">
|
|
14
|
+
<img height=31 src="https://img.shields.io/badge/Latest_Build-2.7.0-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
15
15
|
<a href="https://www.npmjs.com/package/generate-ip?activeTab=code">
|
|
16
16
|
<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>
|
|
17
|
-
<a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.
|
|
18
|
-
<img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/generate-ip/dist/generate-ip.min.js?branch=generate-ip-2.
|
|
17
|
+
<a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.7.0/generate-ip/dist/generate-ip.min.js">
|
|
18
|
+
<img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/generate-ip/dist/generate-ip.min.js?branch=generate-ip-2.7.0&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
|
|
19
19
|
<a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:generate-ip/src/generate-ip.js">
|
|
20
20
|
<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>
|
|
21
21
|
<a href="https://github.com/toolleeo/cli-apps#networking">
|
|
@@ -87,14 +87,14 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
87
87
|
#### <> HTML script tag:
|
|
88
88
|
|
|
89
89
|
```html
|
|
90
|
-
<script src="https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
90
|
+
<script src="https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js"></script>
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
#### ES6:
|
|
94
94
|
|
|
95
95
|
```js
|
|
96
96
|
(async () => {
|
|
97
|
-
await import('https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
97
|
+
await import('https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js')
|
|
98
98
|
// Your code here...
|
|
99
99
|
})()
|
|
100
100
|
```
|
|
@@ -103,7 +103,7 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
103
103
|
|
|
104
104
|
```js
|
|
105
105
|
...
|
|
106
|
-
// @require https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
106
|
+
// @require https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js
|
|
107
107
|
// ==/UserScript==
|
|
108
108
|
|
|
109
109
|
// Your code here...
|
|
@@ -111,7 +111,7 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
111
111
|
|
|
112
112
|
<br>
|
|
113
113
|
|
|
114
|
-
📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.
|
|
114
|
+
📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.7.0` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js`
|
|
115
115
|
|
|
116
116
|
<br>
|
|
117
117
|
|
|
@@ -151,10 +151,12 @@ ipv4.generate() » 194.84.176.172, 192.186.53.120, 50.191.111.87
|
|
|
151
151
|
|
|
152
152
|
Available options:
|
|
153
153
|
|
|
154
|
-
Name
|
|
155
|
-
|
|
156
|
-
`verbose`
|
|
157
|
-
`qty`
|
|
154
|
+
Name | Type | Description | Default Value
|
|
155
|
+
-------------|---------|----------------------------------------------------------|---------------
|
|
156
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
157
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
158
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
159
|
+
`network` | String | starting network address (required for sequential mode). | `null`
|
|
158
160
|
|
|
159
161
|
#
|
|
160
162
|
|
|
@@ -220,12 +222,14 @@ ipv6.generate() » 8218:19b9:7709:4282:65e1:7ee:319e:32ef, e940:754d:ae46:ae18:9
|
|
|
220
222
|
|
|
221
223
|
Available options:
|
|
222
224
|
|
|
223
|
-
Name | Type | Description
|
|
224
|
-
|
|
225
|
-
`verbose` | Boolean | Show logging in console/terminal.
|
|
226
|
-
`qty` | Integer | Number of IP addresses to generate.
|
|
227
|
-
`leadingZeros` | Boolean | Include leading zeros in hex pieces.
|
|
228
|
-
`doubleColon` | Boolean | Replace series of zeros w/ `::`
|
|
225
|
+
Name | Type | Description | Default Value
|
|
226
|
+
---------------|---------|----------------------------------------------------------|---------------
|
|
227
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
228
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
229
|
+
`leadingZeros` | Boolean | Include leading zeros in hex pieces. | `false`
|
|
230
|
+
`doubleColon` | Boolean | Replace series of zeros w/ `::` | `true`
|
|
231
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
232
|
+
`network` | String | Starting network address (required for sequential mode). | `null`
|
|
229
233
|
|
|
230
234
|
#
|
|
231
235
|
|
|
@@ -315,10 +319,12 @@ mac.generate() » 1d:3a:af:21:b1:8c, af:fb:6f:b6:1b:8a
|
|
|
315
319
|
|
|
316
320
|
Available options:
|
|
317
321
|
|
|
318
|
-
Name | Type | Description
|
|
319
|
-
|
|
320
|
-
`verbose` | Boolean | Show logging in console/terminal.
|
|
321
|
-
`qty` | Integer | Number of IP addresses to generate.
|
|
322
|
+
Name | Type | Description | Default Value
|
|
323
|
+
---------------|---------|----------------------------------------------------------|---------------
|
|
324
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
325
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
326
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
327
|
+
`network` | String | Starting network address (required for sequential mode). | `null`
|
|
322
328
|
|
|
323
329
|
#
|
|
324
330
|
|
|
@@ -369,11 +375,14 @@ Sample output:
|
|
|
369
375
|
```
|
|
370
376
|
Parameter options:
|
|
371
377
|
--qty=n Generate n IP address(es).
|
|
378
|
+
--ui-lang="code" ISO 639-1 code of language to display UI in.
|
|
372
379
|
--config="path/to/file" Load custom config file.
|
|
380
|
+
--network="address" Starting network address (required for sequential mode).
|
|
373
381
|
|
|
374
382
|
Boolean options:
|
|
375
383
|
-6, --ipv6 Generate IPv6 address.
|
|
376
384
|
-m, --mac Generate MAC address.
|
|
385
|
+
-s, --sequential Generate addresses in sequence.
|
|
377
386
|
-q, --quiet Suppress all logging except errors.
|
|
378
387
|
|
|
379
388
|
Commands:
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
export default {
|
|
12
|
-
mode: 'ipv4',
|
|
13
|
-
qty: 1,
|
|
14
|
-
|
|
12
|
+
mode: 'ipv4', // <ipv4|ipv6|mac> type of address to generate
|
|
13
|
+
qty: 1, // # of IPs to generate
|
|
14
|
+
sequential: false, // generate addresses in sequence
|
|
15
|
+
network: null, // starting network address (required for sequential mode)
|
|
16
|
+
quietMode: false, // suppress all logging except errors
|
|
17
|
+
uiLang: '' // ISO 639-1 code of language to display UI in
|
|
15
18
|
}
|
package/dist/data/messages.json
CHANGED
|
@@ -1,41 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"appName": { "message": "generate-ip" },
|
|
3
3
|
"appCopyright": { "message": "© 2024–2026 Adam Lui & contributors under the MIT license" },
|
|
4
|
-
"prefix_error": { "message": "ERROR" },
|
|
5
|
-
"prefix_tip": { "message": "TIP" },
|
|
6
|
-
"prefix_warning": { "message": "WARNING" },
|
|
7
4
|
"prefix_globalVer": { "message": "Global version" },
|
|
8
5
|
"prefix_localVer": { "message": "Local version" },
|
|
9
6
|
"prefix_source": { "message": "Source" },
|
|
10
|
-
"
|
|
7
|
+
"error_readingLocalPkgVer": { "message": "Error reading local package version" },
|
|
11
8
|
"error_notRecognized": { "message": "not recognized" },
|
|
12
9
|
"error_nonPositiveNum": { "message": "argument can only be > 0" },
|
|
10
|
+
"error_invalidFilepath": { "message": "must be a valid existing file path. Got" },
|
|
11
|
+
"error_invalidLangCode": { "message": "is an invalid language code" },
|
|
13
12
|
"error_invalidURL": { "message": "Invalid URL" },
|
|
14
13
|
"error_invalidConfigFile": { "message": "Config file must export an object" },
|
|
15
14
|
"error_configFileNotFound": { "message": "Config file not found" },
|
|
16
15
|
"error_failedToLoadConfigFile": { "message": "Failed to load config file" },
|
|
16
|
+
"error_failedToFetchGlobalVer": { "message": "Failed to fetch global version" },
|
|
17
|
+
"error_failedToFetchSysLang": { "message": "Failed to fetch system language" },
|
|
17
18
|
"error_mustIncludePath": { "message": "must include =path" },
|
|
19
|
+
"error_isRequired": { "message": "is required" },
|
|
20
|
+
"error_whenPassing": { "message": "when passing" },
|
|
21
|
+
"error_mustBeGreaterThanOne": { "message": "must be > 1" },
|
|
18
22
|
"warn_configFileExists": { "message": "Config file already exists" },
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
23
|
+
"warn_remoteConfigNotFound": { "message": "Remote config file not found" },
|
|
24
|
+
"warn_remoteConfigFailed": { "message": "Failed to fetch remote config file" },
|
|
25
|
+
"info_exampleValidConfigFile": { "message": "Example valid config file" },
|
|
26
|
+
"info_copyingToClip": { "message": "Copying to clipboard" },
|
|
27
|
+
"info_moreHelp": { "message": "For more help" },
|
|
22
28
|
"info_type": { "message": "type" },
|
|
23
29
|
"info_or": { "message": "or" },
|
|
24
30
|
"info_visit": { "message": "visit" },
|
|
25
31
|
"info_configFileCreated": { "message": "Config file created" },
|
|
26
32
|
"info_fetchingRemoteConfigFrom": { "message": "Fetching remote config file from" },
|
|
27
|
-
"warn_remoteConfigNotFound": { "message": "Remote config file not found" },
|
|
28
|
-
"warn_remoteConfigFailed": { "message": "Remote config file not found" },
|
|
29
33
|
"tip_editToSetDefaults": { "message": "Edit this file to customize defaults" },
|
|
30
34
|
"tip_cliArgsPrioritized": { "message": "CLI arguments always override these values" },
|
|
31
35
|
"helpSection_usage": { "message": "Usage" },
|
|
32
36
|
"helpSection_params": { "message": "Parameter options" },
|
|
33
37
|
"helpSection_flags": { "message": "Boolean options" },
|
|
34
38
|
"helpSection_cmds": { "message": "Commands" },
|
|
39
|
+
"optionDesc_uiLang": { "message": "ISO 639-1 code of language to display UI in" },
|
|
35
40
|
"optionDesc_qty": { "message": "Generate n IP address(es)" },
|
|
36
41
|
"optionDesc_config": { "message": "Load custom config file" },
|
|
37
42
|
"optionDesc_ipv6": { "message": "Generate IPv6 address" },
|
|
38
43
|
"optionDesc_mac": { "message": "Generate MAC address" },
|
|
44
|
+
"optionDesc_sequential": { "message": "Generate addresses in sequence" },
|
|
45
|
+
"optionDesc_network": { "message": "Starting network address (required for sequential mode)" },
|
|
39
46
|
"optionDesc_quiet": { "message": "Suppress all logging except errors" },
|
|
40
47
|
"optionDesc_init": { "message": "Create config file (in project root)" },
|
|
41
48
|
"optionDesc_help": { "message": "Display help screen" },
|
package/docs/README.md
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
<a href="#%EF%B8%8F-mit-license">
|
|
12
12
|
<img height=31 src="https://img.shields.io/badge/License-MIT-orange.svg?logo=internetarchive&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
13
|
-
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.
|
|
14
|
-
<img height=31 src="https://img.shields.io/badge/Latest_Build-2.
|
|
13
|
+
<a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.7.0">
|
|
14
|
+
<img height=31 src="https://img.shields.io/badge/Latest_Build-2.7.0-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
|
|
15
15
|
<a href="https://www.npmjs.com/package/generate-ip?activeTab=code">
|
|
16
16
|
<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>
|
|
17
|
-
<a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.
|
|
18
|
-
<img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/generate-ip/dist/generate-ip.min.js?branch=generate-ip-2.
|
|
17
|
+
<a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.7.0/generate-ip/dist/generate-ip.min.js">
|
|
18
|
+
<img height=31 src="https://img.shields.io/github/size/adamlui/js-utils/generate-ip/dist/generate-ip.min.js?branch=generate-ip-2.7.0&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
|
|
19
19
|
<a href="https://sonarcloud.io/component_measures?metric=new_vulnerabilities&id=adamlui_js-utils:generate-ip/src/generate-ip.js">
|
|
20
20
|
<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>
|
|
21
21
|
<a href="https://github.com/toolleeo/cli-apps#networking">
|
|
@@ -87,14 +87,14 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
87
87
|
#### <> HTML script tag:
|
|
88
88
|
|
|
89
89
|
```html
|
|
90
|
-
<script src="https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
90
|
+
<script src="https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js"></script>
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
#### ES6:
|
|
94
94
|
|
|
95
95
|
```js
|
|
96
96
|
(async () => {
|
|
97
|
-
await import('https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
97
|
+
await import('https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js')
|
|
98
98
|
// Your code here...
|
|
99
99
|
})()
|
|
100
100
|
```
|
|
@@ -103,7 +103,7 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
103
103
|
|
|
104
104
|
```js
|
|
105
105
|
...
|
|
106
|
-
// @require https://cdn.jsdelivr.net/npm/generate-ip@2.
|
|
106
|
+
// @require https://cdn.jsdelivr.net/npm/generate-ip@2.7.0/dist/generate-ip.min.js
|
|
107
107
|
// ==/UserScript==
|
|
108
108
|
|
|
109
109
|
// Your code here...
|
|
@@ -111,7 +111,7 @@ const { ipv4, ipv6, mac } = require('generate-ip')
|
|
|
111
111
|
|
|
112
112
|
<br>
|
|
113
113
|
|
|
114
|
-
📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.
|
|
114
|
+
📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.7.0` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js`
|
|
115
115
|
|
|
116
116
|
<br>
|
|
117
117
|
|
|
@@ -151,10 +151,12 @@ ipv4.generate() » 194.84.176.172, 192.186.53.120, 50.191.111.87
|
|
|
151
151
|
|
|
152
152
|
Available options:
|
|
153
153
|
|
|
154
|
-
Name
|
|
155
|
-
|
|
156
|
-
`verbose`
|
|
157
|
-
`qty`
|
|
154
|
+
Name | Type | Description | Default Value
|
|
155
|
+
-------------|---------|----------------------------------------------------------|---------------
|
|
156
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
157
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
158
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
159
|
+
`network` | String | starting network address (required for sequential mode). | `null`
|
|
158
160
|
|
|
159
161
|
#
|
|
160
162
|
|
|
@@ -220,12 +222,14 @@ ipv6.generate() » 8218:19b9:7709:4282:65e1:7ee:319e:32ef, e940:754d:ae46:ae18:9
|
|
|
220
222
|
|
|
221
223
|
Available options:
|
|
222
224
|
|
|
223
|
-
Name | Type | Description
|
|
224
|
-
|
|
225
|
-
`verbose` | Boolean | Show logging in console/terminal.
|
|
226
|
-
`qty` | Integer | Number of IP addresses to generate.
|
|
227
|
-
`leadingZeros` | Boolean | Include leading zeros in hex pieces.
|
|
228
|
-
`doubleColon` | Boolean | Replace series of zeros w/ `::`
|
|
225
|
+
Name | Type | Description | Default Value
|
|
226
|
+
---------------|---------|----------------------------------------------------------|---------------
|
|
227
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
228
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
229
|
+
`leadingZeros` | Boolean | Include leading zeros in hex pieces. | `false`
|
|
230
|
+
`doubleColon` | Boolean | Replace series of zeros w/ `::` | `true`
|
|
231
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
232
|
+
`network` | String | Starting network address (required for sequential mode). | `null`
|
|
229
233
|
|
|
230
234
|
#
|
|
231
235
|
|
|
@@ -315,10 +319,12 @@ mac.generate() » 1d:3a:af:21:b1:8c, af:fb:6f:b6:1b:8a
|
|
|
315
319
|
|
|
316
320
|
Available options:
|
|
317
321
|
|
|
318
|
-
Name | Type | Description
|
|
319
|
-
|
|
320
|
-
`verbose` | Boolean | Show logging in console/terminal.
|
|
321
|
-
`qty` | Integer | Number of IP addresses to generate.
|
|
322
|
+
Name | Type | Description | Default Value
|
|
323
|
+
---------------|---------|----------------------------------------------------------|---------------
|
|
324
|
+
`verbose` | Boolean | Show logging in console/terminal. | `true`
|
|
325
|
+
`qty` | Integer | Number of IP addresses to generate. | `1`
|
|
326
|
+
`sequential` | Boolean | Generate addresses in sequence. | `false`
|
|
327
|
+
`network` | String | Starting network address (required for sequential mode). | `null`
|
|
322
328
|
|
|
323
329
|
#
|
|
324
330
|
|
|
@@ -369,11 +375,14 @@ Sample output:
|
|
|
369
375
|
```
|
|
370
376
|
Parameter options:
|
|
371
377
|
--qty=n Generate n IP address(es).
|
|
378
|
+
--ui-lang="code" ISO 639-1 code of language to display UI in.
|
|
372
379
|
--config="path/to/file" Load custom config file.
|
|
380
|
+
--network="address" Starting network address (required for sequential mode).
|
|
373
381
|
|
|
374
382
|
Boolean options:
|
|
375
383
|
-6, --ipv6 Generate IPv6 address.
|
|
376
384
|
-m, --mac Generate MAC address.
|
|
385
|
+
-s, --sequential Generate addresses in sequence.
|
|
377
386
|
-q, --quiet Suppress all logging except errors.
|
|
378
387
|
|
|
379
388
|
Commands:
|
|
@@ -386,7 +395,7 @@ Commands:
|
|
|
386
395
|
|
|
387
396
|
### Configuration file
|
|
388
397
|
|
|
389
|
-
**generate-ip** can be customized using `generate-ip.config.mjs` or `generate-ip.config.js` placed in your project root.
|
|
398
|
+
**generate-ip** can be customized using a `generate-ip.config.mjs` or `generate-ip.config.js` placed in your project root.
|
|
390
399
|
|
|
391
400
|
Example defaults:
|
|
392
401
|
|
|
@@ -399,7 +408,7 @@ export default {
|
|
|
399
408
|
}
|
|
400
409
|
```
|
|
401
410
|
|
|
402
|
-
💡
|
|
411
|
+
💡 Run `generate-ip init` to generate a template `generate-ip.config.mjs` in your project root.
|
|
403
412
|
|
|
404
413
|
<br>
|
|
405
414
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "generate-ip",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "Randomly generate, format, and validate IPv4 + IPv6 + MAC addresses.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Adam Lui",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"build:data": "node utils/build --data",
|
|
44
44
|
"build:json": "node utils/build --json",
|
|
45
45
|
"debug": "node src/cli --debug",
|
|
46
|
-
"translate": "
|
|
46
|
+
"translate": "translate-messages",
|
|
47
47
|
"bump:patch": "bash utils/bump.sh patch",
|
|
48
48
|
"bump:minor": "bash utils/bump.sh minor",
|
|
49
49
|
"bump:major": "bash utils/bump.sh major"
|
|
@@ -53,16 +53,20 @@
|
|
|
53
53
|
"url": "git+https://github.com/adamlui/js-utils.git"
|
|
54
54
|
},
|
|
55
55
|
"keywords": [
|
|
56
|
-
"
|
|
57
|
-
"generator",
|
|
58
|
-
"unique",
|
|
59
|
-
"generate",
|
|
56
|
+
"address",
|
|
60
57
|
"api",
|
|
61
58
|
"cli",
|
|
62
|
-
"
|
|
59
|
+
"generate",
|
|
60
|
+
"generator",
|
|
61
|
+
"internet",
|
|
62
|
+
"ip",
|
|
63
63
|
"ipv4",
|
|
64
64
|
"ipv6",
|
|
65
|
-
"mac"
|
|
65
|
+
"mac",
|
|
66
|
+
"network",
|
|
67
|
+
"privacy",
|
|
68
|
+
"utility",
|
|
69
|
+
"unique"
|
|
66
70
|
],
|
|
67
71
|
"bugs": {
|
|
68
72
|
"url": "https://github.com/adamlui/js-utils/issues"
|
|
@@ -71,6 +75,6 @@
|
|
|
71
75
|
"node-clipboardy": "^1.0.3"
|
|
72
76
|
},
|
|
73
77
|
"devDependencies": {
|
|
74
|
-
"@adamlui/minify.js": "^2.
|
|
78
|
+
"@adamlui/minify.js": "^2.3.0"
|
|
75
79
|
}
|
|
76
80
|
}
|
package/dist/cli/index.min.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
4
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
5
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
6
|
-
*/
|
|
7
|
-
(async()=>{var e,i=process.argv.slice(2),n=(globalThis.env={debugMode:i.some(e=>/^--?debug(?:-?mode)?$/.test(e)),devMode:/[\\/]src(?:[\\/]|$)/i.test(__dirname)},require("node-clipboardy")),{generateRandomLang:o,getMsgs:r,getSysLang:s}=require(`./lib/language${env.devMode?"":".min"}.js`),{ipv4:t,ipv6:a,mac:g}=require(`../generate-ip${env.devMode?"":".min"}.js`),d=require(`./lib/log${env.devMode?"":".min"}.js`),p=require(`./lib/settings${env.devMode?"":".min"}.js`);Object.assign(globalThis.app??={},require(`../${env.devMode?"../":"./data/"}app.json`)),app.msgs=await r(env.debugMode?o({excludes:["en"]}):s()),app.urls.docs+="/#-command-line-usage";for(e of i){if(p.controls.init.regex.test(e))return p.initConfigFile();if(p.controls.help.regex.test(e))return d.help();if(p.controls.version.regex.test(e))return d.version()}p.load();r={qty:app.config.qty,verbose:!app.config.quietMode},o={ipv4:t,ipv6:a,mac:g}[app.config.mode||"ipv4"].generate(r);d.ifNotQuiet(`
|
|
8
|
-
${app.msgs.info_copying}...`),n.writeSync([].concat(o).join("\n"))})();
|
package/dist/cli/lib/data.min.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
3
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
4
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
5
|
-
*/
|
|
6
|
-
module.exports={atomicWrite(e,r,t="utf8"){var n=require("path"),a=require("fs"),n=n.join(n.dirname(e),`.${n.basename(e)}.tmp`);a.writeFileSync(n,r,t),a.renameSync(n,e)},fetch(n){return"undefined"==typeof fetch?new Promise((t,e)=>{var r=n.match(/^([^:]+):\/\//)[1];/^https?$/.test(r)||e(new Error(app.msgs.error_invalidURL+".")),require(r).get(n,e=>{let r="";e.on("data",e=>r+=e),e.on("end",()=>t({json:()=>JSON.parse(r)}))}).on("error",e)}):fetch(n)},flatten(e,{key:r="message"}={}){var t,n={};for(t in e)n[t]="object"==typeof e[t]&&r in e[t]?e[t][r]:e[t];return n}};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
3
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
4
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
5
|
-
*/
|
|
6
|
-
let data=require(`./data${env.devMode?"":".min"}.js`),log=require(`./log${env.devMode?"":".min"}.js`);module.exports={generateRandomLang({includes:e=[],excludes:a=[]}={}){let t=require("fs"),s=require("path"),r=e.length?e:(()=>{var e=s.join(__dirname,"..",".cache"),a=s.join(e,"locales.json");if(t.existsSync(a))try{return JSON.parse(t.readFileSync(a,"utf8"))}catch(e){}var r=s.resolve(process.cwd(),"_locales");return t.existsSync(r)?(r=t.readdirSync(r,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name).filter(e=>/^[a-z]{2}(?:_[A-Z]{2})?$/.test(e)),t.mkdirSync(e,{recursive:!0}),data.atomicWrite(a,JSON.stringify(r,null,2)),r):["en"]})(),n=new Set(a),l="en";return(r=r.filter(e=>!n.has(e))).length&&(l=r[Math.floor(Math.random()*r.length)]),log.debug(`
|
|
7
|
-
Random language: ${l}
|
|
8
|
-
`),l},async getMsgs(t="en"){let e=data.flatten(require(`../../${env.devMode?"../_locales/en/":"data/"}messages.json`),{key:"message"});if(!t.startsWith("en")){var s=`${app.urls.jsdelivr}@${app.commitHashes.locales}/${app.name}/_locales/`;let a=s+t.replace("-","_")+"/messages.json",r=0;for(;r<3;)try{log.debug(e=data.flatten(await(await data.fetch(a)).json(),{key:"message"}));break}catch(e){if(2<++r)break;a=t.includes("-")&&1==r?a.replace(/([^_]*)_[^/]*(\/.*)/,"$1$2"):s+"en/messages.json"}}return e},getSysLang(){var e;if("win32"!=process.platform)return((e=process.env).LANG||e.LANGUAGE||e.LC_ALL||e.LC_MESSAGES||e.LC_NAME||"en").split(".")[0];try{return require("child_process").execSync("(Get-Culture).TwoLetterISOLanguageName",{shell:"powershell",encoding:"utf-8"}).trim()}catch(e){return log.error("ERROR loading system language:",e.message),"en"}}};
|
package/dist/cli/lib/log.min.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
3
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
4
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
5
|
-
*/
|
|
6
|
-
module.exports={colors:{nc:"[0m",br:"[1;91m",by:"[1;33m",bo:"[38;5;214m",bg:"[1;92m",bw:"[1;97m",blk:"[30m",tlBG:"[106m"},configURL(){this.info(`
|
|
7
|
-
${app.msgs.info_exampleValidConfigFile}: `+app.urls.config)},configURLandExit(...s){this.error(...s),this.configURL(),process.exit(1)},data(s){console.log(`
|
|
8
|
-
`+this.colors.bw+s+this.colors.nc)},debug(s){env.debugMode&&console.log(s)},error(...s){console.error(`
|
|
9
|
-
${this.colors.br}${app.msgs.prefix_error}:`,...s,this.colors.nc)},errorAndExit(...s){this.error(...s),this.helpCmdAndDocURL(),process.exit(1)},ifNotQuiet(s){app.config.quietMode||console.info(s)},info(s){console.info(`
|
|
10
|
-
`+this.colors.by+s+this.colors.nc)},tip(s){console.info(""+this.colors.by+app.msgs.prefix_tip+": "+s+this.colors.nc)},success(s){console.log(`
|
|
11
|
-
`+this.colors.bg+s+this.colors.nc)},warn(...s){console.warn(`
|
|
12
|
-
${this.colors.bo}${app.msgs.prefix_warning}:`,...s,this.colors.nc)},help(s=["header","usage","params","flags","cmds"]){app.prefix=""+this.colors.tlBG+this.colors.blk+`[30m ${app.name} ${this.colors.nc} `;let o={header:[`
|
|
13
|
-
├ ${app.prefix}${app.msgs.appCopyright}.`,""+app.prefix+app.msgs.prefix_source+": "+app.urls.src],usage:[`
|
|
14
|
-
${this.colors.bw}o ${app.msgs.helpSection_usage}:`+this.colors.nc,` ${this.colors.bw}» `+this.colors.bg+app.cmdFormat+this.colors.nc],params:[`
|
|
15
|
-
${this.colors.bw}o ${app.msgs.helpSection_params}:`+this.colors.nc,` --qty=n ${app.msgs.optionDesc_qty}.`,` --config="path/to/file" ${app.msgs.optionDesc_config}.`],flags:[`
|
|
16
|
-
${this.colors.bw}o ${app.msgs.helpSection_flags}:`+this.colors.nc,` -6, --ipv6 ${app.msgs.optionDesc_ipv6}.`,` -m, --mac ${app.msgs.optionDesc_mac}.`,` -q, --quiet ${app.msgs.optionDesc_quiet}.`],cmds:[`
|
|
17
|
-
${this.colors.bw}o ${app.msgs.helpSection_cmds}:`+this.colors.nc,` -i, --init ${app.msgs.optionDesc_init}.`,` -h, --help ${app.msgs.optionDesc_help}.`,` -v, --version ${app.msgs.optionDesc_version}.`]};s.forEach(c=>o[c]?.forEach(o=>{{var r=/header|usage/.test(c)?1:29;let e=process.stdout.columns||80,s=o.match(/\S+|\s+/g),p=[],i="";s.forEach(s=>{var o=e-(p.length?r:0);i.length+"| ".length+s.length>o&&(p.push(p.length?i.trimStart():i),i=""),i+=s}),p.push(p.length?i.trimStart():i),p.forEach((s,o)=>console.info("| "+(0==o?s:" ".repeat(r)+s)))}})),console.info(`
|
|
18
|
-
${app.msgs.info_moreHelp}, ${app.msgs.info_visit}: `+this.colors.bw+app.urls.docs+this.colors.nc)},helpCmdAndDocURL(){console.info(`
|
|
19
|
-
${app.msgs.info_moreHelp}, ${app.msgs.info_type} ${app.name} --help' ${app.msgs.info_or} ${app.msgs.info_visit}
|
|
20
|
-
`+this.colors.bw+app.urls.docs+this.colors.nc)},version(){var s=require("child_process").execSync(`npm view ${JSON.stringify(app.name)} version`).toString().trim()||"none";let o="none";try{var e=require("path").resolve(process.cwd(),"node_modules",app.name,"package.json");require("fs").existsSync(e)&&(o=require(e).version||"none")}catch(s){this.error("Error reading local package version:",s.message)}console.info(`
|
|
21
|
-
${app.msgs.prefix_globalVer}: ${s}
|
|
22
|
-
${app.msgs.prefix_localVer}: `+o)}};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
3
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
4
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
5
|
-
*/
|
|
6
|
-
let fs=require("fs"),log=require(`./log${env.devMode?"":".min"}.js`),path=require("path");(globalThis.app??={}).config={},module.exports={configFilename:"generate-ip.config.mjs",controls:{qty:{type:"param",defaultVal:1,regex:/^--?qu?a?n?ti?t?y(?:=.*|$)/,parser:e=>parseInt(e,10)},config:{type:"param",regex:/^--?config(?:=.*|$)/},ipv6mode:{type:"flag",mode:!0,regex:/^--?(?:ip)?v?6(?:-?mode)?$/},macMode:{type:"flag",mode:!0,regex:/^--?m(?:ac)?(?:-?mode)?$/},quietMode:{type:"flag",regex:/^--?q(?:uiet)?(?:-?mode)?$/},init:{type:"cmd",regex:/^-{0,2}i(?:nit)?$/},help:{type:"cmd",regex:/^--?h(?:elp)?$/},version:{type:"cmd",regex:/^--?ve?r?s?i?o?n?$/}},async initConfigFile(o=this.configFilename){var e=path.resolve(process.cwd(),o);if(fs.existsSync(e))return log.warn(app.msgs.warn_configFileExists+":",e);var i=path.resolve(__dirname,"../../"+(env.devMode?"../":"./data/")+o);if(fs.existsSync(i))fs.copyFileSync(i,e);else{i=require(`./data${env.devMode?"":".min"}.js`),o=app.urls.jsdelivr+"/generate-ip/"+o;log.data(app.msgs.info_fetchingRemoteConfigFrom+` ${o}...`);try{var r=await i.fetch(o);if(!r.ok)return log.warn(`${app.msgs.warn_remoteConfigNotFound}: ${o} (${r.status})`);i.atomicWrite(e,await r.text())}catch(e){return log.warn(app.msgs.warn_remoteConfigFailed+`: ${o} `+e.message)}}log.success(app.msgs.info_configFileCreated+`: ${e}
|
|
7
|
-
`),log.tip(app.msgs.tip_editToSetDefaults+"."),log.tip(app.msgs.tip_cliArgsPrioritized+".")},load({args:e=process.argv.slice(2),ctrlKeys:t=Object.keys(this.controls)}={}){t.forEach(e=>{var o=this.controls[e];o.mode||"cmd"==o.type||(app.config[e]??=o.defaultVal??("flag"!=o.type&&""))});let o=null;var i=e.find(e=>this.controls.config.regex.test(e));if(i){/=/.test(i)||log.errorAndExit(`[${i}] `+app.msgs.error_mustIncludePath);i=i.split("=")[1];o=path.isAbsolute(i)?i:path.resolve(process.cwd(),i),fs.existsSync(o)||log.configURLandExit(app.msgs.error_configFileNotFound+":",o)}else for(var r of["mjs","cjs","js"]){r=path.resolve(process.cwd(),this.configFilename.replace(/\.[^.]+$/,"."+r));if(fs.existsSync(r)){o=r;break}}if(o)try{var s=require(o),a=s?.default??s;a&&"object"==typeof a||log.configURLandExit(app.msgs.error_invalidConfigFile+"."),Object.assign(app.config,a)}catch(e){log.configURLandExit(app.msgs.error_failedToLoadConfigFile+":",o,`
|
|
8
|
-
`+e.message)}return e.forEach(o=>{if(!/^[^-]|--?(?:config|debug)/.test(o)){var i=t.find(e=>this.controls[e]?.regex?.test(o)),r=(i||log.errorAndExit(`[${o}] ${app.msgs.error_notRecognized}.`),this.controls[i]);if("cmd"!=r.type){let e="param"!=r.type||o.split("=")[1]?.trim();r.mode?app.config.mode=i.replace(/mode$/i,"").toLowerCase():((r=r.parser)&&(e=r(e),isNaN(e)||e<1)&&log.errorAndExit(`[${i}] ${app.msgs.error_nonPositiveNum}.`),app.config[i]=e)}}}),app.config}};
|
package/dist/generate-ip.min.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* © 2024–2026 Adam Lui & contributors under the MIT license.
|
|
3
|
-
* Source: https://github.com/adamlui/js-utils/tree/main/generate-ip/src
|
|
4
|
-
* Documentation: https://github.com/adamlui/js-utils/tree/main/generate-ip/docs
|
|
5
|
-
*/
|
|
6
|
-
Object.assign(globalThis.app??={},{name:"generate-ip",aliases:{ipv4:["ipV4","IPv4","IPV4","Ipv4","IpV4","ip","IP","Ip"],ipv6:["ipV6","IPv6","IPV6","Ipv6","IpV6"],mac:["MAC","Mac","ethernet","Ethernet"]}});let ipv4={generate(t={}){var e={verbose:!0,qty:1};if(log.prefix="ipv4.generate()",validateOptions({options:t,defaultOptions:e,helpURL:"https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#ipv4generateoptions",exampleCall:"ipv4.generate({ verbose: false, qty: 3 })"})){(t={...e,...t}).verbose&&log.info(`Generating IPv4 address${1<t.qty?"es":""}...`);var o=[];if(1<t.qty)for(let e=0;e<t.qty;e++)o.push(this.generate({...t,qty:1,verbose:!1}));else{var i=[];for(let e=0;e<4;e++)i.push(random.int(0,256));o.push(i.join("."))}e=1<t.qty?o:o[0];return t.verbose&&(log.info(`IPv4 address${1<t.qty?"es":""} generated!`),log.info(1==t.qty?e:e.join(", "))),e}},validate(e,t={}){var o="https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#ipv4validateaddress-options",i={verbose:!0};return log.prefix="ipv4.validate()","string"!=typeof e?(log.error("1st arg <address> must be a string."),log.helpURL(o)):validateOptions({options:t,defaultOptions:i,helpURL:o,exampleCall:"ipv4.validate('0.0.255.255', { verbose: false })"})?((t={...i,...t}).verbose&&log.info(`Validating ${e}...`),i=!(4!=(o=e.split(".")).length||o.some(e=>!/^\d+$/.test(e)||parseInt(e,10)<0||255<parseInt(e,10))),t.verbose&&log.info(`IP is ${i?"":"in"}valid IPv4 address!`),i):void 0}},ipv6={generate(i={}){var e={verbose:!0,qty:1,leadingZeros:!1,doubleColon:!0};if(log.prefix="ipv6.generate()",validateOptions({options:i,defaultOptions:e,helpURL:"https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#ipv6generateoptions",exampleCall:"ipv6.generate({ leadingZeros: true, qty: 5 })"})){(i={...e,...i}).verbose&&log.info(`Generating IPv6 address${1<i.qty?"es":""}...`);var r=[];if(1<i.qty)for(let e=0;e<i.qty;e++)r.push(this.generate({...i,qty:1,verbose:!1}));else{let t=[],{qty:e,...o}=i;for(let e=0;e<8;e++)t.push(random.hex(4));r.push(this.format(t.join(":"),{...o,verbose:!1}))}e=1<i.qty?r:r[0];return i.verbose&&(log.info(`IPv6 address${1<i.qty?"es":""} generated!`),log.info(1==i.qty?e:e.join(", "))),e}},format(t,o={}){var i="https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#ipv6formatipv6address-options",r={verbose:!0,leadingZeros:!1,doubleColon:!0};if(log.prefix="ipv6.format()","string"!=typeof t)return log.error("1st arg <ipv6address> must be a string."),log.helpURL(i);if(!this.validate(t,{verbose:!1}))return log.error(t+" is not a valid IPv6 address."),log.helpURL(i);if(validateOptions({options:o,defaultOptions:r,helpURL:i,exampleCall:"ipv6.format('0d::ffff:192.1.56.10/96', { leadingZeros: true, doubleColon: false })"})){o={...r,...o};let e=t;if(e=o.doubleColon?(o.verbose&&log.info("Replacing zero series w/ '::'..."),e.replace(/:(?:0+:)+/,"::")):(o.verbose&&log.info("Expanding '::' into zero series..."),i=e.split(":").filter(Boolean).length,r=o.leadingZeros?"0000":"0",i=Array(8-i).fill(r).join(":"),e.replace("::",`:${i}:`)),o.leadingZeros){o.verbose&&log.info("Adding leading zeros...");var a=e.split(":");for(let e=0;e<a.length;e++)for(;a[e].length<4;)a[e]="0"+a[e];e=a.join(":")}else o.verbose&&log.info("Stripping leading zeros..."),e=t.replace(/(^|(?<=:))0+(?!:)/g,"$1");return o.verbose&&(e!=t?log.info("IP formatted successfully!"):log.info("IP already formatted to specs."),log.info(e)),e}},validate(o,i={}){var r="https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#ipv6validateaddress-options",a={verbose:!0};if(log.prefix="ipv6.validate()","string"!=typeof o)return log.error("1st arg <address> must be a string."),log.helpURL(r);if(validateOptions({options:i,defaultOptions:a,helpURL:r,exampleCall:"ipv6.validate('0:0:0:0:0:ffff:192.1.56.10/96', { verbose: false })"})){(i={...a,...i}).verbose&&log.info(`Validating ${o}...`);let e=o.split(/::?/),t=e[e.length-1];r=!(o.includes("::")&&2<o.split("::").length||/:{3,}/.test(o)||e.length<2||8<e.length||e.some(e=>!(/^[\da-f]{1,4}$/i.test(e)||e==t&&ipv4.validate(t.replace(/\/(?:12[0-8]|[1-9]?\d)$/,""),{verbose:!1}))));return i.verbose&&log.info(`IP is ${r?"":"in"}valid IPv6 address!`),r}}},mac={generate(t={}){var e={verbose:!0,qty:1};if(log.prefix="mac.generate()",validateOptions({options:t,defaultOptions:e,helpURL:"https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#macgenerateoptions",exampleCall:"mac.generate({ verbose: false, qty: 2 })"})){(t={...e,...t}).verbose&&log.info(`Generating MAC address${1<t.qty?"es":""}...`);var o=[];if(1<t.qty)for(let e=0;e<t.qty;e++)o.push(this.generate({...t,qty:1,verbose:!1}));else{var[e,i]=Array.from({length:2},()=>{var t=[];for(let e=0;e<3;e++)t.push(random.hex(2));return t.join(":")});o.push(e+":"+i)}e=1<t.qty?o:o[0];return t.verbose&&(log.info(`MAC address${1<t.qty?"es":""} generated!`),log.info(1==t.qty?e:e.join(", "))),e}},validate(e,t={}){var o="https://github.com/adamlui/js-utils/tree/main/generate-ip/docs/#macvalidateaddress-options",i={verbose:!0};return log.prefix="mac.validate()","string"!=typeof e?(log.error("1st arg <address> must be a string."),log.helpURL(o)):validateOptions({options:t,defaultOptions:i,helpURL:o,exampleCall:"mac.validate('00:1A:2B:3C:4D:5E', { verbose: false })"})?((t={...i,...t}).verbose&&log.info(`Validating ${e}...`),o=/^(?:[\da-f]{2}[:-]){5}[\da-f]{2}$/i.test(e),t.verbose&&log.info(`Address is ${o?"":"in"}valid MAC address!`),o):void 0}};function validateOptions({options:e,defaultOptions:t,helpURL:o,exampleCall:i}){var r,a,s=Object.keys(t).filter(e=>"boolean"==typeof t[e]),l=Object.keys(t).filter(e=>Number.isInteger(t[e]));if("object"!=typeof e)return r=i.split(",").findIndex(e=>e.trim().startsWith("{"))+1,r+=["st","nd","rd"][r-1]||"th",log.error(`${"0th"==r?"[O":r+" arg [o"}ptions] can only be an object of key/vals.`),log.info("Example valid call:",i),log.validOptions(t),log.helpURL(o),!1;for(a in e){if(!Object.prototype.hasOwnProperty.call(t,a))return log.error(`\`${a}\` is an invalid option.`),log.validOptions(t),log.helpURL(o),!1;if(s.includes(a)&&"boolean"!=typeof e[a])return log.error(`[${a}] option can only be \`true\` or \`false\`.`),log.helpURL(o),!1;if(l.includes(a)&&(e[a]=parseInt(e[a],10),isNaN(e[a])||e[a]<1))return log.error(`[${a}] option can only be an integer > 0.`),log.helpURL(o),!1}return!0}let random={int(e,t){var o;return"undefined"==typeof require?(o=(window.crypto||window.msCrypto)?.getRandomValues(new Uint32Array(1))[0]/4294967295||Math.random(),Math.floor(o*(t-e))+e):require("crypto").randomInt(e,t)},hex(t){let o="";for(let e=0;e<t;e++)o+=random.int(0,16).toString(16);return o}},log={prefix:app.name,error(...e){console.error(this.prefix+" » ERROR:",...e)},helpURL(e=app.urls?.docs){this.info("For more help, please visit",e)},info(...e){console.info(this.prefix+" »",...e)},validOptions(e){var t=Object.keys(e).join(", "),e=JSON.stringify(e,void 0,2).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'").replace(/\n\s*/g," ");this.info(`Valid options: [${t}]`),this.info("If omitted, default settings are: "+e)}};app.exports={ipv4:ipv4,ipv6:ipv6,mac:mac};try{module.exports={...app.exports}}catch(e){}try{Object.assign(window,app.exports)}catch(e){}for(let t in app.aliases)app.aliases[t].forEach(e=>{try{module.exports[e]??=module.exports[t]}catch(e){}try{window[e]??=window[t]}catch(e){}});
|