Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TypeScript .d.ts file for type checking #72

Merged
merged 1 commit into from
May 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
node_modules
coverage
components
typings
4 changes: 4 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ Path-To-RegExp breaks compatibility with Express <= `4.x`:
* Other RegExp features are not support - no nested matching groups, non-capturing groups or look aheads
* Parameters have suffixes that augment meaning - `*`, `+` and `?`. E.g. `/:user*`

## TypeScript

Includes a [`.d.ts`](index.d.ts) file for TypeScript users.

## Live Demo

You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/).
Expand Down
53 changes: 53 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
declare function pathToRegexp (path: pathToRegexp.Path, options?: pathToRegexp.Options): pathToRegexp.PathRegExp;
declare function pathToRegexp (path: pathToRegexp.Path, keys: pathToRegexp.Token[], options?: pathToRegexp.Options): pathToRegexp.PathRegExp;

declare namespace pathToRegexp {
export interface PathRegExp extends RegExp {
// An array to be populated with the keys found in the path.
keys: Key[];
}

export interface Options {
// When `true` the route will be case sensitive. (default: `false`)
sensitive?: boolean;
// When `false` the trailing slash is optional. (default: `false`)
strict?: boolean;
// When `false` the path will match at the beginning. (default: `true`)
end?: boolean;
}

/**
* Parse an Express-style path into an array of tokens.
*/
export function parse (path: string): Token[];

/**
* Transforming an Express-style path into a valid path.
*/
export function compile (path: string): PathFunction;

/**
* Transform an array of tokens into a path generator function.
*/
export function tokensToFunction (tokens: Token[]): PathFunction;

/**
* Transform an array of tokens into a matching regular expression.
*/
export function tokensToRegExp (tokens: Token[], options?: Options): PathRegExp;

export interface Key {
name: string | number;
prefix: string;
delimiter: string;
optional: boolean;
repeat: boolean;
pattern: string;
}

export type Token = string | Key;
export type Path = string | RegExp | Array<string | RegExp>;
export type PathFunction = (data?: Object) => string;
}

export = pathToRegexp;
12 changes: 9 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
"name": "path-to-regexp",
"description": "Express style path to RegExp utility",
"version": "1.2.1",
"main": "index.js",
"typings": "index.d.ts",
"files": [
"index.js",
"LICENSE"
],
"scripts": {
"lint": "standard",
"test-spec": "mocha -R spec --bail",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- -R spec",
"test-spec": "mocha --require ts-node/register -R spec --bail test.ts",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require ts-node/register -R spec test.ts",
"prepublish": "typings install",
"test": "npm run lint && npm run test-cov"
},
"keywords": [
Expand All @@ -33,7 +36,10 @@
"istanbul": "~0.3.0",
"mocha": "~2.2.4",
"pre-commit": "~1.0.5",
"standard": "~3.7.3"
"standard": "~3.7.3",
"ts-node": "^0.5.5",
"typescript": "^1.8.7",
"typings": "^0.6.9"
},
"dependencies": {
"isarray": "0.0.1"
Expand Down
47 changes: 34 additions & 13 deletions test.js → test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
/* global describe, it */

var util = require('util')
var expect = require('chai').expect
var pathToRegexp = require('./')
/// <reference path="typings/main.d.ts" />

import util = require('util')
import chai = require('chai')
import pathToRegexp = require('./index')

const expect = chai.expect

type Test = [
pathToRegexp.Path,
pathToRegexp.Options,
pathToRegexp.Token[],
Array<[string, string[]]>,
Array<[any, string]>
]

/**
* An array of test cases with expected inputs and outputs.
*
* @type {Array}
*/
var TESTS = [
var TESTS: Test[] = [
/**
* Simple paths.
*/
Expand Down Expand Up @@ -342,7 +354,8 @@ var TESTS = [
['/two', ['/two']],
['/three', null],
['/one/two', null]
]
],
[]
],

/**
Expand Down Expand Up @@ -1373,7 +1386,8 @@ var TESTS = [
[],
[
['/match/anything', ['/match/anything']]
]
],
[]
],
[
/(.*)/,
Expand All @@ -1390,7 +1404,8 @@ var TESTS = [
],
[
['/match/anything', ['/match/anything', '/match/anything']]
]
],
[]
],
[
/\/(\d+)/,
Expand All @@ -1408,7 +1423,8 @@ var TESTS = [
[
['/abc', null],
['/123', ['/123', '123']]
]
],
[]
],

/**
Expand All @@ -1429,7 +1445,8 @@ var TESTS = [
],
[
['/test', ['/test', undefined]]
]
],
[]
],
[
['/:test(\\d+)', /(.*)/],
Expand All @@ -1455,7 +1472,8 @@ var TESTS = [
[
['/123', ['/123', '123', undefined]],
['/abc', ['/abc', undefined, '/abc']]
]
],
[]
],

/**
Expand Down Expand Up @@ -1485,7 +1503,8 @@ var TESTS = [
[
['/test', ['/test', 'test', undefined]],
['/route/test', ['/route/test', undefined, 'test']]
]
],
[]
],
[
[/^\/([^\/]+)$/, /^\/route\/([^\/]+)$/],
Expand All @@ -1511,7 +1530,8 @@ var TESTS = [
[
['/test', ['/test', 'test', undefined]],
['/route/test', ['/route/test', undefined, 'test']]
]
],
[]
],

/**
Expand All @@ -1523,7 +1543,8 @@ var TESTS = [
[],
[
['/anything/you/want', ['/anything/you/want']]
]
],
[]
],

/**
Expand Down
9 changes: 9 additions & 0 deletions typings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"ambientDependencies": {
"mocha": "github:DefinitelyTyped/DefinitelyTyped/mocha/mocha.d.ts#d6dd320291705694ba8e1a79497a908e9f5e6617",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#48c1e3c1d6baefa4f1a126f188c27c4fefd36bff"
},
"devDependencies": {
"chai": "github:typed-typings/npm-chai#01a92b8efc0cfa0ac894d695abd06b8b11e3b75b"
}
}