generate-ip 2.4.8 → 2.4.9

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
@@ -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.4.8">
14
- <img height=31 src="https://img.shields.io/badge/Latest_Build-2.4.8-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
13
+ <a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.4.9">
14
+ <img height=31 src="https://img.shields.io/badge/Latest_Build-2.4.9-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.4.8/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.4.8&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
17
+ <a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.4.9/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.4.9&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.4.8/dist/generate-ip.min.js"></script>
90
+ <script src="https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8/dist/generate-ip.min.js')
97
+ await import('https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8/dist/generate-ip.min.js
106
+ // @require https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js`
114
+ 📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.4.9` 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
 
@@ -1,21 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * © 2024–2026 Adam Lui & contributors under the MIT license.
4
- * Source: https://code.generate-ip.org
5
- * Documentation: https://docs.generate-ip.org
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
6
  */
7
- (async()=>{globalThis.env={devMode:__dirname.match(/[\\/]src/)};var e=require("node-clipboardy"),s=require("child_process").execSync,o=require("fs"),{getMsgs:a,getSysLang:p}=require(`./lib/language${env.devMode?"":".min"}.js`),{ipv4:r,ipv6:i,mac:n}=require(`../generate-ip${env.devMode?"":".min"}.js`),t=require("path");globalThis.app=require(`../${env.devMode?"../":"./data/"}app.json`),app.urls.docs+="/#-command-line-usage",app.msgs=await a(p()),app.regex={paramOptions:{qty:/^--?qu?a?n?ti?t?y(?:=.*|$)/},flags:{ipv6mode:/^--?(?:ip)?v?6(?:-?mode)?$/,macMode:/^--?m(?:ac)?(?:-?mode)?$/,quietMode:/^--?q(?:uiet)?(?:-?mode)?$/},infoCmds:{help:/^--?h(?:elp)?$/,version:/^--?ve?r?s?i?o?n?$/},version:/^[~^>=]?\d+\.\d+\.\d+$/};let m="",g="";if(app.config={},process.argv.forEach(p=>{var e,s,o;p.startsWith("-")&&(e=Object.keys(app.regex.paramOptions).find(e=>app.regex.paramOptions[e].test(p)),o=Object.keys(app.regex.flags).find(e=>app.regex.flags[e].test(p)),s=Object.keys(app.regex.infoCmds).find(e=>app.regex.infoCmds[e].test(p)),o?app.config[o]=!0:e?(/=.+/.test(p)||(console.error(`
8
- ${m}${app.msgs.prefix_error}: Arg [--${p.replace(/-/g,"")}] ${app.msgs.error_noEqual}.`),f(),process.exit(1)),o=p.split("=")[1],app.config[e]=parseInt(o)||o):s||/ipv4/.test(p)||(console.error(`
9
- ${m}${app.msgs.prefix_error}: Arg [${p}] ${app.msgs.error_notRecognized}.`),console.info(`
10
- ${app.msgs.info_validArgs}.`),l(["paramOptions","flags","infoCmds"]),process.exit(1)))}),app.config.qty&&(isNaN(app.config.qty)||app.config.qty<1)&&(console.error(`
11
- ${m}${app.msgs.prefix_error}: [qty] ${app.msgs.error_nonPositiveNum}.`),f(),process.exit(1)),process.argv.some(e=>app.regex.infoCmds.help.test(e)))l();else if(process.argv.some(e=>app.regex.infoCmds.version.test(e))){var a=s(`npm view ${JSON.stringify(app.name)} version`).toString().trim()||"none";let e,p=process.cwd();for(;"/"!=p;){var c=t.join(p,"package.json");if(o.existsSync(c)){c=require(c);e=(c.dependencies?.[app.name]||c.devDependencies?.[app.name])?.match(app.regex.version)?.[1]||"none";break}p=t.dirname(p)}console.info(`
12
- ${app.msgs.prefix_globalVer}: `+a),console.info(app.msgs.prefix_localVer+": "+e)}else{p={qty:app.config.qty||1,verbose:!app.config.quietMode},s=(app.config.ipv6mode?i:app.config.macMode?n:r).generate(p);a=`
13
- ${app.msgs.info_copying}...`,app.config.quietMode||console.info(a),e.writeSync(Array.isArray(s)?s.join("\n"):s)}function f(){console.info(`
14
- ${app.msgs.info_moreHelp}, ${app.msgs.info_type} ${app.name} --help' ${app.msgs.info_or} ${app.msgs.info_visit}
15
- ${g}${app.urls.docs}`)}function l(e=["header","usage","paramOptions","flags","infoCmds"]){app.prefix=` ${app.name}  `;let p={header:[`
16
- ├ ${app.prefix}${app.msgs.appCopyright||`© ${app.copyrightYear} ${app.author} under the ${app.license} license`}.`,""+app.prefix+app.msgs.prefix_source+": "+app.urls.src],usage:[`
17
- ${g}o ${app.msgs.helpSection_usage}:`,` ${g}» ${app.cmdFormat}`],paramOptions:[`
18
- ${g}o ${app.msgs.helpSection_paramOptions}:`,` --qty=n ${app.msgs.optionDesc_qty}.`],flags:[`
19
- ${g}o ${app.msgs.helpSection_flags}:`,` -6, --ipv6 ${app.msgs.optionDesc_ipv6}.`,` -m, --mac ${app.msgs.optionDesc_mac}.`,` -q, --quiet ${app.msgs.optionDesc_quiet}.`],infoCmds:[`
20
- ${g}o ${app.msgs.helpSection_infoCmds}:`," -h, --help "+app.msgs.optionDesc_help,` -v, --version ${app.msgs.optionDesc_version}.`]};e.forEach(i=>p[i]?.forEach(p=>{{var r=/header|usage/.test(i)?1:29;let s=process.stdout.columns||80,o=[],e=p.match(/\S+|\s+/g),a="";e.forEach(e=>{var p=s-(o.length?r:0);a.length+"| ".length+e.length>p&&(o.push(o.length?a.trimStart():a),a=""),a+=e}),o.push(o.length?a.trimStart():a),o.forEach((e,p)=>console.info("| "+(0==p?e:" ".repeat(r)+e)))}})),console.info(`
21
- ${app.msgs.info_moreHelp}, ${app.msgs.info_visit}: ${g}${app.urls.docs}`)}})();
7
+ (async()=>{globalThis.env={devMode:__dirname.match(/[\\/]src/)};let e=require("node-clipboardy"),{getMsgs:p,getSysLang:o}=require(`./lib/language${env.devMode?"":".min"}.js`),{ipv4:r,ipv6:s,mac:a}=require(`../generate-ip${env.devMode?"":".min"}.js`),i=require(`./lib/print${env.devMode?"":".min"}.js`);var n;Object.assign(globalThis.app??={},require(`../${env.devMode?"../":"./data/"}app.json`)),app.urls.docs+="/#-command-line-usage",app.msgs=await p(o()),app.colors={nc:"",br:"",by:"",bg:"",bw:"",blk:"",tlBG:""},app.regex={paramOptions:{qty:/^--?qu?a?n?ti?t?y(?:=.*|$)/},flags:{ipv6mode:/^--?(?:ip)?v?6(?:-?mode)?$/,macMode:/^--?m(?:ac)?(?:-?mode)?$/,quietMode:/^--?q(?:uiet)?(?:-?mode)?$/},infoCmds:{help:/^--?h(?:elp)?$/,version:/^--?ve?r?s?i?o?n?$/},version:/^[~^>=]?\d+\.\d+\.\d+$/},app.config={},process.argv.forEach(p=>{var e,o,r;p.startsWith("-")&&(e=Object.keys(app.regex.paramOptions).find(e=>app.regex.paramOptions[e].test(p)),r=Object.keys(app.regex.flags).find(e=>app.regex.flags[e].test(p)),o=Object.keys(app.regex.infoCmds).find(e=>app.regex.infoCmds[e].test(p)),r?app.config[r]=!0:e?(/=.+/.test(p)||(console.error(`
8
+ ${app.colors.br}${app.msgs.prefix_error}: Arg [--${p.replace(/-/g,"")}] ${app.msgs.error_noEqual}.`+app.colors.nc),i.helpCmdAndDocURL(),process.exit(1)),r=p.split("=")[1],app.config[e]=parseInt(r)||r):o||/ipv4/.test(p)||(console.error(`
9
+ ${app.colors.br}${app.msgs.prefix_error}: Arg [${p}] ${app.msgs.error_notRecognized}.`+app.colors.nc),console.info(`
10
+ ${app.colors.by}${app.msgs.info_validArgs}.`+app.colors.nc),i.help(["paramOptions","flags","infoCmds"]),process.exit(1)))}),app.config.qty&&(isNaN(app.config.qty)||app.config.qty<1)&&(console.error(`
11
+ ${app.colors.br}${app.msgs.prefix_error}: [qty] ${app.msgs.error_nonPositiveNum}.`+app.colors.nc),i.helpCmdAndDocURL(),process.exit(1)),process.argv.some(e=>app.regex.infoCmds.help.test(e))?i.help():process.argv.some(e=>app.regex.infoCmds.version.test(e))?i.version():(n={qty:app.config.qty||1,verbose:!app.config.quietMode},n=(app.config.ipv6mode?s:app.config.macMode?a:r).generate(n),i.ifNotQuiet(`
12
+ ${app.msgs.info_copying}...`),e.writeSync([].concat(n).join("\n")))})();
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * © 2024–2026 Adam Lui & contributors under the MIT license.
3
- * Source: https://code.generate-ip.org
4
- * Documentation: https://docs.generate-ip.org
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
5
  */
6
6
  module.exports={fetch(n){return 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)})},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,6 +1,6 @@
1
1
  /**
2
2
  * © 2024–2026 Adam Lui & contributors under the MIT license.
3
- * Source: https://code.generate-ip.org
4
- * Documentation: https://docs.generate-ip.org
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
5
  */
6
6
  module.exports={async getMsgs(r="en"){var e=require(`./data${env.devMode?"":".min"}.js`);let t=e.flatten(require(`../../${env.devMode?"../_locales/en/":"data/"}messages.json`),{key:"message"});if(!r.startsWith("en")){var n=`${app.urls.jsdelivr}@${app.commitHashes.locales}/${app.name}/_locales/`;let s=n+`${r?r.replace("-","_"):"en"}/`+"messages.json",a=0;for(;a<3;)try{t=e.flatten(await(await e.fetch(s)).json(),{key:"message"});break}catch(e){if(3==++a)break;s=r.includes("-")&&1==a?s.replace(/([^_]*)_[^/]*(\/.*)/,"$1$2"):n+"en/messages.json"}}return t},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 console.error("ERROR loading system language:",e.message),"en"}}};
@@ -0,0 +1,16 @@
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={helpCmdAndDocURL(){console.info(`
7
+ ${app.msgs.info_moreHelp}, ${app.msgs.info_type} ${app.name} --help' ${app.msgs.info_or} ${app.msgs.info_visit}
8
+ `+app.colors.bw+app.urls.docs+app.colors.nc)},help(p=["header","usage","paramOptions","flags","infoCmds"]){app.prefix=""+app.colors.tlBG+app.colors.blk+` ${app.name} ${app.colors.nc} `;let o={header:[`
9
+ ├ ${app.prefix}${app.msgs.appCopyright||`© ${app.copyrightYear} ${app.author} under the ${app.license} license`}.`,""+app.prefix+app.msgs.prefix_source+": "+app.urls.src],usage:[`
10
+ ${app.colors.bw}o ${app.msgs.helpSection_usage}:`+app.colors.nc,` ${app.colors.bw}» `+app.colors.bg+app.cmdFormat+app.colors.nc],paramOptions:[`
11
+ ${app.colors.bw}o ${app.msgs.helpSection_paramOptions}:`+app.colors.nc,` --qty=n ${app.msgs.optionDesc_qty}.`],flags:[`
12
+ ${app.colors.bw}o ${app.msgs.helpSection_flags}:`+app.colors.nc,` -6, --ipv6 ${app.msgs.optionDesc_ipv6}.`,` -m, --mac ${app.msgs.optionDesc_mac}.`,` -q, --quiet ${app.msgs.optionDesc_quiet}.`],infoCmds:[`
13
+ ${app.colors.bw}o ${app.msgs.helpSection_infoCmds}:`+app.colors.nc," -h, --help "+app.msgs.optionDesc_help,` -v, --version ${app.msgs.optionDesc_version}.`]};p.forEach(n=>o[n]?.forEach(o=>{{var r=/header|usage/.test(n)?1:29;let s=process.stdout.columns||80,e=[],p=o.match(/\S+|\s+/g),a="";p.forEach(p=>{var o=s-(e.length?r:0);a.length+"| ".length+p.length>o&&(e.push(e.length?a.trimStart():a),a=""),a+=p}),e.push(e.length?a.trimStart():a),e.forEach((p,o)=>console.info("| "+(0==o?p:" ".repeat(r)+p)))}})),console.info(`
14
+ ${app.msgs.info_moreHelp}, ${app.msgs.info_visit}: `+app.colors.bw+app.urls.docs+app.colors.nc)},ifNotQuiet(p){app.config.quietMode||console.info(p)},version(){var p=require("path"),o=require("child_process").execSync(`npm view ${JSON.stringify(app.name)} version`).toString().trim()||"none";let s,e=process.cwd();for(;"/"!=e;){var a=p.join(e,"package.json");if(require("fs").existsSync(a)){a=require(a);s=(a.dependencies?.[app.name]||a.devDependencies?.[app.name])?.match(/^[~^>=]?\d+\.\d+\.\d+$/)?.[1]||"none";break}e=p.dirname(e)}console.info(`
15
+ ${app.msgs.prefix_globalVer}: ${o}
16
+ ${app.msgs.prefix_localVer}: `+s)}};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * © 2024–2026 Adam Lui & contributors under the MIT license.
3
- * Source: https://code.generate-ip.org
4
- * Documentation: https://docs.generate-ip.org
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
5
  */
6
- let ipv4={generate:function(o={}){var e="ipv4.generate() » ",t={verbose:!0,qty:1};if(validateOptions(o,t,"https://docs.generate-ip.org/#ipv4generateoptions","ipv4.generate({ verbose: false, qty: 3 })")){(o={...t,...o}).verbose&&console.info(e+`Generating IPv4 address${1<o.qty?"es":""}...`);var r=[];if(1<o.qty)for(let e=0;e<o.qty;e++)r.push(this.generate({...o,qty:1,verbose:!1}));else{var s=[];for(let e=0;e<4;e++)s.push(randomInt(0,256));r.push(s.join("."))}t=1<o.qty?r:r[0];return o.verbose&&(console.info(e+`IPv4 address${1<o.qty?"es":""} generated!`),console.info(e+(1==o.qty?t:t.join(", ")))),t}},validate:function(e,o={}){var t="https://docs.generate-ip.org/#ipv4validateaddress-options",r={verbose:!0},s="ipv4.validate() » ";if("string"!=typeof e)console.error(s+"ERROR: 1st arg <address> must be a string."),console.info(s+"For more help, please visit "+t);else if(validateOptions(o,r,t,"ipv4.validate('0.0.255.255', { verbose: false })"))return(o={...r,...o}).verbose&&console.info(s+`Validating ${e}...`),r=!(4!=(t=e.split(".")).length||t.some(e=>!/^\d+$/.test(e)||parseInt(e,10)<0||255<parseInt(e,10))),o.verbose&&console.info(s+`IP is ${r?"":"in"}valid IPv4 address!`),r}},ipv6={generate:function(r={}){var e="ipv6.generate() » ",o={verbose:!0,qty:1,leadingZeros:!1,doubleColon:!0};if(validateOptions(r,o,"https://docs.generate-ip.org/#ipv6generateoptions","ipv6.generate({ leadingZeros: true, qty: 5 })")){(r={...o,...r}).verbose&&console.info(e+`Generating IPv6 address${1<r.qty?"es":""}...`);var s=[];if(1<r.qty)for(let e=0;e<r.qty;e++)s.push(this.generate({...r,qty:1,verbose:!1}));else{let o=[],{qty:e,...t}=r;for(let e=0;e<8;e++){var n=randomHex(4);o.push(n)}s.push(this.format(o.join(":"),{...t,verbose:!1}))}o=1<r.qty?s:s[0];return r.verbose&&(console.info(e+`IPv6 address${1<r.qty?"es":""} generated!`),console.info(e+(1==r.qty?o:o.join(", ")))),o}},format:function(o,t={}){var r,e="https://docs.generate-ip.org/#ipv6formatipv6address-options",s="ipv6.format() » ",n={verbose:!0,leadingZeros:!1,doubleColon:!0};if("string"!=typeof o)console.error(s+"ERROR: 1st arg <ipv6address> must be a string."),console.info(s+"For more help, please visit "+e);else if(this.validate(o,{verbose:!1})){if(validateOptions(t,n,e,"ipv6.format('0d::ffff:192.1.56.10/96', { leadingZeros: true, doubleColon: false })")){t={...n,...t};let e=o;if(e=t.doubleColon?(t.verbose&&console.info(s+"Replacing zero series w/ '::'..."),e.replace(/:(?:0+:)+/,"::")):(t.verbose&&console.info(s+"Expanding '::' into zero series..."),n=e.split(":").filter(Boolean).length,r=t.leadingZeros?"0000":"0",n=Array(8-n).fill(r).join(":"),e.replace("::",`:${n}:`)),t.leadingZeros){t.verbose&&console.info(s+"Adding leading zeros...");var i=e.split(":");for(let e=0;e<i.length;e++)for(;i[e].length<4;)i[e]="0"+i[e];e=i.join(":")}else t.verbose&&console.info(s+"Stripping leading zeros..."),e=o.replace(/(^|(?<=:))0+(?!:)/g,"$1");return t.verbose&&(e!=o?console.info(s+"IP formatted successfully!"):console.info(s+"IP already formatted to specs."),console.info(s+e)),e}}else console.error(s+`ERROR: ${o} is not a valid IPv6 address.`),console.info(s+"For more help, please visit "+e)},validate:function(t,r={}){var s="https://docs.generate-ip.org/#ipv6validateaddress-options",n={verbose:!0},i="ipv6.validate() » ";if("string"!=typeof t)console.error(i+"ERROR: 1st arg <address> must be a string."),console.info(i+"For more help, please visit "+s);else if(validateOptions(r,n,s,"ipv6.validate('0:0:0:0:0:ffff:192.1.56.10/96', { verbose: false })")){(r={...n,...r}).verbose&&console.info(i+`Validating ${t}...`);let e=t.split(/::?/),o=e[e.length-1];s=!(t.includes("::")&&2<t.split("::").length||/:{3,}/.test(t)||e.length<2||8<e.length||e.some(e=>!(/^[\da-f]{1,4}$/i.test(e)||e==o&&ipv4.validate(o.replace(/\/(?:12[0-8]|[1-9]?\d)$/,""),{verbose:!1}))));return r.verbose&&console.info(i+`IP is ${s?"":"in"}valid IPv6 address!`),s}}},mac={generate:function(o={}){var e="mac.generate() » ",t={verbose:!0,qty:1};if(validateOptions(o,t,"https://docs.generate-ip.org/#macgenerateoptions","mac.generate({ verbose: false, qty: 2 })")){(o={...t,...o}).verbose&&console.info(e+`Generating MAC address${1<o.qty?"es":""}...`);var r=[];if(1<o.qty)for(let e=0;e<o.qty;e++)r.push(this.generate({...o,qty:1,verbose:!1}));else{var[t,s]=Array.from({length:2},()=>{var o=[];for(let e=0;e<3;e++)o.push(randomHex(2));return o.join(":")});r.push(t+":"+s)}t=1<o.qty?r:r[0];return o.verbose&&(console.info(e+`MAC address${1<o.qty?"es":""} generated!`),console.info(e+(1==o.qty?t:t.join(", ")))),t}},validate:function(e,o={}){var t="https://docs.generate-ip.org/#macvalidateaddress-options",r={verbose:!0},s="mac.validate() » ";if("string"!=typeof e)console.error(s+"ERROR: 1st arg <address> must be a string."),console.info(s+"For more help, please visit "+t);else if(validateOptions(o,r,t,"mac.validate('00:1A:2B:3C:4D:5E', { verbose: false })"))return(o={...r,...o}).verbose&&console.info(s+`Validating ${e}...`),t=/^(?:[\da-f]{2}[:-]){5}[\da-f]{2}$/i.test(e),o.verbose&&console.info(s+`Address is ${t?"":"in"}valid MAC address!`),t}};function randomInt(e,o){var t;return"undefined"==typeof require?(t=(window.crypto||window.msCrypto)?.getRandomValues(new Uint32Array(1))[0]/4294967295||Math.random(),Math.floor(t*(o-e))+e):require("crypto").randomInt(e,o)}function randomHex(o){let t="";for(let e=0;e<o;e++)t+=randomInt(0,16).toString(16);return t}function validateOptions(e,o,t,r){let s=JSON.stringify(o,void 0,2).replace(/"([^"]+)":/g,"$1:").replace(/"/g,"'").replace(/\n\s*/g," "),n=Object.keys(o).join(", "),i=Object.keys(o).filter(e=>"boolean"==typeof o[e]),a=Object.keys(o).filter(e=>Number.isInteger(o[e])),l=`${validateOptions.caller?.name||"validateOptions"}() » `;var d,p=r.split(",").findIndex(e=>e.trim().startsWith("{"))+1;function v(){console.info(l+`Valid options: [ ${n} ]`),console.info(l+"If omitted, default settings are: "+s)}function f(){console.info(l+"For more help, please visit "+t)}if(p+=["st","nd","rd"][p-1]||"th","object"!=typeof e)return console.error(l+`ERROR: ${"0th"==p?"[O":p+" arg [o"}ptions] can only be an object of key/values.`),console.info(l+"Example valid call: "+r),v(),f(),!1;for(d in e){if(!Object.prototype.hasOwnProperty.call(o,d))return console.error(l+`ERROR: \`${d}\` is an invalid option.`),v(),f(),!1;if(i.includes(d)&&"boolean"!=typeof e[d])return console.error(l+`ERROR: [${d}] option can only be \`true\` or \`false\`.`),f(),!1;if(a.includes(d)&&(e[d]=parseInt(e[d],10),isNaN(e[d])||e[d]<1))return console.error(l+`ERROR: [${d}] option can only be an integer > 0.`),f(),!1}return!0}let gipAliases={ipv4:["ipV4","IPv4","IPV4","Ipv4","IpV4","ip","IP","Ip"],ipv6:["ipV6","IPv6","IPV6","Ipv6","IpV6"],mac:["MAC","Mac","ethernet","Ethernet"]};try{module.exports={ipv4:ipv4,ipv6:ipv6,mac:mac}}catch(e){}try{window.ipv4=ipv4,window.ipv6=ipv6,window.mac=mac}catch(e){}for(let o in gipAliases)gipAliases[o].forEach(e=>{try{module.exports[e]=module.exports[o]}catch(e){}try{window[e]=window[o]}catch(e){}});
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){}});
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.4.8">
14
- <img height=31 src="https://img.shields.io/badge/Latest_Build-2.4.8-44cc11.svg?logo=icinga&logoColor=white&labelColor=464646&style=for-the-badge"></a>
13
+ <a href="https://github.com/adamlui/js-utils/releases/tag/generate-ip-2.4.9">
14
+ <img height=31 src="https://img.shields.io/badge/Latest_Build-2.4.9-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.4.8/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.4.8&label=Minified%20Size&logo=databricks&logoColor=white&labelColor=464646&color=ff69b4&style=for-the-badge"></a>
17
+ <a href="https://github.com/adamlui/js-utils/blob/generate-ip-2.4.9/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.4.9&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.4.8/dist/generate-ip.min.js"></script>
90
+ <script src="https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8/dist/generate-ip.min.js')
97
+ await import('https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8/dist/generate-ip.min.js
106
+ // @require https://cdn.jsdelivr.net/npm/generate-ip@2.4.9/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.4.8` version tag from the jsDelivr URL: `https://cdn.jsdelivr.net/npm/generate-ip/dist/generate-ip.min.js`
114
+ 📝 **Note:** To always import the latest version (not recommended in production!) remove the `@2.4.9` 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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generate-ip",
3
- "version": "2.4.8",
3
+ "version": "2.4.9",
4
4
  "description": "Randomly generate, format, and validate IPv4 + IPv6 + MAC addresses.",
5
5
  "author": {
6
6
  "name": "Adam Lui",
@@ -66,6 +66,6 @@
66
66
  "node-clipboardy": "^1.0.3"
67
67
  },
68
68
  "devDependencies": {
69
- "@adamlui/minify.js": "^2.1.3"
69
+ "@adamlui/minify.js": "^2.1.4"
70
70
  }
71
71
  }