A simple path template engine
TypeScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.vscode
src
test
.gitignore
.travis.yml
LICENSE
README.md
package-lock.json
package.json
tsconfig.json
tslint.json

README.md

bath

A simple path template engine.

Twitter hashtag is #bathjs.

This branch is for 2.x users. 1.x users: See 1.x branch.

Installation

$ npm install bath

Usage

import assert from 'assert';
import bath from 'bath';

const { names, params, path } = bath('/users/{id}');
assert.deepEqual(names, ['id']);
assert.deepEqual(params('/users/123'), { id: '123' });
assert.deepEqual(path({ id: '123' }), '/users/123');
import assert from 'assert';
import { names, params, path } from 'bath';

const template = '/users/{id}';
assert.deepEqual(names(template), ['id']);
assert.deepEqual(params(template)('/users/123'), { id: '123' });
assert.deepEqual(path(template)({ id: '123' }), '/users/123');
import assert from 'assert';
import { names } from 'bath/names'; // import `names()` only
import { params } from 'bath/params'; // import `params()` only
import { path } from 'bath/path';     // import `path()` only

const template = '/users/{id}';
assert.deepEqual(names(template), ['id']);
assert.deepEqual(params(template)('/users/123'), { id: '123' });
assert.deepEqual(path(template)({ id: '123' }), '/users/123');

Types

// '/users/{userId}/messages/{messageId}'
export type PathTemplate = string;

// 'userId'
export type ParameterName = string;

// { 'userId': /^\w+$/, 'messageId': /^\d+$/ }
export type ParameterPatterns = { [parameterName: string]: RegExp; };

// { 'userId': 'john', 'messageId': '123' }
export type Parameters = { [parameterName: string]: string; };

// '/users/john/messages/123'
export type Path = string;

// assert.deepEqual(
//   params('/users/john/messages/123'),
//   { 'userId': 'john', 'messageId': '123' }
// );
export type ParametersFn = (path: Path) => Parameters | null;

// assert.deepEqual(
//   path({ 'userId': 'john', 'messageId': '123' }),
//   '/users/john/messages/123'
// );
export type PathFn = (params: Parameters) => Path | null;

// const { params, path } = bath('/users/{userId}/messages/{messageId}')
export type Bath = (
  template: PathTemplate,
  patterns?: ParameterPatterns
) => { names: ParameterName[]; path: PathFn; params: ParametersFn; };

Related Project

Badges

npm version Travis CI Coveralls

License

MIT

Author

bouzuya <m@bouzuya.net> (http://bouzuya.net)