• Stars
    star
    321
  • Rank 130,752 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Quickly parse & match URLs

matchit Build Status

Quickly parse & match URLs

Install

$ npm install --save matchit

Usage

const { exec, match, parse } = require('matchit');

parse('/foo/:bar/:baz?');
//=> [
//=>   { old:'/foo/:bar', type:0, val:'foo' },
//=>   { old:'/foo/:bar', type:1, val:'bar' },
//=>   { old:'/foo/:bar', type:3, val:'baz' }
//=> ]

const routes = ['/', '/foo', 'bar', '/baz', '/baz/:title','/bat/*'].map(parse);

match('/', routes);
//=> [{ old:'/', type:0, val:'/' }]

match('/foo', routes);
//=> [{ old:'/foo', type:0, val:'foo' }]

match('/bar', routes);
//=> [{ old:'bar', type:0, val:'bar' }]

match('/baz', routes);
//=> [{ old:'/baz', type:0, val:'baz' }]

let a = match('/baz/hello', routes);
//=> [{...}, {...}]
let b = exec('/baz/hello', a);
//=> { title:'hello' }

match('/bat/quz/qut', routes);
//=> [
//=>   { old:'/bat/*', type:0, val:'bat' },
//=>   { old:'/bat/*', type:2, val:'*' }
//=> ]

API

matchit.parse(route)

Returns: Array

The route is split and parsed into a "definition" array of objects. Each object ("segment") contains a val, type, and old key:

  • old โ€” The route's original value
  • type โ€” An numerical representation of the segment type.
    • 0 - static
    • 1 - parameter
    • 2 - any/wildcard
    • 3 - optional param
  • val โ€” The current segment's value. This is either a static value of the name of a parameter

route

Type: String

A single URL pattern.

Note: Input will be stripped of all leading & trailing / characters, so there's no need to normalize your own URLs before passing it to parse!

matchit.match(url, routes)

Returns: Array

Returns the route's encoded definition. See matchit.parse.

url

Type: String

The true URL you want to be matched.

routes

Type: Array

All "parsed" route definitions, via matchit.parse.

Important: Multiple routes will require an Array of matchit.parse outputs.

matchit.exec(url, match)

Returns: Object

Returns an object an object of key:val pairs, as defined by your route pattern.

url

Type: String

The URL (pathname) to evaluate.

Important: This should be pathnames only as any querystrings will be included the response.

match

Type: Array

The route definition to use, via matchit.match.

Benchmarks

Running Node v10.13.0

# Parsing
  matchit               x 1,489,482 ops/sec ยฑ2.89% (97 runs sampled)
  regexparam            x   406,824 ops/sec ยฑ1.38% (96 runs sampled)
  path-to-regexp        x    83,439 ops/sec ยฑ0.89% (96 runs sampled)
  path-to-regexp.parse  x   421,266 ops/sec ยฑ0.13% (97 runs sampled)

# Match (index)
  matchit                x 132,338,546 ops/sec ยฑ0.14% (96 runs sampled)
  regexparam             x  49,889,162 ops/sec ยฑ0.21% (95 runs sampled)
  path-to-regexp.exec    x   7,176,721 ops/sec ยฑ1.23% (94 runs sampled)
  path-to-regexp.tokens  x     102,021 ops/sec ยฑ0.21% (96 runs sampled)

# Match (param)
  matchit                x 2,700,618 ops/sec ยฑ0.92% (95 runs sampled)
  regexparam             x 6,924,653 ops/sec ยฑ0.33% (94 runs sampled)
  path-to-regexp.exec    x 4,715,483 ops/sec ยฑ0.28% (96 runs sampled)
  path-to-regexp.tokens  x    98,182 ops/sec ยฑ0.45% (93 runs sampled)

# Match (optional)
  matchit                x 2,816,313 ops/sec ยฑ0.64% (93 runs sampled)
  regexparam             x 8,437,064 ops/sec ยฑ0.41% (93 runs sampled)
  path-to-regexp.exec    x 5,909,510 ops/sec ยฑ0.22% (97 runs sampled)
  path-to-regexp.tokens  x   101,832 ops/sec ยฑ0.43% (98 runs sampled)

