ip-wiki
v1.0.0
Published
An IP address utility library for Wikipedia and NodeJS.
Downloads
2
Maintainers
Readme
ip-wiki
— IP Address Utility Library for Wikipedia and NodeJS
ip-wiki
is a JavaScript library written in ES6 that provides classes for manipulating IP and CIDR addresses. As the name suggests, it was developed for use on (front-end) Wikipedia; however, it also works as a NodeJS module in back-end environments.
- API documentation is avaiable!
- The library is TypeScript-compatible!
- No external dependencies!
Installation
npm install ip-wiki
If you only need type definitions:
npm install -D ip-wiki
Usage
NodeJS
In CommonJS:
const {IP, IPUtil} = require('ip-wiki');
In ES modules:
import {IP, IPUtil} from 'ip-wiki';
Then:
Wikipedia
Load and import ja:MediaWiki:Gadget-ip-wiki.js. In this case, this package is for Intellisense (you may also want to install types-mediawiki as a dev dependency).
/**
* @returns {JQueryPromise<import('ip-wiki')>}
*/
function getIpWiki() {
const gadget = 'ext.gadget.ip-wiki';
return mw.loader.using(gadget).then((req) => req(gadget));
}
getIpWiki().then((ipWiki) => {
const {IP, IPUtil} = ipWiki;
// ...
});
Note that you may need to cross-wiki-load the gadget if a module named ip-wiki
is not defined in the local Gadgets-definition:
/**
* @returns {JQueryPromise<import('ip-wiki')>}
*/
function getIpWikiX() {
const gadget = 'ext.gadget.ip-wiki';
return mw.loader.getScript('https://ja.wikipedia.org/w/load.php?modules=' + gadget).then(() => {
return mw.loader.using(gadget).then((req) => req(gadget));
});
}
Then:
Class showcases
This library has two main classes: the IP class and the static IPUtil class:
- Use the IP class when you need to do manipulations on the same IP recursively (more efficient than to use IPUtil because we can skip the parsing process of the relevant input IP string).
- Use the IPUtil class for one-time manipulations (i.e. when there is no need to create a class instance).
Class IP
Suppose that you need to retrieve the indexes of IP-representing elements in the ipArr
array that equal the IP address 192.168.1.1
:
const ip = IP.newFromText('192.168.1.1');
if (!ip) {
return;
}
const ipArr = [
'192.168.1.1/32',
'::1',
'192.168.001.001'
];
const indexes = ipArr.reduce(/** @param {number[]} acc */ (acc, ipStr, i) => {
if (ip.equals(ipStr)) { // Not IPUtil.equals('192.168.1.1', ipStr)
acc.push(i);
}
return acc;
}, []);
console.log(indexes); // [ 0, 2 ]
Class IPUtil
Suppose that you need to filter the ipArr
array so that it will only contain IPv6 addresses and CIDRs:
const ipArr = [
'192.168.1.1/32',
'::1',
'192.168.001.001'
];
const filtered = ipArr.filter((ip) => IPUtil.isIPv6(ip, true));
console.log(filtered); // [ '::1' ]
Suppose that you need to create an array of IPv6 CIDRs in their sanitized notations out of the ipArr
array:
const ipArr = [
'foo',
'192.168.1.0',
'fd12:3456:789a:1::1',
'fd12:3456:789a:0:0:0:0:0/48',
'fd12:3456:789a:1::/64'
];
const ipv6Cidrs = ipArr.reduce(/** @param {string[]} acc */ (acc, ipStr) => {
const sanitized = IPUtil.sanitize(ipStr, false, (version, isCidr) => version === 6 && isCidr);
if (sanitized) {
acc.push(sanitized);
}
return acc;
}, []);
console.log(ipv6Cidrs); // [ 'fd12:3456:789a:0:0:0:0:0/48', 'fd12:3456:789a:1:0:0:0:0/64' ]
Methods
For a number of other methods, see the API documentation!