Skip to content

Commit b6cbe17

Browse files
committed
feat: include duration in handled event
**BREAKING CHANGE** Previously, the handled event included the performance measure, but now just includes a single property of duration which is the highest resolution timing in milliseconds. This is change is because not all platform acorn supports provides the full performance measurement API.
1 parent b6023f8 commit b6cbe17

File tree

2 files changed

+25
-43
lines changed

2 files changed

+25
-43
lines changed

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oak/acorn",
3-
"version": "0.7.0-alpha.2",
3+
"version": "0.7.0-alpha.3",
44
"exports": {
55
".": "./mod.ts",
66
"./context": "./context.ts",

router.ts

Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -175,21 +175,16 @@ export interface RouteOptionsWithHandler<
175175
handler: RouteHandler<ResponseType, BodyType, Params>;
176176
}
177177

178-
const HTTP_VERBS = [
179-
"DELETE",
180-
"GET",
181-
"HEAD",
182-
"OPTIONS",
183-
"PATCH",
184-
"POST",
185-
"PUT",
186-
] as const;
187-
188-
const HANDLE_START = "handle start";
189-
190178
let RequestEventCtor: typeof CloudFlareRequestEvent | undefined;
191179

192-
type HTTPVerbs = typeof HTTP_VERBS[number];
180+
type HTTPVerbs =
181+
| "DELETE"
182+
| "GET"
183+
| "HEAD"
184+
| "OPTIONS"
185+
| "PATCH"
186+
| "POST"
187+
| "PUT";
193188

194189
/** A string that represents a range of HTTP response {@linkcode Status} codes:
195190
*
@@ -302,7 +297,7 @@ export class NotFoundEvent extends Event {
302297
}
303298

304299
interface HandledEventInit extends EventInit {
305-
measure: PerformanceMeasure;
300+
duration: number;
306301
request: Request;
307302
response: Response;
308303
route?: Route;
@@ -312,15 +307,15 @@ interface HandledEventInit extends EventInit {
312307
*
313308
* This can be used to provide logging and reporting for the router. */
314309
export class HandledEvent extends Event {
315-
#measure: PerformanceMeasure;
310+
#duration: number;
316311
#request: Request;
317312
#response: Response;
318313
#route?: Route;
319314

320-
/** The performance measure from the start of handling the route until it
321-
* finished, which can provide timing information about the processing. */
322-
get measure(): PerformanceMeasure {
323-
return this.#measure;
315+
/** Highest resolution timing available on the platform of the time to handle
316+
* the request/response by acorn in milliseconds. */
317+
get duration(): number {
318+
return this.#duration;
324319
}
325320

326321
/** The {@linkcode Request} that was handled. */
@@ -343,7 +338,7 @@ export class HandledEvent extends Event {
343338
this.#request = eventInitDict.request;
344339
this.#response = eventInitDict.response;
345340
this.#route = eventInitDict.route;
346-
this.#measure = eventInitDict.measure;
341+
this.#duration = eventInitDict.duration;
347342
}
348343
}
349344

@@ -910,8 +905,7 @@ export class Router extends EventTarget {
910905
}
911906

912907
async #handle(requestEvent: RequestEvent): Promise<void> {
913-
const uid = this.#uid++;
914-
performance.mark(`${HANDLE_START} ${uid}`);
908+
const start = performance.now();
915909
const { promise, resolve } = createPromiseWithResolvers<Response>();
916910
this.#handling.add(promise);
917911
requestEvent.respond(promise);
@@ -960,12 +954,9 @@ export class Router extends EventTarget {
960954
response,
961955
);
962956
resolve(result ?? response);
963-
const measure = performance.measure(
964-
`handle ${uid}`,
965-
`${HANDLE_START} ${uid}`,
966-
);
957+
const duration = performance.now() - start;
967958
this.dispatchEvent(
968-
new HandledEvent({ request, route, response, measure }),
959+
new HandledEvent({ request, route, response, duration }),
969960
);
970961
return;
971962
}
@@ -985,12 +976,9 @@ export class Router extends EventTarget {
985976
}
986977
resolve(response);
987978
this.#handling.delete(promise);
988-
const measure = performance.measure(
989-
`handle ${uid}`,
990-
`${HANDLE_START} ${uid}`,
991-
);
979+
const duration = performance.now() - start;
992980
this.dispatchEvent(
993-
new HandledEvent({ request, route, response, measure }),
981+
new HandledEvent({ request, route, response, duration }),
994982
);
995983
return;
996984
}
@@ -1006,11 +994,8 @@ export class Router extends EventTarget {
1006994
);
1007995
resolve(result ?? response);
1008996
this.#handling.delete(promise);
1009-
const measure = performance.measure(
1010-
`handle ${uid}`,
1011-
`${HANDLE_START} ${uid}`,
1012-
);
1013-
this.dispatchEvent(new HandledEvent({ request, response, measure }));
997+
const duration = performance.now() - start;
998+
this.dispatchEvent(new HandledEvent({ request, response, duration }));
1014999
return;
10151000
}
10161001
let response = await this.#handleStatus(
@@ -1023,11 +1008,8 @@ export class Router extends EventTarget {
10231008
}
10241009
resolve(response);
10251010
this.#handling.delete(promise);
1026-
const measure = performance.measure(
1027-
`handle ${uid}`,
1028-
`${HANDLE_START} ${uid}`,
1029-
);
1030-
this.dispatchEvent(new HandledEvent({ request, response, measure }));
1011+
const duration = performance.now() - start;
1012+
this.dispatchEvent(new HandledEvent({ request, response, duration }));
10311013
}
10321014

10331015
#notFound(request: Request): Response {

0 commit comments

Comments
 (0)