# Match (wildcard)
  matchit                x 3,409,100 ops/sec ยฑ0.34% (98 runs sampled)
  regexparam             x 9,740,429 ops/sec ยฑ0.49% (95 runs sampled)
  path-to-regexp.exec    x 8,740,590 ops/sec ยฑ0.43% (89 runs sampled)
  path-to-regexp.tokens  x   102,109 ops/sec ยฑ0.35% (96 runs sampled)

# Exec
  matchit         x 1,558,321 ops/sec ยฑ0.33% (96 runs sampled)
  regexparam      x 6,966,297 ops/sec ยฑ0.21% (97 runs sampled)
  path-to-regexp  x   102,250 ops/sec ยฑ0.45% (95 runs sampled)

Related

  • regexparam - A similar (285B) utility, but relies on RegExp instead of String comparisons.

License

MIT ยฉ Luke Edwards

More Repositories

1

clsx

A tiny (239B) utility for constructing `className` strings conditionally.
JavaScript
8,212
star
2

polka

A micro web server so fast, it'll make you dance! ๐Ÿ‘ฏ
JavaScript
5,266
star
3

pwa

(WIP) Universal PWA Builder
JavaScript
3,127
star
4

uvu

uvu is an extremely fast and lightweight test runner for Node.js and the browser
JavaScript
2,970
star
5

taskr

A fast, concurrency-focused task automation tool.
JavaScript
2,528
star
6

sockette

The cutest little WebSocket wrapper! ๐Ÿงฆ
JavaScript
2,398
star
7

worktop

The next generation web framework for Cloudflare Workers
TypeScript
1,652
star
8

kleur

The fastest Node.js library for formatting terminal text with ANSI colors~!
JavaScript
1,616
star
9

klona

A tiny (240B to 501B) and fast utility to "deep clone" Objects, Arrays, Dates, RegExps, and more!
JavaScript
1,602
star
10

dequal

A tiny (304B to 489B) utility to check for deep equality
JavaScript
1,365
star
11

tsm

TypeScript Module Loader
TypeScript
1,179
star
12

tinydate

A tiny (349B) reusable date formatter. Extremely fast!
JavaScript
1,060
star
13

sirv

An optimized middleware & CLI application for serving static files~!
JavaScript
1,059
star
14

sade

Smooth (CLI) Operator ๐ŸŽถ
JavaScript
1,009
star
15

rosetta

A general purpose internationalization library in 292 bytes
JavaScript
788
star
16

navaid

A navigation aid (aka, router) for the browser in 850 bytes~!
JavaScript
775
star
17

dset

A tiny (194B) utility for safely writing deep Object values~!
JavaScript
754
star
18

tschema

A tiny (500b) utility to build JSON schema types.
TypeScript
697
star
19

uid

A tiny (130B to 205B) and fast utility to generate random IDs of fixed length
JavaScript
652
star
20

httpie

A Node.js HTTP client as easy as pie! ๐Ÿฅง
JavaScript
579
star
21

ganalytics

A tiny (312B) client-side module for tracking with Google Analytics
JavaScript
575
star
22

regexparam

A tiny (394B) utility that converts route patterns into RegExp. Limited alternative to `path-to-regexp` ๐Ÿ™‡โ€โ™‚๏ธ
JavaScript
565
star
23

trouter

๐ŸŸ A fast, small-but-mighty, familiar fish...errr, router*
JavaScript
563
star
24

dimport

Run ES Module syntax (`import`, `import()`, and `export`) in any browser โ€“ even IE!
JavaScript
548
star
25

mri

Quickly scan for CLI flags and arguments
JavaScript
533
star
26

tempura

A light, crispy, and delicious template engine ๐Ÿค
JavaScript
527
star
27

calendarize

A tiny (202B) utility to generate calendar views.
JavaScript
478
star
28

formee

