hzl-web 2.1.0 → 2.2.0
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/dist/server.d.ts.map +1 -1
- package/dist/server.js +110 -8
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +82 -0
- package/dist/server.test.js.map +1 -1
- package/dist/ui/apple-touch-icon.png +0 -0
- package/dist/ui/favicon-96x96.png +0 -0
- package/dist/ui/favicon.ico +0 -0
- package/dist/ui/index.html +887 -100
- package/dist/ui/site.webmanifest +25 -0
- package/dist/ui/sw.js +76 -0
- package/dist/ui/web-app-manifest-192x192.png +0 -0
- package/dist/ui/web-app-manifest-512x512.png +0 -0
- package/dist/ui-embed.d.ts +7 -0
- package/dist/ui-embed.d.ts.map +1 -1
- package/dist/ui-embed.js +21 -7
- package/dist/ui-embed.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "/",
|
|
3
|
+
"name": "HZL",
|
|
4
|
+
"short_name": "HZL",
|
|
5
|
+
"description": "HZL task dashboard",
|
|
6
|
+
"start_url": "/",
|
|
7
|
+
"scope": "/",
|
|
8
|
+
"icons": [
|
|
9
|
+
{
|
|
10
|
+
"src": "/web-app-manifest-192x192.png",
|
|
11
|
+
"sizes": "192x192",
|
|
12
|
+
"type": "image/png",
|
|
13
|
+
"purpose": "maskable"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"src": "/web-app-manifest-512x512.png",
|
|
17
|
+
"sizes": "512x512",
|
|
18
|
+
"type": "image/png",
|
|
19
|
+
"purpose": "maskable"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"theme_color": "#1a1a1a",
|
|
23
|
+
"background_color": "#1a1a1a",
|
|
24
|
+
"display": "standalone"
|
|
25
|
+
}
|
package/dist/ui/sw.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const CACHE_VERSION = 'hzl-shell-v2';
|
|
2
|
+
const SHELL_CACHE = CACHE_VERSION;
|
|
3
|
+
const SHELL_ASSETS = [
|
|
4
|
+
'/',
|
|
5
|
+
'/site.webmanifest',
|
|
6
|
+
'/favicon-96x96.png',
|
|
7
|
+
'/favicon.ico',
|
|
8
|
+
'/apple-touch-icon.png',
|
|
9
|
+
'/web-app-manifest-192x192.png',
|
|
10
|
+
'/web-app-manifest-512x512.png',
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
self.addEventListener('install', (event) => {
|
|
14
|
+
event.waitUntil(
|
|
15
|
+
caches.open(SHELL_CACHE).then((cache) => {
|
|
16
|
+
return cache.addAll(SHELL_ASSETS);
|
|
17
|
+
})
|
|
18
|
+
);
|
|
19
|
+
self.skipWaiting();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
self.addEventListener('activate', (event) => {
|
|
23
|
+
event.waitUntil(
|
|
24
|
+
caches.keys().then((keys) =>
|
|
25
|
+
Promise.all(
|
|
26
|
+
keys
|
|
27
|
+
.filter((key) => key !== SHELL_CACHE)
|
|
28
|
+
.map((key) => caches.delete(key))
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
);
|
|
32
|
+
self.clients.claim();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
self.addEventListener('fetch', (event) => {
|
|
36
|
+
const request = event.request;
|
|
37
|
+
if (request.method !== 'GET') {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const url = new URL(request.url);
|
|
42
|
+
if (url.origin !== self.location.origin) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (url.pathname.startsWith('/api/')) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (request.mode === 'navigate') {
|
|
51
|
+
event.respondWith(
|
|
52
|
+
fetch(request).catch(async () => {
|
|
53
|
+
const cached = await caches.match('/');
|
|
54
|
+
if (cached) return cached;
|
|
55
|
+
throw new Error('Offline and no cached dashboard shell');
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
event.respondWith(
|
|
62
|
+
caches.match(request).then((cached) => {
|
|
63
|
+
if (cached) return cached;
|
|
64
|
+
|
|
65
|
+
return fetch(request).then((response) => {
|
|
66
|
+
if (!response || response.status !== 200) {
|
|
67
|
+
return response;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const clone = response.clone();
|
|
71
|
+
caches.open(SHELL_CACHE).then((cache) => cache.put(request, clone));
|
|
72
|
+
return response;
|
|
73
|
+
});
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
});
|
|
Binary file
|
|
Binary file
|
package/dist/ui-embed.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
export declare const DASHBOARD_HTML: string;
|
|
2
|
+
export declare const DASHBOARD_SITE_MANIFEST: string;
|
|
3
|
+
export declare const DASHBOARD_SERVICE_WORKER: string;
|
|
4
|
+
export declare const DASHBOARD_FAVICON_PNG_96: Buffer<ArrayBufferLike>;
|
|
5
|
+
export declare const DASHBOARD_FAVICON_ICO: Buffer<ArrayBufferLike>;
|
|
6
|
+
export declare const DASHBOARD_APPLE_TOUCH_ICON: Buffer<ArrayBufferLike>;
|
|
7
|
+
export declare const DASHBOARD_WEB_APP_ICON_192: Buffer<ArrayBufferLike>;
|
|
8
|
+
export declare const DASHBOARD_WEB_APP_ICON_512: Buffer<ArrayBufferLike>;
|
|
2
9
|
//# sourceMappingURL=ui-embed.d.ts.map
|
package/dist/ui-embed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-embed.d.ts","sourceRoot":"","sources":["../src/ui-embed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui-embed.d.ts","sourceRoot":"","sources":["../src/ui-embed.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,cAAc,QAA2B,CAAC;AACvD,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AACtE,eAAO,MAAM,wBAAwB,QAAsB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,yBAAoC,CAAC;AAC1E,eAAO,MAAM,qBAAqB,yBAA8B,CAAC;AACjE,eAAO,MAAM,0BAA0B,yBAAuC,CAAC;AAC/E,eAAO,MAAM,0BAA0B,yBAA+C,CAAC;AACvF,eAAO,MAAM,0BAA0B,yBAA+C,CAAC"}
|
package/dist/ui-embed.js
CHANGED
|
@@ -1,24 +1,38 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
1
|
+
import { accessSync, readFileSync } from 'fs';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
import { dirname, join } from 'path';
|
|
4
4
|
const __filename = fileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = dirname(__filename);
|
|
6
6
|
// In development, read from source. In production, this will be the dist folder.
|
|
7
7
|
// For dev, we try the src folder first, then fall back to the build location.
|
|
8
|
-
function
|
|
8
|
+
function resolveUiPath(relativePath) {
|
|
9
9
|
const paths = [
|
|
10
|
-
join(__dirname, 'ui',
|
|
11
|
-
join(__dirname, '..', 'src', 'ui',
|
|
10
|
+
join(__dirname, 'ui', relativePath), // dist/ui/* (prod)
|
|
11
|
+
join(__dirname, '..', 'src', 'ui', relativePath), // src/ui/* (dev from dist)
|
|
12
12
|
];
|
|
13
13
|
for (const p of paths) {
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
accessSync(p);
|
|
16
|
+
return p;
|
|
16
17
|
}
|
|
17
18
|
catch {
|
|
18
19
|
// Try next path
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
throw new Error(
|
|
22
|
+
throw new Error(`Could not find ${relativePath} - checked: ${paths.join(', ')}`);
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
function loadUiText(relativePath) {
|
|
25
|
+
return readFileSync(resolveUiPath(relativePath), 'utf-8');
|
|
26
|
+
}
|
|
27
|
+
function loadUiBinary(relativePath) {
|
|
28
|
+
return readFileSync(resolveUiPath(relativePath));
|
|
29
|
+
}
|
|
30
|
+
export const DASHBOARD_HTML = loadUiText('index.html');
|
|
31
|
+
export const DASHBOARD_SITE_MANIFEST = loadUiText('site.webmanifest');
|
|
32
|
+
export const DASHBOARD_SERVICE_WORKER = loadUiText('sw.js');
|
|
33
|
+
export const DASHBOARD_FAVICON_PNG_96 = loadUiBinary('favicon-96x96.png');
|
|
34
|
+
export const DASHBOARD_FAVICON_ICO = loadUiBinary('favicon.ico');
|
|
35
|
+
export const DASHBOARD_APPLE_TOUCH_ICON = loadUiBinary('apple-touch-icon.png');
|
|
36
|
+
export const DASHBOARD_WEB_APP_ICON_192 = loadUiBinary('web-app-manifest-192x192.png');
|
|
37
|
+
export const DASHBOARD_WEB_APP_ICON_512 = loadUiBinary('web-app-manifest-512x512.png');
|
|
24
38
|
//# sourceMappingURL=ui-embed.js.map
|
package/dist/ui-embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-embed.js","sourceRoot":"","sources":["../src/ui-embed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-embed.js","sourceRoot":"","sources":["../src/ui-embed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,iFAAiF;AACjF,8EAA8E;AAC9E,SAAS,aAAa,CAAC,YAAoB;IACzC,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,mBAAmB;QACxD,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,2BAA2B;KAC9E,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,YAAoB;IACtC,OAAO,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hzl-web",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Web dashboard for HZL - A Kanban-style task monitoring UI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"visualization"
|
|
53
53
|
],
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"hzl-core": "2.
|
|
55
|
+
"hzl-core": "2.2.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/node": "^25.2.1",
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "tsc -b && cp -r src/ui dist/",
|
|
65
65
|
"test": "vitest run",
|
|
66
|
+
"test:ci": "vitest run --coverage",
|
|
66
67
|
"test:watch": "vitest"
|
|
67
68
|
}
|
|
68
69
|
}
|