@esportsplus/routing 0.0.4 → 0.0.5

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/build/url.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const parse = (url = window.location.href) => {
2
- let data = new URL(url), parts = data.host.split('.'), subdomain = '';
2
+ let { hash, host, hostname, href, origin, pathname, port, protocol } = new URL(url), parts = host.split('.'), path = hash?.replace('#/', '/')?.split('?') || ['/', ''], subdomain = '';
3
3
  if (parts.length > 2) {
4
4
  subdomain = parts[0];
5
5
  if (['127', 'www'].includes(subdomain)) {
@@ -8,14 +8,14 @@ const parse = (url = window.location.href) => {
8
8
  }
9
9
  return {
10
10
  data: {},
11
- href: data.href,
12
- hostname: data.hostname,
13
- uri: data.hash.replace('#/', '/') || '/',
14
- origin: data.origin,
15
- pathname: data.pathname,
16
- port: data.port,
17
- protocol: data.protocol,
18
- query: Object.fromEntries(data.searchParams.entries()),
11
+ href: href,
12
+ hostname: hostname,
13
+ uri: path[0],
14
+ origin: origin,
15
+ pathname: pathname,
16
+ port: port,
17
+ protocol: protocol,
18
+ query: Object.fromEntries((new URLSearchParams(path[1])).entries()),
19
19
  subdomain
20
20
  };
21
21
  };
package/package.json CHANGED
@@ -22,5 +22,5 @@
22
22
  ]
23
23
  }
24
24
  },
25
- "version": "0.0.4"
25
+ "version": "0.0.5"
26
26
  }