A tiny (532B) library for handling <form> elements.
JavaScript
441
star
29

qss

A tiny (294b) browser utility for encoding & decoding a querystring.
JavaScript
408
star
30

uuid

A tiny (~230B)and fast UUID (V4) generator for Node and the browser
JavaScript
396
star
31

preact-starter

Webpack3 boilerplate for building SPA / PWA / offline front-end apps with Preact
JavaScript
387
star
32

fetch-event-stream

A tiny (736b) utility for Server Sent Event (SSE) streaming via `fetch` and Web Streams API
TypeScript
374
star
33

vegemite

A Pub/Sub state manager you'll love... or hate
JavaScript
373
star
34

resolve.exports

A tiny (952b), correct, general-purpose, and configurable `"exports"` and `"imports"` resolver without file-system reliance
TypeScript
366
star
35

polkadot

The tiny HTTP server that gets out of your way! ใƒป
JavaScript
325
star
36

flru

A tiny (215B) and fast Least Recently Used (LRU) cache
JavaScript
313
star
37

mrmime

A tiny (2.8kB) and fast utility for getting a MIME type from an extension or filename
TypeScript
312
star
38

watchlist

Recursively watch a list of directories & run a command on any file system changes
JavaScript
262
star
39

ley

(WIP) Driver-agnostic database migrations
JavaScript
261
star
40

arr

A collection of tiny, highly performant Array.prototype alternatives
JavaScript
255
star
41

flattie

A tiny (203B) and fast utility to flatten an object with customizable glue
JavaScript
254
star
42

webpack-messages

Beautifully format Webpack messages throughout your bundle lifecycle(s)!
JavaScript
246
star
43

obj-str

A tiny (96B) library for serializing Object values to Strings.
JavaScript
225
star
44

templite

Lightweight templating in 150 bytes
JavaScript
224
star
45

empathic

A set of small Node.js utilities to understand your pathing needs.
TypeScript
221
star
46

ms

A tiny (414B) and fast utility to convert milliseconds to and from strings.
JavaScript
215
star
47

nestie

A tiny (215B) and fast utility to expand a flattened object
JavaScript
201
star
48

throttles

A tiny (139B to 204B) utility to regulate the execution rate of your functions
JavaScript
199
star
49

hexoid

A tiny (190B) and extremely fast utility to generate random IDs of fixed length
JavaScript
193
star
50

astray

Walk an AST without being led astray
JavaScript
184
star
51

fromnow

A tiny (339B) utility for human-readable time differences between now and past or future dates.
JavaScript
178
star
52

tmp-cache

A least-recently-used cache in 35 lines of code~!
JavaScript
177
star
53

bundt

A simple bundler for your delicious modules
JavaScript
169
star
54

wrr

A tiny (148B) weighted round robin utility
JavaScript
164
star
55

freshie

(WIP) A fresh take on building universal applications with support for pluggable frontends and backends.
TypeScript
155
star
56

svelte-ssr-worker

A quick demo for rendering Svelte server-side (SSR), but within a Cloudflare Worker!
JavaScript
154
star
57

totalist

A tiny (195B to 224B) utility to recursively list all (total) files in a directory
JavaScript
152
star
58

escalade

A tiny (183B to 210B) and fast utility to ascend parent directories
JavaScript
148
star
59

typescript-module

Template repository for authoring npm modules via TypeScript
TypeScript
143
star
60

sublet

Reactive leases for data subscriptions
JavaScript
140
star
61

webpack-route-manifest

Generate an asset manifest file, keyed by route patterns!
JavaScript
127
star
62

semiver

A tiny (153B) utility to compare semver strings.
JavaScript
123
star
63

url-shim

A 1.5kB browser polyfill for the Node.js `URL` and `URLSearchParams` classes.
JavaScript
123
star
64

svelte-demo

Multi-page demo built Svelte 3.x and Rollup with code-splitting
Svelte
114
star
65

saturated

A tiny (203B) utility to enqueue items for batch processing and/or satisfying rate limits.
JavaScript
112
star
66

webpack-format-messages

