@rebask/core 0.1.2 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/rsc/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAsBzE,MAAM,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACrE;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,sBAAsB;IACtC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACzD,wFAAwF;IACxF,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,QAAQ,CAAC,CAoLnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/rsc/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAsBzE,MAAM,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACrE;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,sBAAsB;IACtC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACzD,wFAAwF;IACxF,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,QAAQ,CAAC,CAqLnB"}
@@ -3,7 +3,7 @@ import { STATIC } from "../../lib/cache-storage.js";
3
3
  import { getDeploymentIdHeader } from "../../lib/deployment-id.js";
4
4
  import { resetDevOverlayReady } from "../../lib/dev-server.js";
5
5
  import { pageChannel } from "../../lib/devtools-channels.js";
6
- import { getCacheControlHeader, REBASK_HTML_VARY_HEADER, REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, } from "../../lib/ppr/headers.js";
6
+ import { getCacheControlHeader, REBASK_HTML_VARY_HEADER, REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, REBASK_TREE_HEADER, } from "../../lib/ppr/headers.js";
7
7
  import { parseResumeState } from "../../lib/ppr/postponed-state.js";
8
8
  import { prerenderPaths } from "../../lib/prerender-paths.js";
9
9
  import {} from "../../lib/route-matcher.js";
