diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..0999ed2 --- /dev/null +++ b/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; diff --git a/index.test-d.ts b/index.test-d.ts new file mode 100644 index 0000000..df2c872 --- /dev/null +++ b/index.test-d.ts @@ -0,0 +1,13 @@ +import {expectType} from 'tsd'; +import ipRegex = require('.'); + +const options: ipRegex.Options = {}; +expectType(ipRegex()); +expectType(ipRegex({exact: true})); +expectType(ipRegex({includeBoundaries: true})); +expectType(ipRegex.v4()); +expectType(ipRegex.v4({exact: true})); +expectType(ipRegex.v4({includeBoundaries: true})); +expectType(ipRegex.v6()); +expectType(ipRegex.v6({exact: true})); +expectType(ipRegex.v6({includeBoundaries: true})); diff --git a/package.json b/package.json index d51cca0..16ade6d 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,11 @@ "node": ">=8" }, "scripts": { - "test": "xo && ava" + "test": "xo && ava && tsd" }, "files": [ - "index.js" + "index.js", + "index.d.ts" ], "keywords": [ "ip", @@ -36,7 +37,8 @@ "validate" ], "devDependencies": { - "ava": "^1.1.0", + "ava": "^1.4.1", + "tsd": "^0.7.2", "xo": "^0.24.0" } }