Beautiful formatting for Webpack messages; ported from Create React App!
JavaScript
111
star
67

gittar

๐ŸŽธ Download and/or Extract git repositories (GitHub, GitLab, BitBucket). Cross-platform and Offline-first!
JavaScript
111
star
68

cfw

(WIP) A build and deploy utility for Cloudflare Workers.
TypeScript
109
star
69

webpack-critical

Extracts & inlines Critical CSS with Wepack
JavaScript
109
star
70

pages-fullstack

Demo SvelteKit application running on Cloudflare Pages
Svelte
101
star
71

sort-isostring

A tiny (110B) and fast utility to sort ISO 8601 Date strings
JavaScript
98
star
72

colors-app

๐ŸŽจ A PWA for copying values from popular color palettes. Supports HEX, RGB, and HSL formats.
JavaScript
95
star
73

salteen

A snappy and lightweight (259B) utility to encrypt and decrypt values with salt.
JavaScript
95
star
74

is-offline

A tiny (174B) library to detect `offline` status & respond to changes in the browser.
JavaScript
91
star
75

seolint

(WIP) A robust and configurable SEO linter
TypeScript
87
star
76

rafps

A tiny (178B) helper for playing, pausing, and setting `requestAnimationFrame` frame rates
JavaScript
82
star
77

preact-cli-ssr

A quick demo for adding SSR to a Preact CLI app
JavaScript
79
star
78

webpack-modules

Handle `.mjs` files correctly within webpack
JavaScript
71
star
79

csprng

A tiny (~90B) isomorphic wrapper for `crypto.randomBytes` in Node.js and browsers.
JavaScript
68
star
80

premove

A tiny (201B to 247B) utility to remove items recursively
JavaScript
66
star
81

classico

A tiny (255B) shim when Element.classList cannot be used~!
JavaScript
62
star
82

mk-dirs

A tiny (381B to 419B) utility to make a directory and its parents, recursively
JavaScript
54
star
83

primeval

A tiny (128B) utility to check if a value is a prime number
JavaScript
52
star
84

loadr

Quickly attach multiple ESM Loaders and/or Require Hooks together but without the repetitive `--experimental-loader` and/or `--require` Node flags
JavaScript
49
star
85

preact-progress

Simple and lightweight (~590 bytes gzip) progress bar component for Preact
JavaScript
49
star
86

route-manifest

A tiny (412B) runtime to retrieve the correct entry from a Route Manifest file.
JavaScript
46
star
87

svelte-preprocess-esbuild

A Svelte Preprocessor to compile TypeScript via esbuild!
TypeScript
45
star
88

rollup-route-manifest

A Rollup plugin to generate an asset manifest, keyed by route patterns ("route manifest")
JavaScript
41
star
89

preact-scroll-header

A (800b gzip) header that will show/hide while scrolling for Preact
JavaScript
41
star
90

inferno-starter

Webpack2 boilerplate for building SPA / PWA / offline front-end apps with Inferno.js
JavaScript
41
star
91

onloaded

A tiny (350B) library to detect when images have loaded.
JavaScript
38
star
92

route-sort

A tiny (200B) utility to sort route patterns by specificity
JavaScript
36
star
93

webpack-plugin-replace

Replace content while bundling.
JavaScript
36
star
94

scorta

A tiny (330B to 357B) and fast utility to find a package's hidden supply / cache directory.
JavaScript
34
star
95

local-hostname

A tiny (171B) utility to check if a hostname is local
JavaScript
32
star
96

taskr-outdated

A generator & coroutine-based task runner. Fasten your seatbelt. ๐Ÿš€
JavaScript
32
star
97

rewrite-imports

Rewrite `import` statements as `require()`s; via RegExp
JavaScript
31
star
98

preact-offline

A (300b gzip) component to render alerts/messages when offline.
JavaScript
29
star
99

fly-kit-preact

A starter kit for building offline / SPA / PWA apps with Preact
JavaScript
28
star
100

fannypack

The tool belt for front-end developers
JavaScript
28
star