@@ -62,6 +62,7 @@ export async function handlePageRoute(request, route, params, handleOptions) {
62
62
  return respond(new Response(JSON.stringify(payload), {
63
63
  headers: {
64
64
  "content-type": "application/json",
65
+ [REBASK_TREE_HEADER]: "1",
65
66
  "cache-control": getCacheControlHeader({ revalidate: STATIC }),
66
67
  vary: REBASK_HTML_VARY_HEADER,
67
68
  ...getDeploymentIdHeader(),
@@ -25,6 +25,9 @@ export declare class DeploymentMismatchError extends Error {
25
25
  readonly event: DeploymentMismatchEvent;
26
26
  constructor(event: DeploymentMismatchEvent);
27
27
  }
28
+ export declare class DocumentNavigation extends Error {
29
+ constructor();
30
+ }
28
31
  export declare class ServerFunctionError extends Error {
29
32
  readonly status: number;
30
33
  constructor(message: string, status: number);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAM/D,eAAO,MAAM,0BAA0B,+BAA+B,CAAA;AActE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,YAAY,UAAU,EAAE,MAAM,EAE7B;CACD;AAED,yFAAyF;AACzF,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,cAGC;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAED,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAExC;CACD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFxB,YACC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EAIvB;CACD;AAED,sEAAsE;AACtE,qBAAa,yBAA0B,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAM/D,eAAO,MAAM,0BAA0B,+BAA+B,CAAA;AActE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,YAAY,UAAU,EAAE,MAAM,EAE7B;CACD;AAED,yFAAyF;AACzF,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,cAGC;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAED,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAExC;CACD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,cAEC;CACD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFxB,YACC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EAIvB;CACD;AAED,sEAAsE;AACtE,qBAAa,yBAA0B,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
@@ -52,6 +52,11 @@ export class DeploymentMismatchError extends Error {
52
52
  this.event = event;
53
53
  }
54
54
  }
55
+ export class DocumentNavigation extends Error {
56
+ constructor() {
57
+ super("document navigation required");
58
+ }
59
+ }
55
60
  export class ServerFunctionError extends Error {
56
61
  status;
57
62
  constructor(message, status) {
@@ -1,7 +1,7 @@
1
1
  import type { CacheControl } from "./types.js";
2
2
  /** Header used for RSC server functions. */
3
3
  export declare const REBASK_ACTION_HEADER = "x-rsc-action";
4
- /** Header used to request the route tree JSON. */
4
+ /** Requests the route tree. Page routes echo it to identify the response as a route tree. */
5
5
  export declare const REBASK_TREE_HEADER = "x-rebask-tree";
6
6
  /** Header set to "1" when requesting a page segment's Flight shell. */
7
7
  export declare const REBASK_SHELL_HEADER = "x-rebask-shell";
@@ -1 +1 @@
1
- {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/lib/ppr/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,kDAAkD;AAClD,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAE3D,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAA;AAEvD,eAAO,MAAM,uBAAuB,0BAAkC,CAAA;AAEtE,eAAO,MAAM,sBAAsB,yDAAiF,CAAA;AAEpH,oBAAY,iBAAiB;IAC5B,mCAAmC;IACnC,GAAG,QAAQ;IACX,wEAAwE;IACxE,KAAK,UAAU;IACf,8BAA8B;IAC9B,IAAI,SAAS;CACb;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,UAAQ,GAAG,MAAM,CAoBtF;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/E"}
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/lib/ppr/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAE3D,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAA;AAEvD,eAAO,MAAM,uBAAuB,0BAAkC,CAAA;AAEtE,eAAO,MAAM,sBAAsB,yDAAiF,CAAA;AAEpH,oBAAY,iBAAiB;IAC5B,mCAAmC;IACnC,GAAG,QAAQ;IACX,wEAAwE;IACxE,KAAK,UAAU;IACf,8BAA8B;IAC9B,IAAI,SAAS;CACb;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,UAAQ,GAAG,MAAM,CAoBtF;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/E"}
@@ -1,6 +1,6 @@
1
1
  /** Header used for RSC server functions. */
2
2
  export const REBASK_ACTION_HEADER = "x-rsc-action";
3
- /** Header used to request the route tree JSON. */
3
+ /** Requests the route tree. Page routes echo it to identify the response as a route tree. */
4
4
  export const REBASK_TREE_HEADER = "x-rebask-tree";
5
5
  /** Header set to "1" when requesting a page segment's Flight shell. */
6
6
  export const REBASK_SHELL_HEADER = "x-rebask-shell";
@@ -1 +1 @@
1
- {"version":3,"file":"observe-navigations.d.ts","sourceRoot":"","sources":["../src/observe-navigations.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,kBAAkB,SAsEjC"}
1
+ {"version":3,"file":"observe-navigations.d.ts","sourceRoot":"","sources":["../src/observe-navigations.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,kBAAkB,SAqGjC"}
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from "react";
2
2
  import { useRouterCache } from "./components/cache-slot.js";
3
3
  import { reloadForDeploymentMismatch } from "./lib/deployment-reload.js";
4
- import { HandledDeploymentMismatch } from "./lib/errors.js";
4
+ import { DocumentNavigation, HandledDeploymentMismatch } from "./lib/errors.js";
5
5
  import { beginNavigation, createNavigationIntent, isCurrentNavigation, pendingScrollAtom, } from "./lib/scroll.js";
6
6
  import { useRouter } from "./router.js";
7
7
  /**
@@ -18,43 +18,59 @@ export function ObserveNavigations() {
18
18
  cache.shellError = false;
19
19
  router.refresh(window.location.href).catch(() => { });
20
20
  }
21
- function onNavigation(intent, scrollIntent) {
22
- cache.pathnameAtom.set(window.location.pathname);
21
+ function onNavigation(intent, scrollIntent, url, commitHistory, onDocument) {
23
22
  const isCurrent = cache.captureRouteTransaction();
23
+ let committed = false;
24
+ const commit = () => {
25
+ if (committed)
26
+ return;
27
+ committed = true;
28
+ // A same-document entry followed by a document reload breaks back/forward for non-page responses.
29
+ commitHistory?.();
30
+ cache.pathnameAtom.set(window.location.pathname);
31
+ };
24
32
  const activate = (routeTreeResponse, complete = false) => {
25
33
  if (!isCurrentNavigation(intent) || !isCurrent())
26
34
  return;
35
+ commit();
27
36
  router.activate(routeTreeResponse);
28
37
  if (scrollIntent && (complete || scrollIntent.type !== "hash")) {
29
38
  pendingScrollAtom.set(scrollIntent);
30
39
  }
31
40
  };
32
41
  router
33
- .prefetch(window.location.href, { onRouteTree: activate })
42
+ .prefetch(url, { onRouteTree: activate })
34
43
  .then((response) => activate(response, true))
35
44
  // React receives rendering failures separately. This catch prevents a duplicate unhandled rejection.
36
45
  .catch((error) => {
46
+ if (error instanceof DocumentNavigation) {
47
+ if (!isCurrentNavigation(intent) || !isCurrent())
48
+ return;
49
+ onDocument?.();
50
+ }
37
51
  if (error instanceof HandledDeploymentMismatch) {
52
+ if (!isCurrentNavigation(intent) || !isCurrent())
53
+ return;
54
+ commit();
38
55
  reloadForDeploymentMismatch(error.event);
39
56
  }
40
57
  });
41
58
  }
42
59
  function onPopstate() {
43
- onNavigation(beginNavigation(), null);
60
+ const url = window.location.href;
61
+ onNavigation(beginNavigation(), null, url, undefined, () => window.location.replace(url));
44
62
  }
45
63
  const { pushState, replaceState } = window.history;
46
64
  window.addEventListener("popstate", onPopstate);
47
65
  window.history.pushState = function (...args) {
48
- const res = pushState.apply(this, args);
49
- const intent = createNavigationIntent(window.location.href);
50
- onNavigation(intent, intent);
51
- return res;
66
+ const url = new URL(args[2] || window.location.href, window.location.href).href;
67
+ const intent = createNavigationIntent(url);
68
+ onNavigation(intent, intent, url, () => pushState.apply(this, args), () => window.location.assign(url));
52
69
  };
53
70
  window.history.replaceState = function (...args) {
54
- const res = replaceState.apply(this, args);
55
- const intent = createNavigationIntent(window.location.href);
56
- onNavigation(intent, intent);
57
- return res;
71
+ const url = new URL(args[2] || window.location.href, window.location.href).href;
72
+ const intent = createNavigationIntent(url);
73
+ onNavigation(intent, intent, url, () => replaceState.apply(this, args), () => window.location.replace(url));
58
74
  };
59
75
  return () => {
60
76
  window.removeEventListener("popstate", onPopstate);
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"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"}
package/dist/router.js CHANGED
@@ -9,7 +9,7 @@ import { denyRoutePrediction, getRoutePathInfo, learnedPredictions, learnRoutePr
9
9
  import { captureClientTraceData, getClientTraceHeaders } from "./lib/client-trace.js";
10
10
  import { getDeploymentIdHeader } from "./lib/deployment-id.js";
11
11
  import { reloadForDeploymentMismatch } from "./lib/deployment-reload.js";
12
- import { HandledDeploymentMismatch, DeploymentMismatchError } from "./lib/errors.js";
12
+ import { DocumentNavigation, HandledDeploymentMismatch, DeploymentMismatchError, } from "./lib/errors.js";
13
13
  import { extractSegmentHints } from "./lib/extract-segment-hints.js";
14
14
  import { REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, REBASK_TRAILER_HEADER, REBASK_TREE_HEADER, } from "./lib/ppr/headers.js";
15
15
  import { getRouteTreeUrl, } from "./lib/route-prediction.js";
@@ -243,6 +243,11 @@ class Router {
243
243
  })
244
244
  .then(async (response) => {
245
245
  captureClientTraceData(response);
246
+ if (response.headers.get(REBASK_TREE_HEADER) !== "1") {
247
+ if (response.body)
248
+ await response.body.cancel();
249
+ throw new DocumentNavigation();
250
+ }
246
251
  this.cache.handleDeploymentMismatch(response, url, "tree");
247
252
  const [tree, routePrediction] = (await response.json());
248
253
  return { tree, routePrediction, url: getUrl(url).href };
@@ -574,10 +579,10 @@ class Router {
574
579
  this.cache.registerRouteTree(predicted);
575
580
  return predicted;
576
581
  }
577
- if (inflightSiblingTree) {
582
+ if (inflightSiblingTree && isCurrentNavigation(inflightSiblingTree.navigation)) {
578
583
  // An in-flight fetch under the same parent teaches this route's prediction, so the
579
584
  // retry can avoid a second tree request.
580
- await inflightSiblingTree.catch(() => { });
585
+ await inflightSiblingTree.response.catch(() => { });
581
586
  return isCurrent()
582
587
  ? this.prefetchRouteTree(url, cache, dedupe)
583
588
  : this.fetchRouteTree(url, dedupe);
@@ -591,11 +596,12 @@ class Router {
591
596
  return routeTreeResponse;
592
597
  });
593
598
  if (cache) {
594
- inflightRouteTreeByParent.set(parentPathname, routeTreeRequest);
599
+ const inflight = { response: routeTreeRequest, navigation: captureNavigationIntent() };
600
+ inflightRouteTreeByParent.set(parentPathname, inflight);
595
601
  routeTreeRequest
596
602
  .catch(() => { })
597
603
  .finally(() => {
598
- if (inflightRouteTreeByParent.get(parentPathname) === routeTreeRequest) {
604
+ if (inflightRouteTreeByParent.get(parentPathname) === inflight) {
599
605
  inflightRouteTreeByParent.delete(parentPathname);
600
606
  }
601
607
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rebask/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Vite plugin and runtime for React Server Components",
5
5
  "homepage": "https://github.com/lfades/vext#readme",
6
6
  "license": "MIT",