@thi.ng/router 3.1.8 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log
2
2
 
3
- - **Last updated**: 2022-06-09T16:14:01Z
3
+ - **Last updated**: 2022-06-17T15:31:40Z
4
4
  - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
5
 
6
6
  All notable changes to this project will be documented in this file.
@@ -9,6 +9,19 @@ See [Conventional Commits](https://conventionalcommits.org/) for commit guidelin
9
9
  **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
10
10
  and/or version bumps of transitive dependencies.
11
11
 
12
+ ## [3.2.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/router@3.2.0) (2022-06-17)
13
+
14
+ #### 🚀 Features
15
+
16
+ - update format(), hash/prefix handling ([724b3ad](https://github.com/thi-ng/umbrella/commit/724b3ad))
17
+ - update HTMLRouter default prefix to "#/" if `useFragment` is true
18
+ - remove obsolete `HTMLRouter.format()` (now the same as BasicRouter)
19
+ - update BasicRouter.format() to throw error for missing route param value
20
+ - add trailing slash option, optimize routeForID() ([c003dc2](https://github.com/thi-ng/umbrella/commit/c003dc2))
21
+ - update BasicRouter default config init
22
+ - pre-build `routeIndex` in ctor
23
+ - optimize `routeForID()` to use new `routeIndex`
24
+
12
25
  ### [3.1.5](https://github.com/thi-ng/umbrella/tree/@thi.ng/router@3.1.5) (2022-04-07)
13
26
 
14
27
  #### ♻️ Refactoring
package/README.md CHANGED
@@ -70,7 +70,7 @@ node --experimental-repl-await
70
70
  > const router = await import("@thi.ng/router");
71
71
  ```
72
72
 
73
- Package sizes (gzipped, pre-treeshake): ESM: 1.56 KB
73
+ Package sizes (gzipped, pre-treeshake): ESM: 1.54 KB
74
74
 
75
75
  ## Dependencies
76
76
 
@@ -114,10 +114,10 @@ const config = {
114
114
  // Optional route path component separator. Default: `/`
115
115
  separator: "/",
116
116
 
117
- // Route prefix. Default: `/`. All routes to be parsed by `route()`
118
- // are assumed to have this prefix. All routes returned by
119
- // `format()` will include this prefix.
120
- prefix: "/",
117
+ // Route prefix. Default: `/` (or `#/` if `useFragment` is enabled).
118
+ // All routes to be parsed by `route()` are assumed to have this prefix.
119
+ // All routes returned by `format()` will include this prefix.
120
+ prefix: "#/",
121
121
 
122
122
  // actual route defs
123
123
  // these are checked in given order
@@ -185,9 +185,6 @@ router.addListener(EVENT_ROUTE_CHANGED, console.log);
185
185
  router.start();
186
186
  ```
187
187
 
188
- See [further comments in source
189
- code](https://github.com/thi-ng/umbrella/blob/develop/packages/router/src/api.ts)
190
-
191
188
  ## Authors
192
189
 
193
190
  Karsten Schmidt
package/api.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  import type { Fn, IID, IObjectOf } from "@thi.ng/api";
2
2
  /**
3
- * A validation function to for authenticated routes. If this function
4
- * determines that the user is not allowed to access this route, it
5
- * should return nothing or a {@link RouteMatch} object for redirecting (e.g.
6
- * to a login, home page or other non-protected route). If nothing is
7
- * returned and no other routes can be matched, the router will
8
- * eventually return the configure default fallback route.
3
+ * A validation function for to-be authenticated routes. If this function
4
+ * determines that the user is not allowed to access this route, it should
5
+ * return nothing or a {@link RouteMatch} object for redirecting (e.g. to a
6
+ * login, home page or other non-protected route). If nothing is returned and no
7
+ * other routes can be matched, the router will eventually return the configured
8
+ * default fallback route (see {@link RouterConfig.defaultRouteID}).
9
9
  */
10
10
  export declare type RouteAuthenticator = (route: Route, curr: string[], params: any) => RouteMatch;
11
11
  /**
12
- * Route validator subspecs are optional and used to coerce and/or
13
- * validate individual route parameters.
12
+ * Route validator subspecs are optional and used to coerce and/or validate
13
+ * individual route parameters.
14
14
  */
15
15
  export interface RouteParamValidator {
16
16
  /**
@@ -18,30 +18,28 @@ export interface RouteParamValidator {
18
18
  */
19
19
  coerce?: Fn<string, any>;
20
20
  /**
21
- * Optional arbitrary value validation. If any validator
22
- * returns non-true result, the currently checked route
23
- * becomes unmatched/invalid and the router continues
24
- * checking other routes.
21
+ * Optional arbitrary value validation (applied *after* coercion, if any).
22
+ * If a validator returns non-true result, the currently checked route
23
+ * becomes unmatched/invalid and the router continues checking other routes.
25
24
  */
26
25
  check: Fn<any, boolean>;
27
26
  }
28
27
  /**
29
- * A Route describes an application path (possibly parameterized),
30
- * incl. parameter coercion, validation and overall route
31
- * authentication. Apart from `id` and `match` all other fields
32
- * are optional.
28
+ * A Route describes an application path (possibly parameterized), incl.
29
+ * parameter coercion, validation and overall route authentication. Apart from
30
+ * `id` and `match` all other fields are optional.
33
31
  */
34
32
  export interface Route extends IID<string> {
35
33
  /**
36
- * Array of path components. If a value is prefixed with `?` this
37
- * path component will be captured under that name. E.g.
38
- * `["projects", "?id"]` will match any of these routes:
34
+ * Array of path components. If a value is prefixed with `?` this path
35
+ * component will be captured under that name. E.g. `["projects", "?id"]`
36
+ * will match any of these routes:
39
37
  *
40
38
  * - `projects/123`
41
39
  * - `projects/abcde`
42
40
  *
43
- * `validate` options can then be used to further restrict the
44
- * possible value range of the `id` value...
41
+ * `validate` options can then be used to further restrict the possible
42
+ * value range of the `id` value...
45
43
  */
46
44
  match: string[];
47
45
  /**
@@ -57,14 +55,14 @@ export interface Route extends IID<string> {
57
55
  * }
58
56
  * ```
59
57
  *
60
- * This will first coerce the `id` route param to a number and then
61
- * only allow the route to be matched if `id < 100`.
58
+ * This will first coerce the `id` route param to a number and then only
59
+ * allow the route to be matched if `id < 100`.
62
60
  */
63
61
  validate?: IObjectOf<RouteParamValidator>;
64
62
  /**
65
63
  * Flag to indicate if this route should be passed to the globally
66
- * configured authentication function. Only matched and validated
67
- * routes are processed.
64
+ * configured authentication function. Only matched and validated routes are
65
+ * processed.
68
66
  */
69
67
  auth?: boolean;
70
68
  /**
@@ -94,26 +92,25 @@ export interface RouteMatch extends IID<string> {
94
92
  */
95
93
  export interface RouterConfig {
96
94
  /**
97
- * An array of route specs, which are being attempted to be matched
98
- * in order of appearance.
95
+ * An array of route specs, which are being attempted to be matched in order
96
+ * of appearance.
99
97
  */
100
98
  routes: Route[];
101
99
  /**
102
- * Fallback route ID (MUST exist in `routes`), used if none of the
103
- * defined routes could be matched against user input, e.g. a home
104
- * or error page.
100
+ * Fallback route ID (MUST exist in `routes`), used if none of the defined
101
+ * routes could be matched against user input, e.g. a home or error page.
105
102
  */
106
103
  defaultRouteID: string;
107
104
  /**
108
- * Optional initial route to trigger when router starts. If given,
109
- * this MUST be a route without params.
105
+ * Optional initial route to trigger when router starts. If given, this MUST
106
+ * be a route without params.
110
107
  */
111
108
  initialRouteID?: string;
112
109
  /**
113
110
  * Optional route authentication function. See {@link RouteAuthenticator}
114
- * for further details. If no authenticator is given, all matched
115
- * routes will always succeed, regardless if a rule's `auth` flag is
116
- * enabled or not.
111
+ * for further details. If no authenticator is given, all matched routes
112
+ * will always succeed, regardless if a rule's `auth` flag is enabled or
113
+ * not.
117
114
  */
118
115
  authenticator?: RouteAuthenticator;
119
116
  /**
@@ -122,16 +119,27 @@ export interface RouterConfig {
122
119
  separator?: string;
123
120
  /**
124
121
  * Route prefix. Default: `/`. All routes to be parsed by
125
- * {@link BasicRouter.route} are assumed to have this prefix. All
126
- * routes returned by {@link (BasicRouter.format:1)} will include
127
- * this prefix.
122
+ * {@link BasicRouter.route} are assumed to have this prefix. All routes
123
+ * returned by {@link (BasicRouter.format:1)} will include this prefix.
128
124
  */
129
125
  prefix?: string;
126
+ /**
127
+ * If true (default), the trailing slash (actually
128
+ * {@link RouterConfig.separator}) of a given route string will be removed
129
+ * before matching.
130
+ */
131
+ removeTrailingSlash?: boolean;
130
132
  }
131
133
  export interface HTMLRouterConfig extends RouterConfig {
132
134
  /**
133
- * Optional flag to indicate if URL hash fragment should be used for
134
- * routes.
135
+ * Same as {@link RouterConfig.prefix}. If
136
+ * {@link HTMLRouterConfig.useFragment} is true, then the default changes to
137
+ * `#/`. If `useFragment` is enabled and a custom prefix is given, it MUST
138
+ * include the leading `#` as well.
139
+ */
140
+ prefix?: string;
141
+ /**
142
+ * Optional flag to indicate if URL hash fragment should be used for routes.
135
143
  */
136
144
  useFragment?: boolean;
137
145
  }
package/basic.d.ts CHANGED
@@ -3,6 +3,7 @@ import { Route, RouteMatch, RouteParamValidator, RouterConfig } from "./api.js";
3
3
  export declare class BasicRouter implements INotify {
4
4
  config: RouterConfig;
5
5
  current: RouteMatch | undefined;
6
+ routeIndex: Record<string, Route>;
6
7
  constructor(config: RouterConfig);
7
8
  /** {@inheritDoc @thi.ng/api#INotify.addListener} */
8
9
  addListener(id: string, fn: Listener, scope?: any): boolean;
@@ -17,19 +18,19 @@ export declare class BasicRouter implements INotify {
17
18
  * to default route. Before returning, triggers event with
18
19
  * return value as well.
19
20
  *
20
- * @param raw - route path to match
21
+ * @param src - route path to match
21
22
  */
22
23
  route(src: string): RouteMatch | undefined;
23
24
  /**
24
- * Returns a formatted version of given {@link RouteMatch}, incl. any params.
25
- * Throw an error if an invalid route `id` is provided.
25
+ * Returns a formatted version of given {@link RouteMatch}, incl. any
26
+ * params, or alternatively a registered route ID (and optional route
27
+ * params). Throws an error if an invalid route `id` is provided.
26
28
  *
27
- * @param match -
29
+ * @param id -
28
30
  * @param params -
29
- * @param hash - if true, prepends `#` to results
30
31
  */
31
- format(id: string, params?: any, hash?: boolean): string;
32
- format(match: Partial<RouteMatch>, hash?: boolean): string;
32
+ format(id: string, params?: any): string;
33
+ format(match: Partial<RouteMatch>): string;
33
34
  routeForID(id: string): Route | undefined;
34
35
  protected matchRoutes(src: string): RouteMatch | undefined;
35
36
  protected matchRoute(curr: string[], route: Route): RouteMatch | undefined;
package/basic.js CHANGED
@@ -8,16 +8,18 @@ import { illegalArity } from "@thi.ng/errors/illegal-arity";
8
8
  import { EVENT_ROUTE_CHANGED, } from "./api.js";
9
9
  let BasicRouter = class BasicRouter {
10
10
  constructor(config) {
11
- config.authenticator =
12
- config.authenticator ||
13
- ((route, _, params) => ({
14
- id: route.id,
15
- title: route.title,
16
- params,
17
- }));
18
- config.prefix = config.prefix === undefined ? "/" : config.prefix;
19
- config.separator = config.separator || "/";
20
- this.config = config;
11
+ this.config = {
12
+ authenticator: (route, _, params) => ({
13
+ id: route.id,
14
+ title: route.title,
15
+ params,
16
+ }),
17
+ prefix: "/",
18
+ separator: "/",
19
+ removeTrailingSlash: true,
20
+ ...config,
21
+ };
22
+ this.routeIndex = this.config.routes.reduce((acc, r) => ((acc[r.id] = r), acc), {});
21
23
  assert(this.routeForID(this.config.defaultRouteID) !== undefined, `missing config for default route: '${this.config.defaultRouteID}'`);
22
24
  if (config.initialRouteID) {
23
25
  const route = this.routeForID(config.initialRouteID);
@@ -47,11 +49,12 @@ let BasicRouter = class BasicRouter {
47
49
  * to default route. Before returning, triggers event with
48
50
  * return value as well.
49
51
  *
50
- * @param raw - route path to match
52
+ * @param src - route path to match
51
53
  */
52
54
  route(src) {
53
- if (src.charAt(0) === "#") {
54
- src = src.substring(1);
55
+ if (this.config.removeTrailingSlash &&
56
+ src.charAt(src.length - 1) === this.config.separator) {
57
+ src = src.substring(0, src.length - 1);
55
58
  }
56
59
  src = src.substring(this.config.prefix.length);
57
60
  let match = this.matchRoutes(src);
@@ -69,20 +72,11 @@ let BasicRouter = class BasicRouter {
69
72
  return match;
70
73
  }
71
74
  format(...args) {
72
- let [id, params, hash] = args;
75
+ let [id, params] = args;
73
76
  let match;
74
77
  switch (args.length) {
75
- case 3:
76
- match = { id, params };
77
- break;
78
78
  case 2:
79
- if (isString(id)) {
80
- match = { id, params };
81
- }
82
- else {
83
- hash = params;
84
- match = id;
85
- }
79
+ match = { id, params };
86
80
  break;
87
81
  case 1:
88
82
  match = isString(id) ? { id } : id;
@@ -93,14 +87,18 @@ let BasicRouter = class BasicRouter {
93
87
  const route = this.routeForID(match.id);
94
88
  if (route) {
95
89
  const params = match.params || {};
96
- return ((hash ? "#" : "") +
97
- this.config.prefix +
90
+ return (this.config.prefix +
98
91
  route.match
99
- .map((x) => x.charAt(0) === "?"
100
- ? (x = params[x.substring(1)]) != null
101
- ? x
102
- : "NULL"
103
- : x)
92
+ .map((x) => {
93
+ if (isRouteParam(x)) {
94
+ const id = x.substring(1);
95
+ const p = params[id];
96
+ if (p != null)
97
+ return p;
98
+ illegalArgs(`missing value for param '${id}'`);
99
+ }
100
+ return x;
101
+ })
104
102
  .join(this.config.separator));
105
103
  }
106
104
  else {
@@ -108,7 +106,7 @@ let BasicRouter = class BasicRouter {
108
106
  }
109
107
  }
110
108
  routeForID(id) {
111
- return this.config.routes.find((route) => route.id === id);
109
+ return this.routeIndex[id];
112
110
  }
113
111
  matchRoutes(src) {
114
112
  const routes = this.config.routes;
@@ -121,12 +119,13 @@ let BasicRouter = class BasicRouter {
121
119
  }
122
120
  }
123
121
  matchRoute(curr, route) {
124
- const match = route.match, n = match.length;
122
+ const match = route.match;
123
+ const n = match.length;
125
124
  if (curr.length === n) {
126
125
  const params = {};
127
126
  for (let i = 0; i < n; i++) {
128
127
  const m = match[i];
129
- if (m.charAt(0) === "?") {
128
+ if (isRouteParam(m)) {
130
129
  params[m.substring(1)] = curr[i];
131
130
  }
132
131
  else if (curr[i] !== m) {
@@ -164,4 +163,5 @@ BasicRouter = __decorate([
164
163
  INotifyMixin
165
164
  ], BasicRouter);
166
165
  export { BasicRouter };
167
- const isParametricRoute = (route) => route.match.some((p) => p.charAt(0) === "?");
166
+ const isParametricRoute = (route) => route.match.some(isRouteParam);
167
+ const isRouteParam = (x) => x[0] === "?";
@@ -0,0 +1,52 @@
1
+ (()=>{var Ce=Object.create;var ue=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!_e.call(t,i)&&i!==r&&ue(t,i,{get:()=>e[i],enumerable:!(n=Pe(e,i))||n.enumerable});return t};var Fe=(t,e,r)=>(r=t!=null?Ce(Re(t)):{},De(e||!t||!t.__esModule?ue(r,"default",{value:t,enumerable:!0}):r,t));var pe=Me((de,fe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var s=n[i],o=e[s];if(Array.isArray(o)){r[s]=o.slice();continue}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){r[s]=o;continue}throw new TypeError("clone is not deep and does not support nested objects")}return r},t.FieldRef=function(e,r,n){this.docRef=e,this.fieldName=r,this._stringValue=n},t.FieldRef.joiner="/",t.FieldRef.fromString=function(e){var r=e.indexOf(t.FieldRef.joiner);if(r===-1)throw"malformed field ref string";var n=e.slice(0,r),i=e.slice(r+1);return new t.FieldRef(i,n,e)},t.FieldRef.prototype.toString=function(){return this._stringValue==null&&(this._stringValue=this.fieldName+t.FieldRef.joiner+this.docRef),this._stringValue};t.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var r=0;r<this.length;r++)this.elements[e[r]]=!0}else this.length=0},t.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},t.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},t.Set.prototype.contains=function(e){return!!this.elements[e]},t.Set.prototype.intersect=function(e){var r,n,i,s=[];if(e===t.Set.complete)return this;if(e===t.Set.empty)return e;this.length<e.length?(r=this,n=e):(r=e,n=this),i=Object.keys(r.elements);for(var o=0;o<i.length;o++){var a=i[o];a in n.elements&&s.push(a)}return new t.Set(s)},t.Set.prototype.union=function(e){return e===t.Set.complete?t.Set.complete:e===t.Set.empty?this:new t.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},t.idf=function(e,r){var n=0;for(var i in e)i!="_index"&&(n+=Object.keys(e[i]).length);var s=(r-n+.5)/(n+.5);return Math.log(1+Math.abs(s))},t.Token=function(e,r){this.str=e||"",this.metadata=r||{}},t.Token.prototype.toString=function(){return this.str},t.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},t.Token.prototype.clone=function(e){return e=e||function(r){return r},new t.Token(e(this.str,this.metadata),this.metadata)};t.tokenizer=function(e,r){if(e==null||e==null)return[];if(Array.isArray(e))return e.map(function(f){return new t.Token(t.utils.asString(f).toLowerCase(),t.utils.clone(r))});for(var n=e.toString().toLowerCase(),i=n.length,s=[],o=0,a=0;o<=i;o++){var l=n.charAt(o),u=o-a;if(l.match(t.tokenizer.separator)||o==i){if(u>0){var h=t.utils.clone(r)||{};h.position=[a,u],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index.
2
+ `,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n<r;n++){for(var i=this._stack[n],s=[],o=0;o<e.length;o++){var a=i(e[o],o,e);if(!(a==null||a===""))if(Array.isArray(a))for(var l=0;l<a.length;l++)s.push(a[l]);else s.push(a)}e=s}return e},t.Pipeline.prototype.runString=function(e,r){var n=new t.Token(e,r);return this.run([n]).map(function(i){return i.toString()})},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})};t.Vector=function(e){this._magnitude=0,this.elements=e||[]},t.Vector.prototype.positionForIndex=function(e){if(this.elements.length==0)return 0;for(var r=0,n=this.elements.length/2,i=n-r,s=Math.floor(i/2),o=this.elements[s*2];i>1&&(o<e&&(r=s),o>e&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(o<e)return(s+1)*2},t.Vector.prototype.insert=function(e,r){this.upsert(e,r,function(){throw"duplicate index"})},t.Vector.prototype.upsert=function(e,r,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],r):this.elements.splice(i,0,e,r)},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,r=this.elements.length,n=1;n<r;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},t.Vector.prototype.dot=function(e){for(var r=0,n=this.elements,i=e.elements,s=n.length,o=i.length,a=0,l=0,u=0,h=0;u<s&&h<o;)a=n[u],l=i[h],a<l?u+=2:a>l?h+=2:a==l&&(r+=n[u+1]*i[h+1],u+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r<this.elements.length;r+=2,n++)e[n]=this.elements[r];return e},t.Vector.prototype.toJSON=function(){return this.elements};t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",s=n+"[^aeiouy]*",o=i+"[aeiou]*",a="^("+s+")?"+o+s,l="^("+s+")?"+o+s+"("+o+")?$",u="^("+s+")?"+o+s+o+s,h="^("+s+")?"+i,f=new RegExp(a),p=new RegExp(u),E=new RegExp(l),y=new RegExp(h),b=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,T=/^(.+?)(ed|ing)$/,w=/.$/,I=/(at|bl|iz)$/,M=new RegExp("([^aeiouylsz])\\1$"),B=new RegExp("^"+s+i+"[^aeiouwxy]$"),V=/^(.+?[^aeiou])y$/,q=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,$=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,H=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,W=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,U=/ll$/,G=new RegExp("^"+s+i+"[^aeiouwxy]$"),z=function(c){var g,O,S,d,x,R,F;if(c.length<3)return c;if(S=c.substr(0,1),S=="y"&&(c=S.toUpperCase()+c.substr(1)),d=b,x=m,d.test(c)?c=c.replace(d,"$1$2"):x.test(c)&&(c=c.replace(x,"$1$2")),d=v,x=T,d.test(c)){var L=d.exec(c);d=f,d.test(L[1])&&(d=w,c=c.replace(d,""))}else if(x.test(c)){var L=x.exec(c);g=L[1],x=y,x.test(g)&&(c=g,x=I,R=M,F=B,x.test(c)?c=c+"e":R.test(c)?(d=w,c=c.replace(d,"")):F.test(c)&&(c=c+"e"))}if(d=V,d.test(c)){var L=d.exec(c);g=L[1],c=g+"i"}if(d=q,d.test(c)){var L=d.exec(c);g=L[1],O=L[2],d=f,d.test(g)&&(c=g+e[O])}if(d=$,d.test(c)){var L=d.exec(c);g=L[1],O=L[2],d=f,d.test(g)&&(c=g+r[O])}if(d=H,x=W,d.test(c)){var L=d.exec(c);g=L[1],d=p,d.test(g)&&(c=g)}else if(x.test(c)){var L=x.exec(c);g=L[1]+L[2],x=p,x.test(g)&&(c=g)}if(d=P,d.test(c)){var L=d.exec(c);g=L[1],d=p,x=E,R=G,(d.test(g)||x.test(g)&&!R.test(g))&&(c=g)}return d=U,x=p,d.test(c)&&x.test(c)&&(d=w,c=c.replace(d,"")),S=="y"&&(c=S.toLowerCase()+c.substr(1)),c};return function(D){return D.update(z)}}(),t.Pipeline.registerFunction(t.stemmer,"stemmer");t.generateStopWordFilter=function(e){var r=e.reduce(function(n,i){return n[i]=i,n},{});return function(n){if(n&&r[n.toString()]!==n.toString())return n}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter");t.trimmer=function(e){return e.update(function(r){return r.replace(/^\W+/,"").replace(/\W+$/,"")})},t.Pipeline.registerFunction(t.trimmer,"trimmer");t.TokenSet=function(){this.final=!1,this.edges={},this.id=t.TokenSet._nextId,t.TokenSet._nextId+=1},t.TokenSet._nextId=1,t.TokenSet.fromArray=function(e){for(var r=new t.TokenSet.Builder,n=0,i=e.length;n<i;n++)r.insert(e[n]);return r.finish(),r.root},t.TokenSet.fromClause=function(e){return"editDistance"in e?t.TokenSet.fromFuzzyString(e.term,e.editDistance):t.TokenSet.fromString(e.term)},t.TokenSet.fromFuzzyString=function(e,r){for(var n=new t.TokenSet,i=[{node:n,editsRemaining:r,str:e}];i.length;){var s=i.pop();if(s.str.length>0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if(o=="*")r.edges[o]=r,r.final=a;else{var l=new t.TokenSet;l.final=a,r.edges[o]=l,r=l}}return n},t.TokenSet.prototype.toArray=function(){for(var e=[],r=[{prefix:"",node:this}];r.length;){var n=r.pop(),i=Object.keys(n.node.edges),s=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<s;o++){var a=i[o];r.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},t.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",r=Object.keys(this.edges).sort(),n=r.length,i=0;i<n;i++){var s=r[i],o=this.edges[s];e=e+s+o.id}return e},t.TokenSet.prototype.intersect=function(e){for(var r=new t.TokenSet,n=void 0,i=[{qNode:e,output:r,node:this}];i.length;){n=i.pop();for(var s=Object.keys(n.qNode.edges),o=s.length,a=Object.keys(n.node.edges),l=a.length,u=0;u<o;u++)for(var h=s[u],f=0;f<l;f++){var p=a[f];if(p==h||h=="*"){var E=n.node.edges[p],y=n.qNode.edges[h],b=E.final&&y.final,m=void 0;p in n.output.edges?(m=n.output.edges[p],m.final=m.final||b):(m=new t.TokenSet,m.final=b,n.output.edges[p]=m),i.push({qNode:y,output:m,node:E})}}}return r},t.TokenSet.Builder=function(){this.previousWord="",this.root=new t.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},t.TokenSet.Builder.prototype.insert=function(e){var r,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),this.uncheckedNodes.length==0?r=this.root:r=this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var s=new t.TokenSet,o=e[i];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=e},t.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},t.TokenSet.Builder.prototype.minimize=function(e){for(var r=this.uncheckedNodes.length-1;r>=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l<this.fields.length;l++)i[this.fields[l]]=new t.Vector;e.call(r,r);for(var l=0;l<r.clauses.length;l++){var u=r.clauses[l],h=null,f=t.Set.empty;u.usePipeline?h=this.pipeline.runString(u.term,{fields:u.fields}):h=[u.term];for(var p=0;p<h.length;p++){var E=h[p];u.term=E;var y=t.TokenSet.fromClause(u),b=this.tokenSet.intersect(y).toArray();if(b.length===0&&u.presence===t.Query.presence.REQUIRED){for(var m=0;m<u.fields.length;m++){var v=u.fields[m];o[v]=t.Set.empty}break}for(var T=0;T<b.length;T++)for(var w=b[T],I=this.invertedIndex[w],M=I._index,m=0;m<u.fields.length;m++){var v=u.fields[m],B=I[v],V=Object.keys(B),q=w+"/"+v,$=new t.Set(V);if(u.presence==t.Query.presence.REQUIRED&&(f=f.union($),o[v]===void 0&&(o[v]=t.Set.complete)),u.presence==t.Query.presence.PROHIBITED){a[v]===void 0&&(a[v]=t.Set.empty),a[v]=a[v].union($);continue}if(i[v].upsert(M,u.boost,function(Qe,Ie){return Qe+Ie}),!s[q]){for(var H=0;H<V.length;H++){var W=V[H],P=new t.FieldRef(W,v),U=B[W],G;(G=n[P])===void 0?n[P]=new t.MatchData(w,v,U):G.add(w,v,U)}s[q]=!0}}}if(u.presence===t.Query.presence.REQUIRED)for(var m=0;m<u.fields.length;m++){var v=u.fields[m];o[v]=o[v].intersect(f)}}for(var z=t.Set.complete,D=t.Set.empty,l=0;l<this.fields.length;l++){var v=this.fields[l];o[v]&&(z=z.intersect(o[v])),a[v]&&(D=D.union(a[v]))}var c=Object.keys(n),g=[],O=Object.create(null);if(r.isNegated()){c=Object.keys(this.fieldVectors);for(var l=0;l<c.length;l++){var P=c[l],S=t.FieldRef.fromString(P);n[P]=new t.MatchData}}for(var l=0;l<c.length;l++){var S=t.FieldRef.fromString(c[l]),d=S.docRef;if(!!z.contains(d)&&!D.contains(d)){var x=this.fieldVectors[S],R=i[S.fieldName].similarity(x),F;if((F=O[d])!==void 0)F.score+=R,F.matchData.combine(n[S]);else{var L={ref:d,score:R,matchData:n[S]};O[d]=L,g.push(L)}}}return g.sort(function(Se,ke){return ke.score-Se.score})},t.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(n){return[n,this.invertedIndex[n]]},this),r=Object.keys(this.fieldVectors).map(function(n){return[n,this.fieldVectors[n].toJSON()]},this);return{version:t.version,fields:this.fields,fieldVectors:r,invertedIndex:e,pipeline:this.pipeline.toJSON()}},t.Index.load=function(e){var r={},n={},i=e.fieldVectors,s=Object.create(null),o=e.invertedIndex,a=new t.TokenSet.Builder,l=t.Pipeline.load(e.pipeline);e.version!=t.version&&t.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+t.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var h=i[u],f=h[0],p=h[1];n[f]=new t.Vector(p)}for(var u=0;u<o.length;u++){var h=o[u],E=h[0],y=h[1];a.insert(E),s[E]=y}return a.finish(),r.fields=e.fields,r.fieldVectors=n,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=l,new t.Index(r)};t.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=t.tokenizer,this.pipeline=new t.Pipeline,this.searchPipeline=new t.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},t.Builder.prototype.ref=function(e){this._ref=e},t.Builder.prototype.field=function(e,r){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=r||{}},t.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s<i.length;s++){var o=i[s],a=this._fields[o].extractor,l=a?a(e):e[o],u=this.tokenizer(l,{fields:[o]}),h=this.pipeline.run(u),f=new t.FieldRef(n,o),p=Object.create(null);this.fieldTermFrequencies[f]=p,this.fieldLengths[f]=0,this.fieldLengths[f]+=h.length;for(var E=0;E<h.length;E++){var y=h[E];if(p[y]==null&&(p[y]=0),p[y]+=1,this.invertedIndex[y]==null){var b=Object.create(null);b._index=this.termIndex,this.termIndex+=1;for(var m=0;m<i.length;m++)b[i[m]]=Object.create(null);this.invertedIndex[y]=b}this.invertedIndex[y][o][n]==null&&(this.invertedIndex[y][o][n]=Object.create(null));for(var v=0;v<this.metadataWhitelist.length;v++){var T=this.metadataWhitelist[v],w=y.metadata[T];this.invertedIndex[y][o][n][T]==null&&(this.invertedIndex[y][o][n][T]=[]),this.invertedIndex[y][o][n][T].push(w)}}}},t.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),r=e.length,n={},i={},s=0;s<r;s++){var o=t.FieldRef.fromString(e[s]),a=o.fieldName;i[a]||(i[a]=0),i[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}for(var l=Object.keys(this._fields),s=0;s<l.length;s++){var u=l[s];n[u]=n[u]/i[u]}this.averageFieldLength=n},t.Builder.prototype.createFieldVectors=function(){for(var e={},r=Object.keys(this.fieldTermFrequencies),n=r.length,i=Object.create(null),s=0;s<n;s++){for(var o=t.FieldRef.fromString(r[s]),a=o.fieldName,l=this.fieldLengths[o],u=new t.Vector,h=this.fieldTermFrequencies[o],f=Object.keys(h),p=f.length,E=this._fields[a].boost||1,y=this._documents[o.docRef].boost||1,b=0;b<p;b++){var m=f[b],v=h[m],T=this.invertedIndex[m]._index,w,I,M;i[m]===void 0?(w=t.idf(this.invertedIndex[m],this.documentCount),i[m]=w):w=i[m],I=w*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[a]))+v),I*=E,I*=y,M=Math.round(I*1e3)/1e3,u.insert(T,M)}e[o]=u}this.fieldVectors=e},t.Builder.prototype.createTokenSet=function(){this.tokenSet=t.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},t.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new t.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},t.Builder.prototype.use=function(e){var r=Array.prototype.slice.call(arguments,1);r.unshift(this),e.apply(this,r)},t.MatchData=function(e,r,n){for(var i=Object.create(null),s=Object.keys(n||{}),o=0;o<s.length;o++){var a=s[o];i[a]=n[a].slice()}this.metadata=Object.create(null),e!==void 0&&(this.metadata[e]=Object.create(null),this.metadata[e][r]=i)},t.MatchData.prototype.combine=function(e){for(var r=Object.keys(e.metadata),n=0;n<r.length;n++){var i=r[n],s=Object.keys(e.metadata[i]);this.metadata[i]==null&&(this.metadata[i]=Object.create(null));for(var o=0;o<s.length;o++){var a=s[o],l=Object.keys(e.metadata[i][a]);this.metadata[i][a]==null&&(this.metadata[i][a]=Object.create(null));for(var u=0;u<l.length;u++){var h=l[u];this.metadata[i][a][h]==null?this.metadata[i][a][h]=e.metadata[i][a][h]:this.metadata[i][a][h]=this.metadata[i][a][h].concat(e.metadata[i][a][h])}}}},t.MatchData.prototype.add=function(e,r,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][r]=n;return}if(!(r in this.metadata[e])){this.metadata[e][r]=n;return}for(var i=Object.keys(n),s=0;s<i.length;s++){var o=i[s];o in this.metadata[e][r]?this.metadata[e][r][o]=this.metadata[e][r][o].concat(n[o]):this.metadata[e][r][o]=n[o]}},t.Query=function(e){this.clauses=[],this.allFields=e},t.Query.wildcard=new String("*"),t.Query.wildcard.NONE=0,t.Query.wildcard.LEADING=1,t.Query.wildcard.TRAILING=2,t.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},t.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=t.Query.wildcard.NONE),e.wildcard&t.Query.wildcard.LEADING&&e.term.charAt(0)!=t.Query.wildcard&&(e.term="*"+e.term),e.wildcard&t.Query.wildcard.TRAILING&&e.term.slice(-1)!=t.Query.wildcard&&(e.term=""+e.term+"*"),"presence"in e||(e.presence=t.Query.presence.OPTIONAL),this.clauses.push(e),this},t.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=t.Query.presence.PROHIBITED)return!1;return!0},t.Query.prototype.term=function(e,r){if(Array.isArray(e))return e.forEach(function(i){this.term(i,t.utils.clone(r))},this),this;var n=r||{};return n.term=e.toString(),this.clause(n),this},t.QueryParseError=function(e,r,n){this.name="QueryParseError",this.message=e,this.start=r,this.end=n},t.QueryParseError.prototype=new Error,t.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},t.QueryLexer.prototype.run=function(){for(var e=t.QueryLexer.lexText;e;)e=e(this)},t.QueryLexer.prototype.sliceString=function(){for(var e=[],r=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(r,n)),r=n+1;return e.push(this.str.slice(r,this.pos)),this.escapeCharPositions.length=0,e.join("")},t.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},t.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},t.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos<this.length},t.QueryLexer.EOS="EOS",t.QueryLexer.FIELD="FIELD",t.QueryLexer.TERM="TERM",t.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",t.QueryLexer.BOOST="BOOST",t.QueryLexer.PRESENCE="PRESENCE",t.QueryLexer.lexField=function(e){return e.backup(),e.emit(t.QueryLexer.FIELD),e.ignore(),t.QueryLexer.lexText},t.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof de=="object"?fe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ce=[];function N(t,e){ce.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){ce.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n}),n.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,r){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){if(!(e in this.listeners))return;let n=this.listeners[e];for(let i=0,s=n.length;i<s;i++)if(n[i]===r){n.splice(i,1);return}}dispatchEvent(e){if(!(e.type in this.listeners))return!0;let r=this.listeners[e.type].slice();for(let n=0,i=r.length;n<i;n++)r[n].call(this,e);return!e.defaultPrevented}};var ne=(t,e=100)=>{let r=Date.now();return(...n)=>{r+e-Date.now()<0&&(t(...n),r=Date.now())}};var ie=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.secondaryNav=document.querySelector(".tsd-navigation.secondary"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.onResize(),this.onScroll()}triggerResize(){let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onScroll(){this.scrollTop=window.scrollY||0;let r=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(r),this.hideShowToolbar()}hideShowToolbar(){var n;let r=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0,r!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),(n=this.secondaryNav)==null||n.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop}},Q=ie;Q.instance=new ie;var X=class extends k{constructor(r){super(r);this.anchors=[];this.index=-1;Q.instance.addEventListener("resize",()=>this.onResize()),Q.instance.addEventListener("scroll",n=>this.onScroll(n)),this.createAnchors()}createAnchors(){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substr(0,r.indexOf("#"))),this.el.querySelectorAll("a").forEach(n=>{let i=n.href;if(i.indexOf("#")==-1||i.substr(0,r.length)!=r)return;let s=i.substr(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=n.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let r;for(let i=0,s=this.anchors.length;i<s;i++){r=this.anchors[i];let o=r.anchor.getBoundingClientRect();r.position=o.top+document.body.scrollTop}this.anchors.sort((i,s)=>i.position-s.position);let n=new CustomEvent("scroll",{detail:{scrollTop:Q.instance.scrollTop}});this.onScroll(n)}onScroll(r){let n=r.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>n;)o-=1;for(;o<s&&i[o+1].position<n;)o+=1;this.index!=o&&(this.index>-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var he=(t,e=100)=>{let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>t(n),e)}};var ge=Fe(pe());function ye(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Ae(t,n,r,s)}function Ae(t,e,r,n){r.addEventListener("input",he(()=>{He(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?ze(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?me(e,-1):s.key==="ArrowDown"?me(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function Ve(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ge.Index.load(window.searchData.index))}function He(t,e,r,n){var o,a;if(Ve(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let l=0;l<s.length;l++){let u=s[l],h=n.data.rows[Number(u.ref)],f=1;h.name.toLowerCase().startsWith(i.toLowerCase())&&(f*=1+1/(Math.abs(h.name.length-i.length)*10)),f*=(o=h.boost)!=null?o:1,u.score*=f}s.sort((l,u)=>u.score-l.score);for(let l=0,u=Math.min(10,s.length);l<u;l++){let h=n.data.rows[Number(s[l].ref)],f=ve(h.name,i);h.parent&&(f=`<span class="parent">${ve(h.parent,i)}.</span>${f}`);let p=document.createElement("li");p.classList.value=(a=h.classes)!=null?a:"";let E=document.createElement("a");E.href=n.base+h.url,E.classList.add("tsd-kind-icon"),E.innerHTML=f,p.append(E),e.appendChild(p)}}function me(t,e){var n,i;let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let s=r;if(e===1)do s=(n=s.nextElementSibling)!=null?n:void 0;while(s instanceof HTMLElement&&s.offsetParent==null);else do s=(i=s.previousElementSibling)!=null?i:void 0;while(s instanceof HTMLElement&&s.offsetParent==null);s&&(r.classList.remove("current"),s.classList.add("current"))}}function ze(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function ve(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(se(t.substring(s,o)),`<b>${se(t.substring(o,o+n.length))}</b>`),s=o+n.length,o=r.indexOf(n,s);return i.push(se(t.substring(s))),i.join("")}var Ne={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#039;",'"':"&quot;"};function se(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var oe=class{constructor(e,r){this.signature=e,this.description=r}addClass(e){return this.signature.classList.add(e),this.description.classList.add(e),this}removeClass(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this}},Z=class extends k{constructor(r){super(r);this.groups=[];this.index=-1;this.createGroups(),this.container&&(this.el.classList.add("active"),Array.from(this.el.children).forEach(n=>{n.addEventListener("touchstart",i=>this.onClick(i)),n.addEventListener("click",i=>this.onClick(i))}),this.container.classList.add("active"),this.setIndex(0))}setIndex(r){if(r<0&&(r=0),r>this.groups.length-1&&(r=this.groups.length-1),this.index==r)return;let n=this.groups[r];if(this.index>-1){let i=this.groups[this.index];i.removeClass("current").addClass("fade-out"),n.addClass("current"),n.addClass("fade-in"),Q.instance.triggerResize(),setTimeout(()=>{i.removeClass("fade-out"),n.removeClass("fade-in")},300)}else n.addClass("current"),Q.instance.triggerResize();this.index=r}createGroups(){let r=this.el.children;if(r.length<2)return;this.container=this.el.nextElementSibling;let n=this.container.children;this.groups=[];for(let i=0;i<r.length;i++)this.groups.push(new oe(r[i],n[i]))}onClick(r){this.groups.forEach((n,i)=>{n.signature===r.currentTarget&&this.setIndex(i)})}};var C="mousedown",Le="mousemove",_="mouseup",K={x:0,y:0},xe=!1,ae=!1,je=!1,A=!1,Ee=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Ee?"is-mobile":"not-mobile");Ee&&"ontouchstart"in document.documentElement&&(je=!0,C="touchstart",Le="touchmove",_="touchend");document.addEventListener(C,t=>{ae=!0,A=!1;let e=C=="touchstart"?t.targetTouches[0]:t;K.y=e.pageY||0,K.x=e.pageX||0});document.addEventListener(Le,t=>{if(!!ae&&!A){let e=C=="touchstart"?t.targetTouches[0]:t,r=K.x-(e.pageX||0),n=K.y-(e.pageY||0);A=Math.sqrt(r*r+n*n)>10}});document.addEventListener(_,()=>{ae=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var ee=class extends k{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(_,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(C,n=>this.onDocumentPointerDown(n)),document.addEventListener(_,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){A||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!A&&this.active&&r.target.closest(".col-menu")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substr(0,i.indexOf("#"))),n.href.substr(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te=class{constructor(e,r){this.key=e,this.value=r,this.defaultValue=r,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}initialize(){}setValue(e){if(this.value==e)return;let r=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(r,e)}},re=class extends te{initialize(){let r=document.querySelector("#tsd-filter-"+this.key);!r||(this.checkbox=r,this.checkbox.addEventListener("change",()=>{this.setValue(this.checkbox.checked)}))}handleValueChange(r,n){!this.checkbox||(this.checkbox.checked=this.value,document.documentElement.classList.toggle("toggle-"+this.key,this.value!=this.defaultValue))}fromLocalStorage(r){return r=="true"}toLocalStorage(r){return r?"true":"false"}},le=class extends te{initialize(){document.documentElement.classList.add("toggle-"+this.key+this.value);let r=document.querySelector("#tsd-filter-"+this.key);if(!r)return;this.select=r;let n=()=>{this.select.classList.add("active")},i=()=>{this.select.classList.remove("active")};this.select.addEventListener(C,n),this.select.addEventListener("mouseover",n),this.select.addEventListener("mouseleave",i),this.select.querySelectorAll("li").forEach(s=>{s.addEventListener(_,o=>{r.classList.remove("active"),this.setValue(o.target.dataset.value||"")})}),document.addEventListener(C,s=>{this.select.contains(s.target)||this.select.classList.remove("active")})}handleValueChange(r,n){this.select.querySelectorAll("li.selected").forEach(o=>{o.classList.remove("selected")});let i=this.select.querySelector('li[data-value="'+n+'"]'),s=this.select.querySelector(".tsd-select-label");i&&s&&(i.classList.add("selected"),s.textContent=i.textContent),document.documentElement.classList.remove("toggle-"+r),document.documentElement.classList.add("toggle-"+n)}fromLocalStorage(r){return r}toLocalStorage(r){return r}},j=class extends k{constructor(r){super(r);this.optionVisibility=new le("visibility","private"),this.optionInherited=new re("inherited",!0),this.optionExternals=new re("externals",!0)}static isSupported(){try{return typeof window.localStorage!="undefined"}catch{return!1}}};function we(t){let e=localStorage.getItem("tsd-theme")||"os";t.value=e,be(e),t.addEventListener("change",()=>{localStorage.setItem("tsd-theme",t.value),be(t.value)})}function be(t){switch(t){case"os":document.body.classList.remove("light","dark");break;case"light":document.body.classList.remove("dark"),document.body.classList.add("light");break;case"dark":document.body.classList.remove("light"),document.body.classList.add("dark");break}}ye();N(X,".menu-highlight");N(Z,".tsd-signatures");N(ee,"a[data-toggle]");j.isSupported()?N(j,"#tsd-filter"):document.documentElement.classList.add("no-filter");var Te=document.getElementById("theme");Te&&we(Te);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})();
3
+ /*!
4
+ * lunr.Builder
5
+ * Copyright (C) 2020 Oliver Nightingale
6
+ */
7
+ /*!
8
+ * lunr.Index
9
+ * Copyright (C) 2020 Oliver Nightingale
10
+ */
11
+ /*!
12
+ * lunr.Pipeline
13
+ * Copyright (C) 2020 Oliver Nightingale
14
+ */
15
+ /*!
16
+ * lunr.Set
17
+ * Copyright (C) 2020 Oliver Nightingale
18
+ */
19
+ /*!
20
+ * lunr.TokenSet
21
+ * Copyright (C) 2020 Oliver Nightingale
22
+ */
23
+ /*!
24
+ * lunr.Vector
25
+ * Copyright (C) 2020 Oliver Nightingale
26
+ */
27
+ /*!
28
+ * lunr.stemmer
29
+ * Copyright (C) 2020 Oliver Nightingale
30
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
31
+ */
32
+ /*!
33
+ * lunr.stopWordFilter
34
+ * Copyright (C) 2020 Oliver Nightingale
35
+ */
36
+ /*!
37
+ * lunr.tokenizer
38
+ * Copyright (C) 2020 Oliver Nightingale
39
+ */
40
+ /*!
41
+ * lunr.trimmer
42
+ * Copyright (C) 2020 Oliver Nightingale
43
+ */
44
+ /*!
45
+ * lunr.utils
46
+ * Copyright (C) 2020 Oliver Nightingale
47
+ */
48
+ /**
49
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
50
+ * Copyright (C) 2020 Oliver Nightingale
51
+ * @license MIT
52
+ */
@@ -0,0 +1 @@
1
+ window.searchData = JSON.parse("{\"kinds\":{\"32\":\"Variable\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"id\":0,\"kind\":4194304,\"name\":\"RouteAuthenticator\",\"url\":\"modules.html#RouteAuthenticator\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":1,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#RouteAuthenticator.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-alias\",\"parent\":\"RouteAuthenticator\"},{\"id\":2,\"kind\":256,\"name\":\"RouteParamValidator\",\"url\":\"interfaces/RouteParamValidator.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":3,\"kind\":1024,\"name\":\"coerce\",\"url\":\"interfaces/RouteParamValidator.html#coerce\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouteParamValidator\"},{\"id\":4,\"kind\":1024,\"name\":\"check\",\"url\":\"interfaces/RouteParamValidator.html#check\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouteParamValidator\"},{\"id\":5,\"kind\":256,\"name\":\"Route\",\"url\":\"interfaces/Route.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":6,\"kind\":1024,\"name\":\"match\",\"url\":\"interfaces/Route.html#match\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Route\"},{\"id\":7,\"kind\":1024,\"name\":\"validate\",\"url\":\"interfaces/Route.html#validate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Route\"},{\"id\":8,\"kind\":1024,\"name\":\"auth\",\"url\":\"interfaces/Route.html#auth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Route\"},{\"id\":9,\"kind\":1024,\"name\":\"title\",\"url\":\"interfaces/Route.html#title\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Route\"},{\"id\":10,\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/Route.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"Route\"},{\"id\":11,\"kind\":256,\"name\":\"RouteMatch\",\"url\":\"interfaces/RouteMatch.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":12,\"kind\":1024,\"name\":\"title\",\"url\":\"interfaces/RouteMatch.html#title\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouteMatch\"},{\"id\":13,\"kind\":1024,\"name\":\"params\",\"url\":\"interfaces/RouteMatch.html#params\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouteMatch\"},{\"id\":14,\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RouteMatch.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"RouteMatch\"},{\"id\":15,\"kind\":256,\"name\":\"RouterConfig\",\"url\":\"interfaces/RouterConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":16,\"kind\":1024,\"name\":\"routes\",\"url\":\"interfaces/RouterConfig.html#routes\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":17,\"kind\":1024,\"name\":\"defaultRouteID\",\"url\":\"interfaces/RouterConfig.html#defaultRouteID\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":18,\"kind\":1024,\"name\":\"initialRouteID\",\"url\":\"interfaces/RouterConfig.html#initialRouteID\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":19,\"kind\":1024,\"name\":\"authenticator\",\"url\":\"interfaces/RouterConfig.html#authenticator\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":20,\"kind\":1024,\"name\":\"separator\",\"url\":\"interfaces/RouterConfig.html#separator\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":21,\"kind\":1024,\"name\":\"prefix\",\"url\":\"interfaces/RouterConfig.html#prefix\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":22,\"kind\":1024,\"name\":\"removeTrailingSlash\",\"url\":\"interfaces/RouterConfig.html#removeTrailingSlash\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"RouterConfig\"},{\"id\":23,\"kind\":256,\"name\":\"HTMLRouterConfig\",\"url\":\"interfaces/HTMLRouterConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":24,\"kind\":1024,\"name\":\"prefix\",\"url\":\"interfaces/HTMLRouterConfig.html#prefix\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite\",\"parent\":\"HTMLRouterConfig\"},{\"id\":25,\"kind\":1024,\"name\":\"useFragment\",\"url\":\"interfaces/HTMLRouterConfig.html#useFragment\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HTMLRouterConfig\"},{\"id\":26,\"kind\":1024,\"name\":\"routes\",\"url\":\"interfaces/HTMLRouterConfig.html#routes\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":27,\"kind\":1024,\"name\":\"defaultRouteID\",\"url\":\"interfaces/HTMLRouterConfig.html#defaultRouteID\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":28,\"kind\":1024,\"name\":\"initialRouteID\",\"url\":\"interfaces/HTMLRouterConfig.html#initialRouteID\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":29,\"kind\":1024,\"name\":\"authenticator\",\"url\":\"interfaces/HTMLRouterConfig.html#authenticator\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":30,\"kind\":1024,\"name\":\"separator\",\"url\":\"interfaces/HTMLRouterConfig.html#separator\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":31,\"kind\":1024,\"name\":\"removeTrailingSlash\",\"url\":\"interfaces/HTMLRouterConfig.html#removeTrailingSlash\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HTMLRouterConfig\"},{\"id\":32,\"kind\":32,\"name\":\"EVENT_ROUTE_CHANGED\",\"url\":\"modules.html#EVENT_ROUTE_CHANGED\",\"classes\":\"tsd-kind-variable\"},{\"id\":33,\"kind\":32,\"name\":\"EVENT_ROUTE_FAILED\",\"url\":\"modules.html#EVENT_ROUTE_FAILED\",\"classes\":\"tsd-kind-variable\"},{\"id\":34,\"kind\":128,\"name\":\"BasicRouter\",\"url\":\"classes/BasicRouter.html\",\"classes\":\"tsd-kind-class\"},{\"id\":35,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BasicRouter.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":36,\"kind\":1024,\"name\":\"config\",\"url\":\"classes/BasicRouter.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":37,\"kind\":1024,\"name\":\"current\",\"url\":\"classes/BasicRouter.html#current\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":38,\"kind\":1024,\"name\":\"routeIndex\",\"url\":\"classes/BasicRouter.html#routeIndex\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":39,\"kind\":2048,\"name\":\"addListener\",\"url\":\"classes/BasicRouter.html#addListener\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":40,\"kind\":2048,\"name\":\"removeListener\",\"url\":\"classes/BasicRouter.html#removeListener\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":41,\"kind\":2048,\"name\":\"notify\",\"url\":\"classes/BasicRouter.html#notify\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":42,\"kind\":2048,\"name\":\"start\",\"url\":\"classes/BasicRouter.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":43,\"kind\":2048,\"name\":\"route\",\"url\":\"classes/BasicRouter.html#route\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":44,\"kind\":2048,\"name\":\"format\",\"url\":\"classes/BasicRouter.html#format\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":45,\"kind\":2048,\"name\":\"routeForID\",\"url\":\"classes/BasicRouter.html#routeForID\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BasicRouter\"},{\"id\":46,\"kind\":2048,\"name\":\"matchRoutes\",\"url\":\"classes/BasicRouter.html#matchRoutes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"BasicRouter\"},{\"id\":47,\"kind\":2048,\"name\":\"matchRoute\",\"url\":\"classes/BasicRouter.html#matchRoute\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"BasicRouter\"},{\"id\":48,\"kind\":2048,\"name\":\"validateRouteParams\",\"url\":\"classes/BasicRouter.html#validateRouteParams\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"BasicRouter\"},{\"id\":49,\"kind\":2048,\"name\":\"handleRouteFailure\",\"url\":\"classes/BasicRouter.html#handleRouteFailure\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"BasicRouter\"},{\"id\":50,\"kind\":128,\"name\":\"HTMLRouter\",\"url\":\"classes/HTMLRouter.html\",\"classes\":\"tsd-kind-class\"},{\"id\":51,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/HTMLRouter.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"HTMLRouter\"},{\"id\":52,\"kind\":1024,\"name\":\"currentPath\",\"url\":\"classes/HTMLRouter.html#currentPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":53,\"kind\":1024,\"name\":\"popHandler\",\"url\":\"classes/HTMLRouter.html#popHandler\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":54,\"kind\":1024,\"name\":\"hashHandler\",\"url\":\"classes/HTMLRouter.html#hashHandler\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":55,\"kind\":1024,\"name\":\"useFragment\",\"url\":\"classes/HTMLRouter.html#useFragment\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":56,\"kind\":1024,\"name\":\"ignoreHashChange\",\"url\":\"classes/HTMLRouter.html#ignoreHashChange\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":57,\"kind\":2048,\"name\":\"start\",\"url\":\"classes/HTMLRouter.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"HTMLRouter\"},{\"id\":58,\"kind\":2048,\"name\":\"release\",\"url\":\"classes/HTMLRouter.html#release\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"HTMLRouter\"},{\"id\":59,\"kind\":2048,\"name\":\"route\",\"url\":\"classes/HTMLRouter.html#route\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite\",\"parent\":\"HTMLRouter\"},{\"id\":60,\"kind\":2048,\"name\":\"routeTo\",\"url\":\"classes/HTMLRouter.html#routeTo\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"HTMLRouter\"},{\"id\":61,\"kind\":2048,\"name\":\"handlePopChange\",\"url\":\"classes/HTMLRouter.html#handlePopChange\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":62,\"kind\":2048,\"name\":\"handleHashChange\",\"url\":\"classes/HTMLRouter.html#handleHashChange\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":63,\"kind\":2048,\"name\":\"handleRouteFailure\",\"url\":\"classes/HTMLRouter.html#handleRouteFailure\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-overwrite tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":64,\"kind\":1024,\"name\":\"config\",\"url\":\"classes/HTMLRouter.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":65,\"kind\":1024,\"name\":\"current\",\"url\":\"classes/HTMLRouter.html#current\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":66,\"kind\":1024,\"name\":\"routeIndex\",\"url\":\"classes/HTMLRouter.html#routeIndex\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":67,\"kind\":2048,\"name\":\"addListener\",\"url\":\"classes/HTMLRouter.html#addListener\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":68,\"kind\":2048,\"name\":\"removeListener\",\"url\":\"classes/HTMLRouter.html#removeListener\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":69,\"kind\":2048,\"name\":\"notify\",\"url\":\"classes/HTMLRouter.html#notify\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":70,\"kind\":2048,\"name\":\"format\",\"url\":\"classes/HTMLRouter.html#format\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":71,\"kind\":2048,\"name\":\"routeForID\",\"url\":\"classes/HTMLRouter.html#routeForID\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"HTMLRouter\"},{\"id\":72,\"kind\":2048,\"name\":\"matchRoutes\",\"url\":\"classes/HTMLRouter.html#matchRoutes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":73,\"kind\":2048,\"name\":\"matchRoute\",\"url\":\"classes/HTMLRouter.html#matchRoute\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected\",\"parent\":\"HTMLRouter\"},{\"id\":74,\"kind\":2048,\"name\":\"validateRouteParams\",\"url\":\"classes/HTMLRouter.html#validateRouteParams\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited tsd-is-protected\",\"parent\":\"HTMLRouter\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,34.144]],[\"parent/0\",[]],[\"name/1\",[1,39.253]],[\"parent/1\",[0,3.212]],[\"name/2\",[2,30.78]],[\"parent/2\",[]],[\"name/3\",[3,39.253]],[\"parent/3\",[2,2.896]],[\"name/4\",[4,39.253]],[\"parent/4\",[2,2.896]],[\"name/5\",[5,21.907]],[\"parent/5\",[]],[\"name/6\",[6,39.253]],[\"parent/6\",[5,2.061]],[\"name/7\",[7,39.253]],[\"parent/7\",[5,2.061]],[\"name/8\",[8,39.253]],[\"parent/8\",[5,2.061]],[\"name/9\",[9,34.144]],[\"parent/9\",[5,2.061]],[\"name/10\",[10,34.144]],[\"parent/10\",[5,2.061]],[\"name/11\",[11,28.267]],[\"parent/11\",[]],[\"name/12\",[9,34.144]],[\"parent/12\",[11,2.659]],[\"name/13\",[12,39.253]],[\"parent/13\",[11,2.659]],[\"name/14\",[10,34.144]],[\"parent/14\",[11,2.659]],[\"name/15\",[13,21.907]],[\"parent/15\",[]],[\"name/16\",[14,34.144]],[\"parent/16\",[13,2.061]],[\"name/17\",[15,34.144]],[\"parent/17\",[13,2.061]],[\"name/18\",[16,34.144]],[\"parent/18\",[13,2.061]],[\"name/19\",[17,34.144]],[\"parent/19\",[13,2.061]],[\"name/20\",[18,34.144]],[\"parent/20\",[13,2.061]],[\"name/21\",[19,34.144]],[\"parent/21\",[13,2.061]],[\"name/22\",[20,34.144]],[\"parent/22\",[13,2.061]],[\"name/23\",[21,20.794]],[\"parent/23\",[]],[\"name/24\",[19,34.144]],[\"parent/24\",[21,1.956]],[\"name/25\",[22,34.144]],[\"parent/25\",[21,1.956]],[\"name/26\",[14,34.144]],[\"parent/26\",[21,1.956]],[\"name/27\",[15,34.144]],[\"parent/27\",[21,1.956]],[\"name/28\",[16,34.144]],[\"parent/28\",[21,1.956]],[\"name/29\",[17,34.144]],[\"parent/29\",[21,1.956]],[\"name/30\",[18,34.144]],[\"parent/30\",[21,1.956]],[\"name/31\",[20,34.144]],[\"parent/31\",[21,1.956]],[\"name/32\",[23,39.253]],[\"parent/32\",[]],[\"name/33\",[24,39.253]],[\"parent/33\",[]],[\"name/34\",[25,15.274]],[\"parent/34\",[]],[\"name/35\",[26,34.144]],[\"parent/35\",[25,1.437]],[\"name/36\",[27,34.144]],[\"parent/36\",[25,1.437]],[\"name/37\",[28,34.144]],[\"parent/37\",[25,1.437]],[\"name/38\",[29,34.144]],[\"parent/38\",[25,1.437]],[\"name/39\",[30,34.144]],[\"parent/39\",[25,1.437]],[\"name/40\",[31,34.144]],[\"parent/40\",[25,1.437]],[\"name/41\",[32,34.144]],[\"parent/41\",[25,1.437]],[\"name/42\",[33,34.144]],[\"parent/42\",[25,1.437]],[\"name/43\",[5,21.907]],[\"parent/43\",[25,1.437]],[\"name/44\",[34,34.144]],[\"parent/44\",[25,1.437]],[\"name/45\",[35,34.144]],[\"parent/45\",[25,1.437]],[\"name/46\",[36,34.144]],[\"parent/46\",[25,1.437]],[\"name/47\",[37,34.144]],[\"parent/47\",[25,1.437]],[\"name/48\",[38,34.144]],[\"parent/48\",[25,1.437]],[\"name/49\",[39,34.144]],[\"parent/49\",[25,1.437]],[\"name/50\",[40,10.921]],[\"parent/50\",[]],[\"name/51\",[26,34.144]],[\"parent/51\",[40,1.027]],[\"name/52\",[41,39.253]],[\"parent/52\",[40,1.027]],[\"name/53\",[42,39.253]],[\"parent/53\",[40,1.027]],[\"name/54\",[43,39.253]],[\"parent/54\",[40,1.027]],[\"name/55\",[22,34.144]],[\"parent/55\",[40,1.027]],[\"name/56\",[44,39.253]],[\"parent/56\",[40,1.027]],[\"name/57\",[33,34.144]],[\"parent/57\",[40,1.027]],[\"name/58\",[45,39.253]],[\"parent/58\",[40,1.027]],[\"name/59\",[5,21.907]],[\"parent/59\",[40,1.027]],[\"name/60\",[46,39.253]],[\"parent/60\",[40,1.027]],[\"name/61\",[47,39.253]],[\"parent/61\",[40,1.027]],[\"name/62\",[48,39.253]],[\"parent/62\",[40,1.027]],[\"name/63\",[39,34.144]],[\"parent/63\",[40,1.027]],[\"name/64\",[27,34.144]],[\"parent/64\",[40,1.027]],[\"name/65\",[28,34.144]],[\"parent/65\",[40,1.027]],[\"name/66\",[29,34.144]],[\"parent/66\",[40,1.027]],[\"name/67\",[30,34.144]],[\"parent/67\",[40,1.027]],[\"name/68\",[31,34.144]],[\"parent/68\",[40,1.027]],[\"name/69\",[32,34.144]],[\"parent/69\",[40,1.027]],[\"name/70\",[34,34.144]],[\"parent/70\",[40,1.027]],[\"name/71\",[35,34.144]],[\"parent/71\",[40,1.027]],[\"name/72\",[36,34.144]],[\"parent/72\",[40,1.027]],[\"name/73\",[37,34.144]],[\"parent/73\",[40,1.027]],[\"name/74\",[38,34.144]],[\"parent/74\",[40,1.027]]],\"invertedIndex\":[[\"__type\",{\"_index\":1,\"name\":{\"1\":{}},\"parent\":{}}],[\"addlistener\",{\"_index\":30,\"name\":{\"39\":{},\"67\":{}},\"parent\":{}}],[\"auth\",{\"_index\":8,\"name\":{\"8\":{}},\"parent\":{}}],[\"authenticator\",{\"_index\":17,\"name\":{\"19\":{},\"29\":{}},\"parent\":{}}],[\"basicrouter\",{\"_index\":25,\"name\":{\"34\":{}},\"parent\":{\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"49\":{}}}],[\"check\",{\"_index\":4,\"name\":{\"4\":{}},\"parent\":{}}],[\"coerce\",{\"_index\":3,\"name\":{\"3\":{}},\"parent\":{}}],[\"config\",{\"_index\":27,\"name\":{\"36\":{},\"64\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":26,\"name\":{\"35\":{},\"51\":{}},\"parent\":{}}],[\"current\",{\"_index\":28,\"name\":{\"37\":{},\"65\":{}},\"parent\":{}}],[\"currentpath\",{\"_index\":41,\"name\":{\"52\":{}},\"parent\":{}}],[\"defaultrouteid\",{\"_index\":15,\"name\":{\"17\":{},\"27\":{}},\"parent\":{}}],[\"event_route_changed\",{\"_index\":23,\"name\":{\"32\":{}},\"parent\":{}}],[\"event_route_failed\",{\"_index\":24,\"name\":{\"33\":{}},\"parent\":{}}],[\"format\",{\"_index\":34,\"name\":{\"44\":{},\"70\":{}},\"parent\":{}}],[\"handlehashchange\",{\"_index\":48,\"name\":{\"62\":{}},\"parent\":{}}],[\"handlepopchange\",{\"_index\":47,\"name\":{\"61\":{}},\"parent\":{}}],[\"handleroutefailure\",{\"_index\":39,\"name\":{\"49\":{},\"63\":{}},\"parent\":{}}],[\"hashhandler\",{\"_index\":43,\"name\":{\"54\":{}},\"parent\":{}}],[\"htmlrouter\",{\"_index\":40,\"name\":{\"50\":{}},\"parent\":{\"51\":{},\"52\":{},\"53\":{},\"54\":{},\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{},\"60\":{},\"61\":{},\"62\":{},\"63\":{},\"64\":{},\"65\":{},\"66\":{},\"67\":{},\"68\":{},\"69\":{},\"70\":{},\"71\":{},\"72\":{},\"73\":{},\"74\":{}}}],[\"htmlrouterconfig\",{\"_index\":21,\"name\":{\"23\":{}},\"parent\":{\"24\":{},\"25\":{},\"26\":{},\"27\":{},\"28\":{},\"29\":{},\"30\":{},\"31\":{}}}],[\"id\",{\"_index\":10,\"name\":{\"10\":{},\"14\":{}},\"parent\":{}}],[\"ignorehashchange\",{\"_index\":44,\"name\":{\"56\":{}},\"parent\":{}}],[\"initialrouteid\",{\"_index\":16,\"name\":{\"18\":{},\"28\":{}},\"parent\":{}}],[\"match\",{\"_index\":6,\"name\":{\"6\":{}},\"parent\":{}}],[\"matchroute\",{\"_index\":37,\"name\":{\"47\":{},\"73\":{}},\"parent\":{}}],[\"matchroutes\",{\"_index\":36,\"name\":{\"46\":{},\"72\":{}},\"parent\":{}}],[\"notify\",{\"_index\":32,\"name\":{\"41\":{},\"69\":{}},\"parent\":{}}],[\"params\",{\"_index\":12,\"name\":{\"13\":{}},\"parent\":{}}],[\"pophandler\",{\"_index\":42,\"name\":{\"53\":{}},\"parent\":{}}],[\"prefix\",{\"_index\":19,\"name\":{\"21\":{},\"24\":{}},\"parent\":{}}],[\"release\",{\"_index\":45,\"name\":{\"58\":{}},\"parent\":{}}],[\"removelistener\",{\"_index\":31,\"name\":{\"40\":{},\"68\":{}},\"parent\":{}}],[\"removetrailingslash\",{\"_index\":20,\"name\":{\"22\":{},\"31\":{}},\"parent\":{}}],[\"route\",{\"_index\":5,\"name\":{\"5\":{},\"43\":{},\"59\":{}},\"parent\":{\"6\":{},\"7\":{},\"8\":{},\"9\":{},\"10\":{}}}],[\"routeauthenticator\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{\"1\":{}}}],[\"routeforid\",{\"_index\":35,\"name\":{\"45\":{},\"71\":{}},\"parent\":{}}],[\"routeindex\",{\"_index\":29,\"name\":{\"38\":{},\"66\":{}},\"parent\":{}}],[\"routematch\",{\"_index\":11,\"name\":{\"11\":{}},\"parent\":{\"12\":{},\"13\":{},\"14\":{}}}],[\"routeparamvalidator\",{\"_index\":2,\"name\":{\"2\":{}},\"parent\":{\"3\":{},\"4\":{}}}],[\"routerconfig\",{\"_index\":13,\"name\":{\"15\":{}},\"parent\":{\"16\":{},\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{}}}],[\"routes\",{\"_index\":14,\"name\":{\"16\":{},\"26\":{}},\"parent\":{}}],[\"routeto\",{\"_index\":46,\"name\":{\"60\":{}},\"parent\":{}}],[\"separator\",{\"_index\":18,\"name\":{\"20\":{},\"30\":{}},\"parent\":{}}],[\"start\",{\"_index\":33,\"name\":{\"42\":{},\"57\":{}},\"parent\":{}}],[\"title\",{\"_index\":9,\"name\":{\"9\":{},\"12\":{}},\"parent\":{}}],[\"usefragment\",{\"_index\":22,\"name\":{\"25\":{},\"55\":{}},\"parent\":{}}],[\"validate\",{\"_index\":7,\"name\":{\"7\":{}},\"parent\":{}}],[\"validaterouteparams\",{\"_index\":38,\"name\":{\"48\":{},\"74\":{}},\"parent\":{}}]],\"pipeline\":[]}}");
package/history.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Fn } from "@thi.ng/api";
2
- import type { HTMLRouterConfig, RouteMatch } from "./api.js";
2
+ import type { HTMLRouterConfig } from "./api.js";
3
3
  import { BasicRouter } from "./basic.js";
4
4
  export declare class HTMLRouter extends BasicRouter {
5
5
  protected currentPath: string;
@@ -16,13 +16,11 @@ export declare class HTMLRouter extends BasicRouter {
16
16
  * If called from userland, this normally is true. However, we want
17
17
  * to avoid this if called from this router's own event handlers.
18
18
  *
19
- * @param raw -
19
+ * @param src -
20
20
  * @param pushState -
21
21
  */
22
- route(src: string, pushState?: boolean): RouteMatch | undefined;
22
+ route(src: string, pushState?: boolean): import("./api.js").RouteMatch | undefined;
23
23
  routeTo(route: string): void;
24
- format(id: PropertyKey, params?: any): string;
25
- format(match: Partial<RouteMatch>): string;
26
24
  protected handlePopChange(): Fn<PopStateEvent, void>;
27
25
  protected handleHashChange(): EventListener;
28
26
  protected handleRouteFailure(): boolean;
package/history.js CHANGED
@@ -1,10 +1,8 @@
1
- import { isString } from "@thi.ng/checks/is-string";
2
1
  import { equiv } from "@thi.ng/equiv";
3
- import { illegalArity } from "@thi.ng/errors/illegal-arity";
4
2
  import { BasicRouter } from "./basic.js";
5
3
  export class HTMLRouter extends BasicRouter {
6
4
  constructor(config) {
7
- super(config);
5
+ super({ prefix: config.useFragment ? "#/" : "/", ...config });
8
6
  this.useFragment = config.useFragment !== false;
9
7
  this.ignoreHashChange = false;
10
8
  }
@@ -36,7 +34,7 @@ export class HTMLRouter extends BasicRouter {
36
34
  * If called from userland, this normally is true. However, we want
37
35
  * to avoid this if called from this router's own event handlers.
38
36
  *
39
- * @param raw -
37
+ * @param src -
40
38
  * @param pushState -
41
39
  */
42
40
  route(src, pushState = true) {
@@ -56,20 +54,6 @@ export class HTMLRouter extends BasicRouter {
56
54
  }
57
55
  this.route(route);
58
56
  }
59
- format(...args) {
60
- let match;
61
- switch (args.length) {
62
- case 2:
63
- match = { id: args[0], params: args[1] };
64
- break;
65
- case 1:
66
- match = isString(args[0]) ? { id: args[0] } : args[0];
67
- break;
68
- default:
69
- illegalArity(args.length);
70
- }
71
- return super.format(match, this.useFragment);
72
- }
73
57
  handlePopChange() {
74
58
  return (this.popHandler =
75
59
  this.popHandler ||
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thi.ng/router",
3
- "version": "3.1.8",
3
+ "version": "3.2.0",
4
4
  "description": "Generic router for browser & non-browser based applications",
5
5
  "type": "module",
6
6
  "module": "./index.js",
@@ -91,5 +91,5 @@
91
91
  ],
92
92
  "year": 2014
93
93
  },
94
- "gitHead": "ab0188234419f2d9f471de80871df930e5555bd6\n"
94
+ "gitHead": "6b8cb407b42a380b2563358fae5f41c45a4e0b04\n"
95
95
  }