application.ts 1.0.3 → 1.0.4
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/README.md
CHANGED
|
@@ -154,10 +154,16 @@ export class MyComponent extends AppView {
|
|
|
154
154
|
Wrap views with shared layouts:
|
|
155
155
|
|
|
156
156
|
```typescript
|
|
157
|
+
import { DefaultLayout } from './layouts/default.layout';
|
|
158
|
+
|
|
159
|
+
// Register and set default layout
|
|
160
|
+
app.registerLayout('default', DefaultLayout);
|
|
161
|
+
app.setDefaultLayout('default');
|
|
162
|
+
|
|
163
|
+
// Or specify layout per route
|
|
157
164
|
app.router
|
|
158
165
|
.map('/', HomeView)
|
|
159
|
-
.map('/about', AboutView)
|
|
160
|
-
.setLayout(DefaultLayout);
|
|
166
|
+
.map('/about', AboutView, { meta: { layout: 'default' } });
|
|
161
167
|
```
|
|
162
168
|
|
|
163
169
|
### 🎯 View Lifecycle
|
|
@@ -317,12 +323,20 @@ app.start() // Start the application
|
|
|
317
323
|
|
|
318
324
|
```typescript
|
|
319
325
|
router.map(path: string, view: typeof AppView, options?: RouteOptions)
|
|
320
|
-
router.setLayout(layout: typeof AppView)
|
|
321
326
|
router.notFound(view: typeof AppView)
|
|
322
327
|
router.navigate(path: string)
|
|
323
328
|
router.start()
|
|
324
329
|
```
|
|
325
330
|
|
|
331
|
+
### App
|
|
332
|
+
|
|
333
|
+
```typescript
|
|
334
|
+
app.registerLayout(handler: string, layoutClass: typeof AppView)
|
|
335
|
+
app.setDefaultLayout(handler: string)
|
|
336
|
+
app.registerView(handler: string, viewClass: typeof AppView)
|
|
337
|
+
app.start()
|
|
338
|
+
```
|
|
339
|
+
|
|
326
340
|
### AppView
|
|
327
341
|
|
|
328
342
|
```typescript
|
|
@@ -42,7 +42,7 @@ export declare class Router extends EventTarget {
|
|
|
42
42
|
start(): void;
|
|
43
43
|
/**
|
|
44
44
|
* Navigate to a specific path
|
|
45
|
-
* @param path - The path to navigate to (relative to basePath)
|
|
45
|
+
* @param path - The path to navigate to (relative to basePath), can include query string
|
|
46
46
|
* @param replaceState - If true, replaces current history entry instead of pushing
|
|
47
47
|
*/
|
|
48
48
|
navigate(path: string, replaceState?: boolean): Promise<void>;
|
|
@@ -89,4 +89,10 @@ export declare class Router extends EventTarget {
|
|
|
89
89
|
* @returns The generated URL (with basePath) or null if route not found
|
|
90
90
|
*/
|
|
91
91
|
generateUrl(path: string, params?: RouteParams): string | null;
|
|
92
|
+
/**
|
|
93
|
+
* Parse query string parameters from URL
|
|
94
|
+
* @param search - The query string (e.g., '?code=123&state=abc')
|
|
95
|
+
* @returns Object with query parameters
|
|
96
|
+
*/
|
|
97
|
+
private parseQueryParams;
|
|
92
98
|
}
|
|
@@ -22,7 +22,7 @@ export class Router extends EventTarget {
|
|
|
22
22
|
const link = target.closest('a[href]');
|
|
23
23
|
if (link && link.href.startsWith(window.location.origin) && !link.hasAttribute('target')) {
|
|
24
24
|
e.preventDefault();
|
|
25
|
-
this.navigate(link.pathname);
|
|
25
|
+
this.navigate(link.pathname + link.search);
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
28
|
}
|
|
@@ -91,21 +91,27 @@ export class Router extends EventTarget {
|
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
93
|
* Navigate to a specific path
|
|
94
|
-
* @param path - The path to navigate to (relative to basePath)
|
|
94
|
+
* @param path - The path to navigate to (relative to basePath), can include query string
|
|
95
95
|
* @param replaceState - If true, replaces current history entry instead of pushing
|
|
96
96
|
*/
|
|
97
97
|
async navigate(path, replaceState = false) {
|
|
98
|
+
// Split path and query string
|
|
99
|
+
const [pathPart, queryPart] = path.split('?');
|
|
98
100
|
// Strip basePath if present to get route path
|
|
99
|
-
const routePath = this.stripBasePath(
|
|
101
|
+
const routePath = this.stripBasePath(pathPart);
|
|
100
102
|
// Find matching route
|
|
101
103
|
const match = this.findRoute(routePath);
|
|
102
104
|
if (!match) {
|
|
103
105
|
this.emitNotFound(routePath);
|
|
104
106
|
return;
|
|
105
107
|
}
|
|
106
|
-
const { route, handler, params } = match;
|
|
107
|
-
//
|
|
108
|
-
const
|
|
108
|
+
const { route, handler, params: pathParams } = match;
|
|
109
|
+
// Parse query string parameters
|
|
110
|
+
const queryParams = this.parseQueryParams(queryPart || '');
|
|
111
|
+
// Merge path params and query params (query params can override path params)
|
|
112
|
+
const allParams = { ...pathParams, ...queryParams };
|
|
113
|
+
// Check route guard with merged params
|
|
114
|
+
const guardResult = await route.canEnter(allParams);
|
|
109
115
|
if (guardResult === false) {
|
|
110
116
|
// Navigation denied
|
|
111
117
|
console.warn(`Navigation to ${path} was denied by route guard`);
|
|
@@ -117,7 +123,7 @@ export class Router extends EventTarget {
|
|
|
117
123
|
return;
|
|
118
124
|
}
|
|
119
125
|
// Add basePath to create full URL
|
|
120
|
-
const fullPath = this.addBasePath(routePath);
|
|
126
|
+
const fullPath = this.addBasePath(routePath) + (queryPart ? '?' + queryPart : '');
|
|
121
127
|
// Update browser history
|
|
122
128
|
if (replaceState) {
|
|
123
129
|
window.history.replaceState({ path: fullPath }, '', fullPath);
|
|
@@ -125,8 +131,8 @@ export class Router extends EventTarget {
|
|
|
125
131
|
else {
|
|
126
132
|
window.history.pushState({ path: fullPath }, '', fullPath);
|
|
127
133
|
}
|
|
128
|
-
// Emit navigation event for Application.ts to handle
|
|
129
|
-
this.emitNavigation(routePath,
|
|
134
|
+
// Emit navigation event for Application.ts to handle with merged params
|
|
135
|
+
this.emitNavigation(routePath, allParams, handler, route.options.meta);
|
|
130
136
|
}
|
|
131
137
|
/**
|
|
132
138
|
* Get the current path (route pattern)
|
|
@@ -164,7 +170,8 @@ export class Router extends EventTarget {
|
|
|
164
170
|
*/
|
|
165
171
|
async handleRouteChange() {
|
|
166
172
|
const routePath = this.stripBasePath(window.location.pathname);
|
|
167
|
-
|
|
173
|
+
const fullPath = routePath + window.location.search;
|
|
174
|
+
await this.navigate(fullPath, true);
|
|
168
175
|
}
|
|
169
176
|
/**
|
|
170
177
|
* Strip base path from a full path
|
|
@@ -242,5 +249,26 @@ export class Router extends EventTarget {
|
|
|
242
249
|
const routePath = routeEntry.route.generate(params);
|
|
243
250
|
return this.addBasePath(routePath);
|
|
244
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Parse query string parameters from URL
|
|
254
|
+
* @param search - The query string (e.g., '?code=123&state=abc')
|
|
255
|
+
* @returns Object with query parameters
|
|
256
|
+
*/
|
|
257
|
+
parseQueryParams(search) {
|
|
258
|
+
const params = {};
|
|
259
|
+
if (!search || search.length <= 1) {
|
|
260
|
+
return params;
|
|
261
|
+
}
|
|
262
|
+
// Remove leading '?' if present
|
|
263
|
+
const queryString = search.startsWith('?') ? search.slice(1) : search;
|
|
264
|
+
// Parse each parameter
|
|
265
|
+
queryString.split('&').forEach(param => {
|
|
266
|
+
const [key, value] = param.split('=');
|
|
267
|
+
if (key) {
|
|
268
|
+
params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
return params;
|
|
272
|
+
}
|
|
245
273
|
}
|
|
246
274
|
//# sourceMappingURL=router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/navigation/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,MAAO,SAAQ,WAAW;IASnC;QACI,KAAK,EAAE,CAAC;QATJ,WAAM,GAAyD,IAAI,GAAG,EAAE,CAAC;QAEzE,kBAAa,GAAY,KAAK,CAAC;QAC/B,aAAQ,GAAW,EAAE,CAAC;QACtB,iBAAY,GAAW,GAAG,CAAC;QAC3B,mBAAc,GAAgB,EAAE,CAAC;QAMrC,oDAAoD;QACpD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,mDAAmD;QACnD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAsB,CAAC;YAE5D,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvF,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/navigation/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Route parameters extracted from URL path
|
|
2
|
+
* Route parameters extracted from URL path and query string
|
|
3
|
+
* Path params come from :param patterns in routes
|
|
4
|
+
* Query params come from ?key=value in the URL
|
|
3
5
|
*/
|
|
4
6
|
export type RouteParams = Record<string, string>;
|
|
5
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"AAmEA;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,eAAe,EAAE,mBAAmB;IACpC,QAAQ,EAAE,qBAAqB;IAC/B,SAAS,EAAE,qBAAqB;CAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "application.ts",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Simplified Web SPA app framework with vanilla JavaScript and CSS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -65,12 +65,13 @@
|
|
|
65
65
|
"template.ts": "^2.0.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
+
"@types/node": "^22.0.0",
|
|
68
69
|
"@typescript-eslint/eslint-plugin": "^8.18.0",
|
|
69
70
|
"@typescript-eslint/parser": "^8.18.0",
|
|
70
|
-
"
|
|
71
|
+
"eslint": "^8.57.0",
|
|
72
|
+
"terser": "^5.44.1",
|
|
71
73
|
"typescript": "^5.9.3",
|
|
72
|
-
"vite": "^7.2.4"
|
|
73
|
-
"eslint": "^8.57.0"
|
|
74
|
+
"vite": "^7.2.4"
|
|
74
75
|
},
|
|
75
76
|
"eslintConfig": {
|
|
76
77
|
"extends": [
|