package/src/group.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { Group } from "./types";
2
-
3
-
4
- export default (): Group => {
5
- return {
6
- middleware: [],
7
- name: '',
8
- pattern: '',
9
- subdomain: ''
10
- };
11
- };
1
+ import { Group } from "./types";
2
+
3
+
4
+ export default (): Group => {
5
+ return {
6
+ middleware: [],
7
+ name: '',
8
+ pattern: '',
9
+ subdomain: ''
10
+ };
11
+ };
package/src/index.ts CHANGED
@@ -1,9 +1,9 @@
1
- import middleware from './middleware';
2
- import redirect from './redirect';
3
- import listener from './listener';
4
- import routes from './routes';
5
- import url from './url';
6
-
7
-
8
- export default { listener, middleware, redirect, routes, url };
9
- export { listener, middleware, redirect, routes, url };
1
+ import middleware from './middleware';
2
+ import redirect from './redirect';
3
+ import listener from './listener';
4
+ import routes from './routes';
5
+ import url from './url';
6
+
7
+
8
+ export default { listener, middleware, redirect, routes, url };
9
+ export { listener, middleware, redirect, routes, url };
@@ -1,17 +1,17 @@
1
- import { factory } from '~/middleware';
2
- import { Request } from '~/types';
3
-
4
-
5
- export default (request: Request) => {
6
- let route = request.data.route;
7
-
8
- if (!route) {
9
- throw new Error(`Route dispatching failed, route was not defined!`);
10
- }
11
-
12
- if (!route.middleware.length) {
13
- return route.responder(request);
14
- }
15
-
16
- return factory(...route.middleware, (request => route.responder(request)))(request);
17
- };
1
+ import { factory } from '~/middleware';
2
+ import { Request } from '~/types';
3
+
4
+
5
+ export default (request: Request) => {
6
+ let route = request.data.route;
7
+
8
+ if (!route) {
9
+ throw new Error(`Route dispatching failed, route was not defined!`);
10
+ }
11
+
12
+ if (!route.middleware.length) {
13
+ return route.responder(request);
14
+ }
15
+
16
+ return factory(...route.middleware, (request => route.responder(request)))(request);
17
+ };
@@ -1,5 +1,5 @@
1
- import dispatch from './dispatch';
2
- import match from './match';
3
-
4
-
5
- export default { dispatch, match };
1
+ import dispatch from './dispatch';
2
+ import match from './match';
3
+
4
+
5
+ export default { dispatch, match };
@@ -1,26 +1,26 @@
1
- import { Routes } from '~/routes';
2
- import { Next, Request } from '~/types';
3
-
4
-
5
- export default (routes: Routes) => {
6
- return (request: Request, next: Next) => {
7
- let name = (routes.subdomains[request.subdomain] || {})[request.uri],
8
- route = routes.static[name];
9
-
10
- // Dynamic routing
11
- if (!route) {
12
- // TODO:
13
- // - Trie based routing
14
- // - Bind variables to request
15
- }
16
-
17
- // Fallback route
18
- if (!route && routes.fallback) {
19
- route = routes.static[routes.fallback];
20
- }
21
-
22
- request.data.route = route;
23
-
24
- return next(request);
25
- };
26
- };
1
+ import { Routes } from '~/routes';
2
+ import { Next, Request } from '~/types';
3
+
4
+
5
+ export default (routes: Routes) => {
6
+ return (request: Request, next: Next) => {
7
+ let name = (routes.subdomains[request.subdomain] || {})[request.uri],
8
+ route = routes.static[name];
9
+
10
+ // Dynamic routing
11
+ if (!route) {
12
+ // TODO:
13
+ // - Trie based routing
14
+ // - Bind variables to request
15
+ }
16
+
17
+ // Fallback route
18
+ if (!route && routes.fallback) {
19
+ route = routes.static[routes.fallback];
20
+ }
21
+
22
+ request.data.route = route;
23
+
24
+ return next(request);
25
+ };
26
+ };
package/src/routes.ts CHANGED
@@ -1,63 +1,63 @@
1
- import { Group, Responder, Route } from './types';
2
-
3
-
4
- class Routes {
5
- dynamic: Record<Route['name'], Route> = {};
6
- fallback?: string;
7
- groups: Group[] = [];
8
- static: Record<Route['name'], Route> = {};
9
- subdomains: Record<Route['subdomain'], Record<Route['pattern'], Route['name']>> = {};
10
-
11
-
12
- add(name: string, pattern: string, responder: Responder) {
13
- let route: Route = {
14
- middleware: [],
15
- name: '',
16
- pattern: '',
17
- responder,
18
- subdomain: ''
19
- };
20
-
21
- for (let i = 0, n = this.groups.length; i < n; i++) {
22
- let group = this.groups[i];
23
-
24
- route.name += group.name;
25
- route.pattern += group.pattern;
26
- route.subdomain = group.subdomain + route.subdomain;
27
-
28
- if (group.middleware.length) {
29
- route.middleware.push(...group.middleware);
30
- }
31
- }
32
-
33
- route.name += name;
34
- route.pattern += pattern;
35
-
36
- if (route.pattern[0] !== '/') {
37
- route.pattern = `/${route.pattern}`;
38
- }
39
-
40
- if (route.subdomain === 'www') {
41
- route.subdomain = '';
42
- }
43
-
44
- if (!this.subdomains[route.subdomain]) {
45
- this.subdomains[route.subdomain] = {};
46
- }
47
-
48
- this.static[route.name] = route;
49
- this.subdomains[route.subdomain][route.pattern] = route.name;
50
-
51
- return route;
52
- }
53
-
54
- group(group: any, routes: (routes: Routes) => void) {
55
- this.groups.push(group);
56
- routes(this);
57
- this.groups.pop();
58
- }
59
- }
60
-
61
-
62
- export default new Routes();
1
+ import { Group, Responder, Route } from './types';
2
+
3
+
4
+ class Routes {
5
+ dynamic: Record<Route['name'], Route> = {};
6
+ fallback?: string;
7
+ groups: Group[] = [];
8
+ static: Record<Route['name'], Route> = {};
9
+ subdomains: Record<Route['subdomain'], Record<Route['pattern'], Route['name']>> = {};
10
+
11
+
12
+ add(name: string, pattern: string, responder: Responder) {
13
+ let route: Route = {
14
+ middleware: [],
15
+ name: '',
16
+ pattern: '',
17
+ responder,
18
+ subdomain: ''
19
+ };
20
+
21
+ for (let i = 0, n = this.groups.length; i < n; i++) {
22
+ let group = this.groups[i];
23
+
24
+ route.name += group.name;
25
+ route.pattern += group.pattern;
26
+ route.subdomain = group.subdomain + route.subdomain;
27
+
28
+ if (group.middleware.length) {
29
+ route.middleware.push(...group.middleware);
30
+ }
31
+ }
32
+
33
+ route.name += name;
34
+ route.pattern += pattern;
35
+
36
+ if (route.pattern[0] !== '/') {
37
+ route.pattern = `/${route.pattern}`;
38
+ }
39
+
40
+ if (route.subdomain === 'www') {
41
+ route.subdomain = '';
42
+ }
43
+
44
+ if (!this.subdomains[route.subdomain]) {
45
+ this.subdomains[route.subdomain] = {};
46
+ }
47
+
48
+ this.static[route.name] = route;
49
+ this.subdomains[route.subdomain][route.pattern] = route.name;
50
+
51
+ return route;
52
+ }
53
+
54
+ group(group: any, routes: (routes: Routes) => void) {
55
+ this.groups.push(group);
56
+ routes(this);
57
+ this.groups.pop();
58
+ }
59
+ }
60
+
61
+
62
+ export default new Routes();
63
63
  export { Routes };
