Skip to content

Commit

Permalink
Add TypeScript definition (#26)
Browse files Browse the repository at this point in the history
  • Loading branch information
BendingBender authored and sindresorhus committed Apr 17, 2019
1 parent 45f4ab5 commit f71137e
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 3 deletions.
70 changes: 70 additions & 0 deletions index.d.ts
@@ -0,0 +1,70 @@
declare namespace ip {
interface Options {
/**
Only match an exact string. Useful with `RegExp#test()` to check if a string is an IP address. *(`false` matches any IP address in a string)*
@default false
*/
readonly exact?: boolean;

/**
Include boundaries in the regex. When `true`, `192.168.0.2000000000` will report as an invalid IPv4 address. If this option is not set, the mentioned IPv4 address would report as valid (ignoring the trailing zeros).
@default false
*/
readonly includeBoundaries?: boolean;
}
}

declare const ip: {
/**
Regular expression for matching IP addresses.
@returns A regex for matching both IPv4 and IPv6.
@example
```
import ipRegex = require('ip-regex');
// Contains an IP address?
ipRegex().test('unicorn 192.168.0.1');
//=> true
// Is an IP address?
ipRegex({exact: true}).test('unicorn 192.168.0.1');
//=> false
'unicorn 192.168.0.1 cake 1:2:3:4:5:6:7:8 rainbow'.match(ipRegex());
//=> ['192.168.0.1', '1:2:3:4:5:6:7:8']
// Contains an IP address?
ipRegex({includeBoundaries: true}).test('192.168.0.2000000000');
//=> false
// Matches an IP address?
'192.168.0.2000000000'.match(ipRegex({includeBoundaries: true}));
//=> null
```
*/
(options?: ip.Options): RegExp;

/**
@returns A regex for matching IPv4.
*/
v4(options?: ip.Options): RegExp;

/**
@returns A regex for matching IPv6.
@example
```
import ipRegex = require('ip-regex');
ipRegex.v6({exact: true}).test('1:2:3:4:5:6:7:8');
//=> true
```
*/
v6(options?: ip.Options): RegExp;
};

export = ip;
13 changes: 13 additions & 0 deletions index.test-d.ts
@@ -0,0 +1,13 @@
import {expectType} from 'tsd';
import ipRegex = require('.');

const options: ipRegex.Options = {};
expectType<RegExp>(ipRegex());
expectType<RegExp>(ipRegex({exact: true}));
expectType<RegExp>(ipRegex({includeBoundaries: true}));
expectType<RegExp>(ipRegex.v4());
expectType<RegExp>(ipRegex.v4({exact: true}));
expectType<RegExp>(ipRegex.v4({includeBoundaries: true}));
expectType<RegExp>(ipRegex.v6());
expectType<RegExp>(ipRegex.v6({exact: true}));
expectType<RegExp>(ipRegex.v6({includeBoundaries: true}));
8 changes: 5 additions & 3 deletions package.json
Expand Up @@ -13,10 +13,11 @@
"node": ">=8"
},
"scripts": {
"test": "xo && ava"
"test": "xo && ava && tsd"
},
"files": [
"index.js"
"index.js",
"index.d.ts"
],
"keywords": [
"ip",
Expand All @@ -36,7 +37,8 @@
"validate"
],
"devDependencies": {
"ava": "^1.1.0",
"ava": "^1.4.1",
"tsd": "^0.7.2",
"xo": "^0.24.0"
}
}

0 comments on commit f71137e

Please sign in to comment.