@esportsplus/routing 0.0.42 → 0.0.44

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/src/browser.ts CHANGED
@@ -1,164 +1,164 @@
1
- import { effect, reactive, root, Root, Scheduler } from '@esportsplus/reactivity';
2
- import { html } from '@esportsplus/template';
3
- import { Middleware, Next, Request, Route, Router } from './types';
4
- import pipeline from '@esportsplus/pipeline';
5
- import factory from './router';
6
-
7
-
8
- let cache: Request<any>[] = [];
9
-
10
-
11
- function back() {
12
- window.history.back();
13
- }
14
-
15
- function forward() {
16
- window.history.forward();
17
- }
18
-
19
- function href<T>() {
20
- let data = new URL( window.location?.href || '' ),
21
- path = data.hash ? data.hash.slice(1).split('?') : ['/', ''],
22
- request = {
23
- href: data.href,
24
- hostname: data.hostname,
25
- method: 'GET',
26
- origin: data.origin,
27
- path: path[0],
28
- port: data.port,
29
- protocol: data.protocol,
30
- query: {} as Record<PropertyKey, unknown>
31
- };
32
-
33
- if (path[1]) {
34
- for (let [key, value] of (new URLSearchParams(path[1])).entries()) {
35
- request.query[key] = value;
36
- }
37
- }
38
-
39
- return request as Request<T>;
40
- }
41
-
42
- function match<T>(request: Request<T>, router: Router<T>, subdomain?: string) {
43
- if (router.subdomains !== null) {
44
- for (let i = 0, n = router.subdomains.length; i < n; i++) {
45
- if (!request.hostname.startsWith(router.subdomains[i])) {
46
- continue;
47
- }
48
-
49
- subdomain = router.subdomains[i];
50
- break;
51
- }
52
- }
53
-
54
- return router.match(request.method, request.path, subdomain || '');
55
- }
56
-
57
- function middleware<T>(request: Request<T>, router: Router<T>) {
58
- function host(...middleware: Middleware<T>[]) {
59
- let instance = pipeline(...middleware);
60
-
61
- return () => instance(request);
62
- };
63
-
64
- host.dispatch = (request: Request<T>) => {
65
- let { route } = request.data;
66
-
67
- if (route === undefined) {
68
- throw new Error(`Middleware: route is undefined!`);
69
- }
70
-
71
- return route.dispatch(request);
72
- };
73
-
74
- host.match = (fallback: Route<T>, scheduler: Scheduler, subdomain?: string) => {
75
- let state = reactive<ReturnType<typeof router.match> & { root?: Root }>({
76
- parameters: undefined,
77
- root: undefined,
78
- route: undefined
79
- });
80
-
81
- if (fallback === undefined) {
82
- throw new Error('Middleware: fallback route does not exist');
83
- }
84
-
85
- effect(() => {
86
- let { parameters, route } = match(request, router, subdomain);
87
-
88
- state.parameters = parameters;
89
- state.route = route || fallback;
90
- });
91
-
92
- return (request: Request<T>, next: Next<T>) => {
93
- return html`${() => {
94
- if (state.route === undefined) {
95
- throw new Error('Routing: route is undefined');
96
- }
97
-
98
- if (state.root !== undefined) {
99
- state.root.dispose();
100
- }
101
-
102
- return root((root) => {
103
- request.data = {
104
- parameters: state.parameters,
105
- route: state.route
106
- };
107
- state.root = root;
108
-
109
- return next(request);
110
- }, scheduler);
111
- }}`;
112
- };
113
- };
114
-
115
- return host;
116
- }
117
-
118
- function normalize(uri: string) {
119
- if (uri[0] === '/') {
120
- return '#' + uri;
121
- }
122
-
123
- return uri;
124
- }
125
-
126
- function onpopstate() {
127
- let values = href();
128
-
129
- for (let i = 0, n = cache.length; i < n; i++) {
130
- let state = cache[i];
131
-
132
- for (let key in values) {
133
- // @ts-ignore
134
- state[key] = values[key];
135
- }
136
- }
137
- }
138
-
139
-
140
- export default <T>(instance?: Router<T>) => {
141
- let request = reactive( Object.assign(href<T>(), { data: {} }) ),
142
- router = instance || factory<T>();
143
-
144
- if (cache.push(request) === 1) {
145
- window.addEventListener('hashchange', onpopstate);
146
- }
147
-
148
- return {
149
- back,
150
- forward,
151
- middleware: middleware(request, router),
152
- redirect: (path: string, values: unknown[] = []) => {
153
- if (path.indexOf('://') !== -1) {
154
- return window.location.replace(path);
155
- }
156
-
157
- window.location.hash = normalize( router.uri(path, values) );
158
- },
159
- router,
160
- uri: (path: string, values: unknown[] = []) => {
161
- return normalize( router.uri(path, values) );
162
- }
163
- };
1
+ import { effect, reactive, root, Root, Scheduler } from '@esportsplus/reactivity';
2
+ import { html } from '@esportsplus/template';
3
+ import { Middleware, Next, Request, Route, Router } from './types';
4
+ import pipeline from '@esportsplus/pipeline';
5
+ import factory from './router';
6
+
7
+
8
+ let cache: Request<any>[] = [];
9
+
10
+
11
+ function back() {
12
+ window.history.back();
13
+ }
14
+
15
+ function forward() {
16
+ window.history.forward();
17
+ }
18
+
19
+ function href<T>() {
20
+ let data = new URL( window.location?.href || '' ),
21
+ path = data.hash ? data.hash.slice(1).split('?') : ['/', ''],
22
+ request = {
23
+ href: data.href,
24
+ hostname: data.hostname,
25
+ method: 'GET',
26
+ origin: data.origin,
27
+ path: path[0],
28
+ port: data.port,
29
+ protocol: data.protocol,
30
+ query: {} as Record<PropertyKey, unknown>
31
+ };
32
+
33
+ if (path[1]) {
34
+ for (let [key, value] of (new URLSearchParams(path[1])).entries()) {
35
+ request.query[key] = value;
36
+ }
37
+ }
38
+
39
+ return request as Request<T>;
40
+ }
41
+
42
+ function match<T>(request: Request<T>, router: Router<T>, subdomain?: string) {
43
+ if (router.subdomains !== null) {
44
+ for (let i = 0, n = router.subdomains.length; i < n; i++) {
45
+ if (!request.hostname.startsWith(router.subdomains[i])) {
46
+ continue;
47
+ }
48
+
49
+ subdomain = router.subdomains[i];
50
+ break;
51
+ }
52
+ }
53
+
54
+ return router.match(request.method, request.path, subdomain || '');
55
+ }
56
+
57
+ function middleware<T>(request: Request<T>, router: Router<T>) {
58
+ function host(...middleware: Middleware<T>[]) {
59
+ let instance = pipeline(...middleware);
60
+
61
+ return () => instance(request);
62
+ };
63
+
64
+ host.dispatch = (request: Request<T>) => {
65
+ let { route } = request.data;
66
+
67
+ if (route === undefined) {
68
+ throw new Error(`Middleware: route is undefined!`);
69
+ }
70
+
71
+ return route.dispatch(request);
72
+ };
73
+
74
+ host.match = (fallback: Route<T>, scheduler: Scheduler, subdomain?: string) => {
75
+ let state = reactive<ReturnType<typeof router.match> & { root?: Root }>({
76
+ parameters: undefined,
77
+ root: undefined,
78
+ route: undefined
79
+ });
80
+
81
+ if (fallback === undefined) {
82
+ throw new Error('Middleware: fallback route does not exist');
83
+ }
84
+
85
+ effect(() => {
86
+ let { parameters, route } = match(request, router, subdomain);
87
+
88
+ state.parameters = parameters;
89
+ state.route = route || fallback;
90
+ });
91
+
92
+ return (request: Request<T>, next: Next<T>) => {
93
+ return html`${() => {
94
+ if (state.route === undefined) {
95
+ throw new Error('Routing: route is undefined');
96
+ }
97
+
98
+ if (state.root !== undefined) {
99
+ state.root.dispose();
100
+ }
101
+
102
+ return root((root) => {
103
+ request.data = {
104
+ parameters: state.parameters,
105
+ route: state.route
106
+ };
107
+ state.root = root;
108
+
109
+ return next(request);
110
+ }, scheduler);
111
+ }}`;
112
+ };
113
+ };
114
+
115
+ return host;
116
+ }
117
+
118
+ function normalize(uri: string) {
119
+ if (uri[0] === '/') {
120
+ return '#' + uri;
121
+ }
122
+
123
+ return uri;
124
+ }
125
+
126
+ function onpopstate() {
127
+ let values = href();
128
+
129
+ for (let i = 0, n = cache.length; i < n; i++) {
130
+ let state = cache[i];
131
+
132
+ for (let key in values) {
133
+ // @ts-ignore
134
+ state[key] = values[key];
135
+ }
136
+ }
137
+ }
138
+
139
+
140
+ export default <T>(instance?: Router<T>) => {
141
+ let request = reactive( Object.assign(href<T>(), { data: {} }) ),
142
+ router = instance || factory<T>();
143
+
144
+ if (cache.push(request) === 1) {
145
+ window.addEventListener('hashchange', onpopstate);
146
+ }
147
+
148
+ return {
149
+ back,
150
+ forward,
151
+ middleware: middleware(request, router),
152
+ redirect: (path: string, values: unknown[] = []) => {
153
+ if (path.indexOf('://') !== -1) {
154
+ return window.location.replace(path);
155
+ }
156
+
157
+ window.location.hash = normalize( router.uri(path, values) );
158
+ },
159
+ router,
160
+ uri: (path: string, values: unknown[] = []) => {
161
+ return normalize( router.uri(path, values) );
162
+ }
163
+ };
164
164
  };
package/src/constants.ts CHANGED
@@ -1,8 +1,8 @@
1
- const PLACEHOLDER = 0;
2
-
3
- const STATIC = 1;
4
-
5
- const WILDCARD = 2;
6
-
7
-
1
+ const PLACEHOLDER = 0;
2
+
3
+ const STATIC = 1;
4
+
5
+ const WILDCARD = 2;
6
+
7
+
8
8
  export { PLACEHOLDER, STATIC, WILDCARD };
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
- import browser from './browser';
2
- import router from './router';
3
- import slugify from './slugify';
4
-
5
-
6
- export { browser, router, slugify };
7
- export * from './types';
1
+ import browser from './browser';
2
+ import router from './router';
3
+ import slugify from './slugify';
4
+
5
+
6
+ export { browser, router, slugify };
7
+ export * from './types';