package/src/url.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  const parse = (url: string = window.location.href) => {
2
- let data = new URL( url ),
3
- parts = data.host.split('.'),
2
+ let { hash, host, hostname, href, origin, pathname, port, protocol } = new URL( url ),
3
+ parts = host.split('.'),
4
+ path = hash?.replace('#/', '/')?.split('?') || ['/', ''],
4
5
  subdomain = '';
5
6
 
6
7
  if (parts.length > 2) {
@@ -13,14 +14,14 @@ const parse = (url: string = window.location.href) => {
13
14
 
14
15
  return {
15
16
  data: {} as Record<string, any>,
16
- href: data.href,
17
- hostname: data.hostname,
18
- uri: data.hash.replace('#/', '/') || '/',
19
- origin: data.origin,
20
- pathname: data.pathname,
21
- port: data.port,
22
- protocol: data.protocol,
23
- query: Object.fromEntries( data.searchParams.entries() ),
17
+ href: href,
18
+ hostname: hostname,
19
+ uri: path[0],
20
+ origin: origin,
21
+ pathname: pathname,
22
+ port: port,
23
+ protocol: protocol,
24
+ query: Object.fromEntries( (new URLSearchParams(path[1])).entries() ),
24
25
  subdomain
25
26
  };
26
27
  };
@@ -1,3 +0,0 @@
1
- import { Request } from '../types';
2
- declare const _default: (request: Request) => any;
3
- export default _default;
@@ -1,11 +0,0 @@
1
- import { middleware } from '../request';
2
- export default (request) => {
3
- let route = request.data.route;
4
- if (!route) {
5
- throw new Error(`Route dispatching failed, route was not defined!`);
6
- }
7
- if (!route.middleware.length) {
8
- return route.responder(request);
9
- }
10
- return middleware(...route.middleware, (request => route.responder(request)))(request);
11
- };
@@ -1,4 +0,0 @@
1
- import { Routes } from '../routes';
2
- import { Next, Request } from '../types';
3
- declare const _default: (routes: Routes) => (request: Request, next: Next) => unknown;
4
- export default _default;
@@ -1,12 +0,0 @@
1
- export default (routes) => {
2
- return (request, next) => {
3
- let name = (routes.subdomains[request.subdomain] || {})[request.uri], route = routes.static[name];
4
- if (!route) {
5
- }
6
- if (!route && routes.fallback) {
7
- route = routes.static[routes.fallback];
8
- }
9
- request.data.route = route;
10
- return next(request);
11
- };
12
- };
@@ -1,34 +0,0 @@
1
- import middleware from './middleware';
2
- import parse from './parse';
3
- declare const _default: {
4
- middleware: (...middleware: import("./types").Middleware[]) => (request: {
5
- data: Record<string, any>;
6
- href: string;
7
- hostname: string;
8
- uri: string;
9
- origin: string;
10
- pathname: string;
11
- port: string;
12
- protocol: string;
13
- query: {
14
- [k: string]: string;
15
- };
16
- subdomain: string;
17
- }) => Promise<unknown>;
18
- parse: (url?: string) => {
19
- data: Record<string, any>;
20
- href: string;
21
- hostname: string;
22
- uri: string;
23
- origin: string;
24
- pathname: string;
25
- port: string;
26
- protocol: string;
27
- query: {
28
- [k: string]: string;
29
- };
30
- subdomain: string;
31
- };
32
- };
33
- export default _default;
34
- export { middleware, parse };
@@ -1,4 +0,0 @@
1
- import middleware from './middleware';
2
- import parse from './parse';
3
- export default { middleware, parse };
4
- export { middleware, parse };
@@ -1,3 +0,0 @@
1
- import { Middleware, Request } from './types';
2
- declare const _default: (...middleware: Middleware[]) => (request: Request) => Promise<unknown>;
3
- export default _default;
@@ -1,12 +0,0 @@
1
- export default (...middleware) => {
2
- let i = -1, n = middleware.length, next = (request) => middleware[++i](request, (i < n ? next : () => {
3
- throw new Error('Request middleware did not return a responder');
4
- }));
5
- return async (request) => {
6
- if (!middleware.length) {
7
- throw new Error('Request middleware has not been defined');
8
- }
9
- i = -1;
10
- return await next(request);
11
- };
12
- };
@@ -1,15 +0,0 @@
1
- declare const _default: (url?: string) => {
2
- data: Record<string, any>;
3
- href: string;
4
- hostname: string;
5
- uri: string;
6
- origin: string;
7
- pathname: string;
8
- port: string;
9
- protocol: string;
10
- query: {
11
- [k: string]: string;
12
- };
13
- subdomain: string;
14
- };
15
- export default _default;
@@ -1,18 +0,0 @@
1
- export default (url = window.location.href) => {
2
- let data = new URL(url), subdomain = data.host.split('.')[0] || '';
3
- if (['127', 'www'].includes(`${subdomain}`)) {
4
- subdomain = '';
5
- }
6
- return {
7
- data: {},
8
- href: data.href,
9
- hostname: data.hostname,
10
- uri: data.hash.replace('#/', '/') || '/',
11
- origin: data.origin,
12
- pathname: data.pathname,
13
- port: data.port,
14
- protocol: data.protocol,
15
- query: Object.fromEntries(data.searchParams.entries()),
16
- subdomain
17
- };
18
- };
@@ -1,6 +0,0 @@
1
- import parse from './parse';
2
- type Middleware = (request: Request, next: Next) => unknown;
3
- type Next = (request: Request) => unknown;
4
- type Request = ReturnType<typeof parse>;
5
- type Responder = (request: Request) => Promise<unknown> | unknown;
6
- export { Middleware, Next, Request, Responder };
@@ -1 +0,0 @@
1
- export {};