@mojojs/core 0.19.2 → 0.21.1
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/lib/app.d.ts +7 -0
- package/lib/app.js +13 -2
- package/lib/app.js.map +1 -1
- package/lib/cache.d.ts +23 -0
- package/lib/cache.js +45 -0
- package/lib/cache.js.map +1 -0
- package/lib/cli/create-full-app.js +2 -2
- package/lib/plugins/mt-engine.js +4 -5
- package/lib/plugins/mt-engine.js.map +1 -1
- package/lib/plugins/view-helpers.js +2 -1
- package/lib/plugins/view-helpers.js.map +1 -1
- package/lib/renderer.d.ts +38 -0
- package/lib/renderer.js +38 -0
- package/lib/renderer.js.map +1 -1
- package/lib/router/route.d.ts +83 -0
- package/lib/router/route.js +83 -0
- package/lib/router/route.js.map +1 -1
- package/lib/router.d.ts +38 -2
- package/lib/router.js +38 -2
- package/lib/router.js.map +1 -1
- package/lib/static.d.ts +3 -0
- package/lib/static.js +3 -0
- package/lib/static.js.map +1 -1
- package/lib/user-agent/test.d.ts +115 -2
- package/lib/user-agent/test.js +123 -10
- package/lib/user-agent/test.js.map +1 -1
- package/package.json +3 -5
package/lib/router/route.js
CHANGED
|
@@ -1,23 +1,56 @@
|
|
|
1
1
|
import { Pattern } from './pattern.js';
|
|
2
|
+
/**
|
|
3
|
+
* Route class.
|
|
4
|
+
*/
|
|
2
5
|
export class Route {
|
|
3
6
|
constructor() {
|
|
7
|
+
/**
|
|
8
|
+
* The children of this route, used for nesting routes.
|
|
9
|
+
*/
|
|
4
10
|
this.children = [];
|
|
11
|
+
/**
|
|
12
|
+
* Custom route name, if defined.
|
|
13
|
+
*/
|
|
5
14
|
this.customName = undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Default route name.
|
|
17
|
+
*/
|
|
6
18
|
this.defaultName = undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Allow `under` semantics for this route.
|
|
21
|
+
*/
|
|
7
22
|
this.underRoute = false;
|
|
23
|
+
/**
|
|
24
|
+
* Restrict HTTP methods this route is allowed to handle, defaults to no restrictions.
|
|
25
|
+
*/
|
|
8
26
|
this.methods = [];
|
|
27
|
+
/**
|
|
28
|
+
* Pattern for this route.
|
|
29
|
+
*/
|
|
9
30
|
this.pattern = new Pattern();
|
|
31
|
+
/**
|
|
32
|
+
* Activate conditions for this route.
|
|
33
|
+
*/
|
|
10
34
|
this.requirements = [];
|
|
35
|
+
/**
|
|
36
|
+
* Activate `websocket` semantics for this route.
|
|
37
|
+
*/
|
|
11
38
|
this.websocketRoute = false;
|
|
12
39
|
this._parent = undefined;
|
|
13
40
|
this._root = undefined;
|
|
14
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Add a child to this route.
|
|
44
|
+
*/
|
|
15
45
|
addChild(child) {
|
|
16
46
|
this.children.push(child);
|
|
17
47
|
child.parent = this;
|
|
18
48
|
child.root = this.root;
|
|
19
49
|
return child;
|
|
20
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate route matching any of the listed HTTP request methods or all.
|
|
53
|
+
*/
|
|
21
54
|
any(...args) {
|
|
22
55
|
const child = new Route();
|
|
23
56
|
const childPattern = child.pattern;
|
|
@@ -39,42 +72,76 @@ export class Route {
|
|
|
39
72
|
childPattern.types = this.root?.types ?? {};
|
|
40
73
|
return this.addChild(child);
|
|
41
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Generate route matching only `DELETE` requests.
|
|
77
|
+
*/
|
|
42
78
|
delete(...args) {
|
|
43
79
|
return this.any(['DELETE'], ...args);
|
|
44
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Generate route matching only `GET` requests.
|
|
83
|
+
*/
|
|
45
84
|
get(...args) {
|
|
46
85
|
return this.any(['GET'], ...args);
|
|
47
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if this route has a WebSocket ancestor and cache the result for future checks.
|
|
89
|
+
*/
|
|
48
90
|
hasWebSocket() {
|
|
49
91
|
return this._branch()
|
|
50
92
|
.map(route => route.websocketRoute)
|
|
51
93
|
.includes(true);
|
|
52
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if this route qualifies as an endpoint.
|
|
97
|
+
*/
|
|
53
98
|
isEndpoint() {
|
|
54
99
|
return this.children.length === 0;
|
|
55
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* The name of this route, defaults to an automatically generated name based on the route pattern. Note that the name
|
|
103
|
+
* `current` is reserved for referring to the current route.
|
|
104
|
+
*/
|
|
56
105
|
name(name) {
|
|
57
106
|
this.customName = name;
|
|
58
107
|
return this;
|
|
59
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Generate route matching only `OPTIONS` requests.
|
|
111
|
+
*/
|
|
60
112
|
options(...args) {
|
|
61
113
|
return this.any(['OPTIONS'], ...args);
|
|
62
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* The parent of this route.
|
|
117
|
+
*/
|
|
63
118
|
get parent() {
|
|
64
119
|
return this._parent?.deref();
|
|
65
120
|
}
|
|
66
121
|
set parent(parent) {
|
|
67
122
|
this._parent = parent === undefined ? undefined : new WeakRef(parent);
|
|
68
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate route matching only `PATCH` requests.
|
|
126
|
+
*/
|
|
69
127
|
patch(...args) {
|
|
70
128
|
return this.any(['PATCH'], ...args);
|
|
71
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Generate route matching only `POST` requests.
|
|
132
|
+
*/
|
|
72
133
|
post(...args) {
|
|
73
134
|
return this.any(['POST'], ...args);
|
|
74
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Generate route matching only `PUT` requests.
|
|
138
|
+
*/
|
|
75
139
|
put(...args) {
|
|
76
140
|
return this.any(['PUT'], ...args);
|
|
77
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Render route with parameters into a path.
|
|
144
|
+
*/
|
|
78
145
|
render(values = {}) {
|
|
79
146
|
const parts = [];
|
|
80
147
|
const branch = this._branch();
|
|
@@ -84,6 +151,10 @@ export class Route {
|
|
|
84
151
|
}
|
|
85
152
|
return parts.reverse().join('');
|
|
86
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Activate conditions for this route. Note that this automatically disables the routing cache, since conditions are
|
|
156
|
+
* too complex for caching.
|
|
157
|
+
*/
|
|
87
158
|
requires(condition, requirement) {
|
|
88
159
|
const root = this.root;
|
|
89
160
|
if (root === undefined)
|
|
@@ -94,12 +165,18 @@ export class Route {
|
|
|
94
165
|
root.cache = null;
|
|
95
166
|
return this;
|
|
96
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Return the `Router` object this route is a descendant of.
|
|
170
|
+
*/
|
|
97
171
|
get root() {
|
|
98
172
|
return this._root?.deref();
|
|
99
173
|
}
|
|
100
174
|
set root(root) {
|
|
101
175
|
this._root = root === undefined ? undefined : new WeakRef(root);
|
|
102
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Set default parameters for this route.
|
|
179
|
+
*/
|
|
103
180
|
to(...targets) {
|
|
104
181
|
const defaults = this.pattern.defaults;
|
|
105
182
|
for (const target of targets) {
|
|
@@ -119,11 +196,17 @@ export class Route {
|
|
|
119
196
|
}
|
|
120
197
|
return this;
|
|
121
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Generate route for a nested route with its own intermediate destination.
|
|
201
|
+
*/
|
|
122
202
|
under(...args) {
|
|
123
203
|
const child = this.any(...args);
|
|
124
204
|
child.underRoute = true;
|
|
125
205
|
return child;
|
|
126
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate route matching only WebSocket handshake requests.
|
|
209
|
+
*/
|
|
127
210
|
websocket(...args) {
|
|
128
211
|
const child = this.any(...args);
|
|
129
212
|
child.websocketRoute = true;
|
package/lib/router/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,MAAM,OAAO,KAAK;IAAlB;QACE,aAAQ,GAAY,EAAE,CAAC;QACvB,eAAU,GAAuB,SAAS,CAAC;QAC3C,gBAAW,GAAuB,SAAS,CAAC;QAC5C,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAAa,EAAE,CAAC;QACvB,YAAO,GAAY,IAAI,OAAO,EAAE,CAAC;QACjC,iBAAY,GAA+B,EAAE,CAAC;QAC9C,mBAAc,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"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"}
|
package/lib/router.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MojoContext, PlaceholderType } from './types.js';
|
|
2
|
+
import { Cache } from './cache.js';
|
|
2
3
|
import { Plan } from './router/plan.js';
|
|
3
4
|
import { Route } from './router/route.js';
|
|
4
|
-
import LRU from 'lru-cache';
|
|
5
5
|
declare type RouteIndex = Record<string, Route>;
|
|
6
6
|
interface RouteSpec {
|
|
7
7
|
ctx?: MojoContext;
|
|
@@ -10,19 +10,55 @@ interface RouteSpec {
|
|
|
10
10
|
websocket: boolean;
|
|
11
11
|
}
|
|
12
12
|
declare type RouteCondition = (ctx: MojoContext, requirements: any) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Router class.
|
|
15
|
+
*/
|
|
13
16
|
export declare class Router extends Route {
|
|
14
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Routing cache.
|
|
19
|
+
*/
|
|
20
|
+
cache: Cache<Plan> | null;
|
|
21
|
+
/**
|
|
22
|
+
* Contains all available conditions.
|
|
23
|
+
*/
|
|
15
24
|
conditions: Record<string, RouteCondition>;
|
|
25
|
+
/**
|
|
26
|
+
* Directories to look for controllers in, first one has the highest precedence.
|
|
27
|
+
*/
|
|
16
28
|
controllerPaths: string[];
|
|
29
|
+
/**
|
|
30
|
+
* Already loaded controllers.
|
|
31
|
+
*/
|
|
17
32
|
controllers: Record<string, any>;
|
|
33
|
+
/**
|
|
34
|
+
* Registered placeholder types, by default only `num` is already defined.
|
|
35
|
+
*/
|
|
18
36
|
types: Record<string, PlaceholderType>;
|
|
19
37
|
_lookupIndex: RouteIndex | undefined;
|
|
20
38
|
constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Register a condition.
|
|
41
|
+
*/
|
|
21
42
|
addCondition(name: string, fn: RouteCondition): this;
|
|
43
|
+
/**
|
|
44
|
+
* Register a placeholder type.
|
|
45
|
+
*/
|
|
22
46
|
addType(name: string, value: PlaceholderType): this;
|
|
47
|
+
/**
|
|
48
|
+
* Match routes and dispatch to actions with and without controllers.
|
|
49
|
+
*/
|
|
23
50
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Find route by name and cache all results for future lookups.
|
|
53
|
+
*/
|
|
24
54
|
lookup(name: string): Route | null;
|
|
55
|
+
/**
|
|
56
|
+
* Plot a route.
|
|
57
|
+
*/
|
|
25
58
|
plot(spec: RouteSpec): Promise<Plan | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Prepare controllers for routing.
|
|
61
|
+
*/
|
|
26
62
|
warmup(): Promise<void>;
|
|
27
63
|
_getPlan(ctx: MojoContext): Promise<Plan | null>;
|
|
28
64
|
_walk(plan: Plan, route: Route, spec: RouteSpec): Promise<boolean>;
|
package/lib/router.js
CHANGED
|
@@ -1,27 +1,54 @@
|
|
|
1
|
+
import { Cache } from './cache.js';
|
|
1
2
|
import { Plan } from './router/plan.js';
|
|
2
3
|
import { Route } from './router/route.js';
|
|
3
4
|
import * as util from './util.js';
|
|
4
|
-
import LRU from 'lru-cache';
|
|
5
5
|
const PLACEHOLDER = {};
|
|
6
|
+
/**
|
|
7
|
+
* Router class.
|
|
8
|
+
*/
|
|
6
9
|
export class Router extends Route {
|
|
7
10
|
constructor() {
|
|
8
11
|
super();
|
|
9
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Routing cache.
|
|
14
|
+
*/
|
|
15
|
+
this.cache = new Cache();
|
|
16
|
+
/**
|
|
17
|
+
* Contains all available conditions.
|
|
18
|
+
*/
|
|
10
19
|
this.conditions = {};
|
|
20
|
+
/**
|
|
21
|
+
* Directories to look for controllers in, first one has the highest precedence.
|
|
22
|
+
*/
|
|
11
23
|
this.controllerPaths = [];
|
|
24
|
+
/**
|
|
25
|
+
* Already loaded controllers.
|
|
26
|
+
*/
|
|
12
27
|
this.controllers = {};
|
|
28
|
+
/**
|
|
29
|
+
* Registered placeholder types, by default only `num` is already defined.
|
|
30
|
+
*/
|
|
13
31
|
this.types = { num: /[0-9]+/ };
|
|
14
32
|
this._lookupIndex = undefined;
|
|
15
33
|
this.root = this;
|
|
16
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Register a condition.
|
|
37
|
+
*/
|
|
17
38
|
addCondition(name, fn) {
|
|
18
39
|
this.conditions[name] = fn;
|
|
19
40
|
return this;
|
|
20
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Register a placeholder type.
|
|
44
|
+
*/
|
|
21
45
|
addType(name, value) {
|
|
22
46
|
this.types[name] = value;
|
|
23
47
|
return this;
|
|
24
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Match routes and dispatch to actions with and without controllers.
|
|
51
|
+
*/
|
|
25
52
|
async dispatch(ctx) {
|
|
26
53
|
const plan = await this._getPlan(ctx);
|
|
27
54
|
if (plan === null)
|
|
@@ -60,6 +87,9 @@ export class Router extends Route {
|
|
|
60
87
|
}
|
|
61
88
|
return true;
|
|
62
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Find route by name and cache all results for future lookups.
|
|
92
|
+
*/
|
|
63
93
|
lookup(name) {
|
|
64
94
|
if (this._lookupIndex === undefined) {
|
|
65
95
|
const defaultNames = {};
|
|
@@ -79,6 +109,9 @@ export class Router extends Route {
|
|
|
79
109
|
}
|
|
80
110
|
return this._lookupIndex[name] === undefined ? null : this._lookupIndex[name];
|
|
81
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Plot a route.
|
|
114
|
+
*/
|
|
82
115
|
async plot(spec) {
|
|
83
116
|
const plan = new Plan();
|
|
84
117
|
const steps = plan.steps;
|
|
@@ -91,6 +124,9 @@ export class Router extends Route {
|
|
|
91
124
|
}
|
|
92
125
|
return plan.endpoint === undefined ? null : plan;
|
|
93
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Prepare controllers for routing.
|
|
129
|
+
*/
|
|
94
130
|
async warmup() {
|
|
95
131
|
Object.assign(this.controllers, await util.loadModules(this.controllerPaths));
|
|
96
132
|
}
|
package/lib/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/lib/static.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export declare class Static {
|
|
|
12
12
|
* Directories to serve static files from, first one has the highest precedence.
|
|
13
13
|
*/
|
|
14
14
|
publicPaths: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Serve static files.
|
|
17
|
+
*/
|
|
15
18
|
dispatch(ctx: MojoContext): Promise<boolean>;
|
|
16
19
|
/**
|
|
17
20
|
* Get static file path with prefix.
|
package/lib/static.js
CHANGED
package/lib/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC;;GAEG;AACH,MAAM,OAAO,MAAM;IAAnB;QACE;;WAEG;QACH,WAAM,GAAG,SAAS,CAAC;QACnB;;WAEG;QACH,gBAAW,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
|
package/lib/user-agent/test.d.ts
CHANGED
|
@@ -10,7 +10,13 @@ import { MockUserAgent } from './mock.js';
|
|
|
10
10
|
import DOM from '@mojojs/dom';
|
|
11
11
|
import StackUtils from 'stack-utils';
|
|
12
12
|
declare type SkipFunction = (...args: any[]) => any;
|
|
13
|
+
/**
|
|
14
|
+
* Test user agent class.
|
|
15
|
+
*/
|
|
13
16
|
export declare class TestUserAgent extends MockUserAgent {
|
|
17
|
+
/**
|
|
18
|
+
* Current HTTP response content.
|
|
19
|
+
*/
|
|
14
20
|
body: Buffer;
|
|
15
21
|
_assert: typeof assert | Tap.Tap | undefined;
|
|
16
22
|
_dom: DOM | undefined;
|
|
@@ -20,41 +26,148 @@ export declare class TestUserAgent extends MockUserAgent {
|
|
|
20
26
|
_stack: StackUtils;
|
|
21
27
|
_ws: WebSocket | undefined;
|
|
22
28
|
constructor(options?: TestUserAgentOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Delegate assertion to test framework currently in use.
|
|
31
|
+
*/
|
|
23
32
|
assert(name: string, args: any[], msg: string, skip: SkipFunction): void;
|
|
33
|
+
/**
|
|
34
|
+
* Check response content for exact match.
|
|
35
|
+
*/
|
|
24
36
|
bodyIs(body: string): this;
|
|
37
|
+
/**
|
|
38
|
+
* Opposite of `bodyIs`.
|
|
39
|
+
*/
|
|
25
40
|
bodyIsnt(body: string): this;
|
|
41
|
+
/**
|
|
42
|
+
* Check response content for similar match.
|
|
43
|
+
*/
|
|
26
44
|
bodyLike(regex: RegExp): this;
|
|
45
|
+
/**
|
|
46
|
+
* Opposite of `bodyLike`.
|
|
47
|
+
*/
|
|
27
48
|
bodyUnlike(regex: RegExp): this;
|
|
49
|
+
/**
|
|
50
|
+
* Close WebSocket connection gracefully.
|
|
51
|
+
*/
|
|
28
52
|
closeOk(code: number, reason: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Wait for WebSocket connection to be closed gracefully and check status.
|
|
55
|
+
*/
|
|
29
56
|
closedOk(code: number): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Perform a `DELETE` request and check for transport errors.
|
|
59
|
+
*/
|
|
30
60
|
deleteOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
61
|
+
/**
|
|
62
|
+
* Checks for existence of the CSS selectors first matching HTML/XML element.
|
|
63
|
+
*/
|
|
31
64
|
elementExists(selector: string): this;
|
|
65
|
+
/**
|
|
66
|
+
* Opposite of `elementExists`.
|
|
67
|
+
*/
|
|
32
68
|
elementExistsNot(selector: string): this;
|
|
69
|
+
/**
|
|
70
|
+
* Perform a `GET` request and check for transport errors.
|
|
71
|
+
*/
|
|
33
72
|
getOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
73
|
+
/**
|
|
74
|
+
* Perform a `HEAD` request and check for transport errors.
|
|
75
|
+
*/
|
|
34
76
|
headOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
77
|
+
/**
|
|
78
|
+
* Check if response header exists.
|
|
79
|
+
*/
|
|
35
80
|
headerExists(name: string): this;
|
|
81
|
+
/**
|
|
82
|
+
* Opposite of `headerExists`.
|
|
83
|
+
*/
|
|
36
84
|
headerExistsNot(name: string): this;
|
|
85
|
+
/**
|
|
86
|
+
* Check response header for exact match.
|
|
87
|
+
*/
|
|
37
88
|
headerIs(name: string, value: string): this;
|
|
89
|
+
/**
|
|
90
|
+
* Opposite of `headerIs`.
|
|
91
|
+
*/
|
|
38
92
|
headerIsnt(name: string, value: string): this;
|
|
93
|
+
/**
|
|
94
|
+
* Check response header for similar match.
|
|
95
|
+
*/
|
|
39
96
|
headerLike(name: string, regex: RegExp): this;
|
|
40
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Check if JSON response contains a value that can be identified using the given JSON Pointer.
|
|
99
|
+
*/
|
|
41
100
|
jsonHas(pointer: string): this;
|
|
101
|
+
/**
|
|
102
|
+
* Check the value extracted from JSON response using the given JSON Pointerr, which defaults to the root value if it
|
|
103
|
+
* is omitted.
|
|
104
|
+
*/
|
|
105
|
+
jsonIs(value: JSONValue, pointer?: string): this;
|
|
106
|
+
/**
|
|
107
|
+
* Wait for next WebSocket message to arrive.
|
|
108
|
+
*/
|
|
42
109
|
messageOk(): Promise<JSONValue>;
|
|
110
|
+
/**
|
|
111
|
+
* Create a new test user agent.
|
|
112
|
+
*/
|
|
43
113
|
static newTestUserAgent(app: App, options?: TestUserAgentOptions): Promise<TestUserAgent>;
|
|
114
|
+
/**
|
|
115
|
+
* Perform a `OPTIONS` request and check for transport errors.
|
|
116
|
+
*/
|
|
44
117
|
optionsOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
118
|
+
/**
|
|
119
|
+
* Perform a `PATCH` request and check for transport errors.
|
|
120
|
+
*/
|
|
45
121
|
patchOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
122
|
+
/**
|
|
123
|
+
* Perform a `POST` request and check for transport errors.
|
|
124
|
+
*/
|
|
46
125
|
postOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
126
|
+
/**
|
|
127
|
+
* Perform a `PUT` request and check for transport errors.
|
|
128
|
+
*/
|
|
47
129
|
putOk(url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|
|
130
|
+
/**
|
|
131
|
+
* Current HTTP response.
|
|
132
|
+
*/
|
|
48
133
|
get res(): UserAgentResponse;
|
|
134
|
+
/**
|
|
135
|
+
* Send message or frame via WebSocket.
|
|
136
|
+
*/
|
|
49
137
|
sendOk(message: JSONValue | Buffer): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Check response status for exact match.
|
|
140
|
+
*/
|
|
50
141
|
statusIs(status: number): this;
|
|
142
|
+
/**
|
|
143
|
+
* Checks text content of the CSS selectors first matching HTML/XML element for similar match.
|
|
144
|
+
*/
|
|
51
145
|
textLike(selector: string, regex: RegExp): this;
|
|
146
|
+
/**
|
|
147
|
+
* Check response `Content-Type` header for exact match.
|
|
148
|
+
*/
|
|
52
149
|
typeIs(value: string): this;
|
|
150
|
+
/**
|
|
151
|
+
* Check response `Content-Type` header for similar match.
|
|
152
|
+
*/
|
|
53
153
|
typeLike(regex: RegExp): this;
|
|
154
|
+
/**
|
|
155
|
+
* Open a WebSocket connection with transparent handshake.
|
|
156
|
+
*/
|
|
54
157
|
websocketOk(url: string | URL, options?: UserAgentWebSocketOptions): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Active WebSocket connection.
|
|
160
|
+
*/
|
|
55
161
|
get ws(): WebSocket;
|
|
56
|
-
|
|
162
|
+
/**
|
|
163
|
+
* Check if YAML response contains a value that can be identified using the given JSON Pointer.
|
|
164
|
+
*/
|
|
57
165
|
yamlHas(pointer: string): this;
|
|
166
|
+
/**
|
|
167
|
+
* Check the value extracted from YAML response using the given JSON Pointerr, which defaults to the root value if it
|
|
168
|
+
* is omitted.
|
|
169
|
+
*/
|
|
170
|
+
yamlIs(value: JSONValue, pointer?: string): this;
|
|
58
171
|
get _html(): DOM;
|
|
59
172
|
_prepareTap(tap: Tap.Tap): void;
|
|
60
173
|
_requestOk(skip: SkipFunction, method: string, url: string | URL, options?: UserAgentRequestOptions): Promise<this>;
|