@cnrai/pave 0.11.83 → 0.11.102
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/package.json +1 -1
- package/pave.js +1 -2
- package/sandbox/permission.js +1 -1
- package/web/apple-touch-icon.png +0 -0
- package/web/assets/abnfDiagram-VCTEODGH-9I7swegc.js +0 -1
- package/web/assets/arc-DyVWQdpx.js +0 -1
- package/web/assets/architectureDiagram-5GKGNRK7-Bu33Fevc.js +0 -36
- package/web/assets/blockDiagram-NRAW4CY4-BjSrG4Gi.js +0 -129
- package/web/assets/c4Diagram-UCG6FXSJ-DKW76ufa.js +0 -38
- package/web/assets/channel-lYoL_8ok.js +0 -1
- package/web/assets/chunk-2Q5K7J3B-DWiA9qEw.js +0 -1
- package/web/assets/chunk-5VM5RSS4-BxwBK-a7.js +0 -15
- package/web/assets/chunk-F27PBJKO-55JB7WtZ.js +0 -1
- package/web/assets/chunk-G27WJ6UU-BYcYIibk.js +0 -231
- package/web/assets/chunk-JWPE2WC7-D-kqXy5w.js +0 -1
- package/web/assets/chunk-LCL6LL3I-D7ezi85E.js +0 -206
- package/web/assets/chunk-POPQ4Y6H-B-1wHMit.js +0 -1
- package/web/assets/chunk-SVP7TREG-BUGEg5xN.js +0 -88
- package/web/assets/chunk-XXDRQBXY-Cb0f4fIf.js +0 -1
- package/web/assets/classDiagram-DTDB5LWJ-C5UXAo_j.js +0 -1
- package/web/assets/classDiagram-v2-JRS7N3AN-C5UXAo_j.js +0 -1
- package/web/assets/cose-bilkent-JH36ORCC-CAWDvLIh.js +0 -1
- package/web/assets/cynefin-OW5HDTMX-Cosp1kQ3.js +0 -178
- package/web/assets/cynefinDiagram-5FMLGOSQ-DNbene_1.js +0 -62
- package/web/assets/cytoscape.esm-Dz9tvMTw.js +0 -331
- package/web/assets/dagre-3AP2YEHR-CP2z1R4J.js +0 -4
- package/web/assets/defaultLocale-DX6XiGOO.js +0 -1
- package/web/assets/diagram-S7CK7UJ4-Bq6kE3Qo.js +0 -30
- package/web/assets/diagram-UQ7AKVKN-BjhawDgz.js +0 -41
- package/web/assets/diagram-VSXAHHWV-k-uyl7kx.js +0 -3
- package/web/assets/diagram-VX7I27RA-CvQYwC6D.js +0 -24
- package/web/assets/diagram-Z3DM3KII-ClEsZ-KM.js +0 -24
- package/web/assets/ebnfDiagram-PWID7BFC-DM6ZbS6R.js +0 -1
- package/web/assets/erDiagram-SSCWMZ5O-CYaU_Nw-.js +0 -99
- package/web/assets/flowDiagram-A5DVABFB-C5Rbw9x2.js +0 -168
- package/web/assets/ganttDiagram-EL5Y4UJY-1uZXMEyg.js +0 -292
- package/web/assets/gitGraphDiagram-WWUBYQGX-Be1ZzKab.js +0 -106
- package/web/assets/index-C5qeLycK.css +0 -10
- package/web/assets/index-CV--Typp.js +0 -122
- package/web/assets/infoDiagram-RXCK75RN-C910kEri.js +0 -2
- package/web/assets/init-Gi6I4Gst.js +0 -1
- package/web/assets/ishikawaDiagram-5VMMS53U-CqIAX_4U.js +0 -70
- package/web/assets/journeyDiagram-EYS64GPL-BJH2T6Oe.js +0 -139
- package/web/assets/kanban-definition-3QL26DDD-D4MwIQqo.js +0 -89
- package/web/assets/katex-C5jXJg4s.js +0 -257
- package/web/assets/layout-E0MZ6Vxs.js +0 -1
- package/web/assets/linear-BUHqk8Cw.js +0 -1
- package/web/assets/mermaid.core-AbOCDXp6.js +0 -310
- package/web/assets/mindmap-definition-FBJOCRG2-BAJfUJuW.js +0 -96
- package/web/assets/ordinal-Cboi1Yqb.js +0 -1
- package/web/assets/ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm +0 -0
- package/web/assets/pegDiagram-XKGWAZYB-5bYvRIwo.js +0 -1
- package/web/assets/pieDiagram-E7YTZNPT-D2yDVdcL.js +0 -39
- package/web/assets/quadrantDiagram-AXDQQJYC-BnD6S8YV.js +0 -7
- package/web/assets/railroadDiagram-O6MQD6OU-DQR3NMJt.js +0 -1
- package/web/assets/requirementDiagram-EFPCY7ZU-B6ZQEd81.js +0 -84
- package/web/assets/sankeyDiagram-P5KCCOFB-gujp6WSF.js +0 -40
- package/web/assets/sequenceDiagram-WJ2MYXX4-hohjJ8lb.js +0 -162
- package/web/assets/sizeCapture-X5ZJPWSS-nn3k8g1M.js +0 -1
- package/web/assets/stateDiagram-HBIQ2CUA-k17nzvdJ.js +0 -1
- package/web/assets/stateDiagram-v2-4QOOHH4V-D5-Y44AB.js +0 -1
- package/web/assets/swimlanes-XN3QIQJK-T7GDnOeh.js +0 -1
- package/web/assets/swimlanesDiagram-VK2B7HYN-BmhKCblm.js +0 -8
- package/web/assets/timeline-definition-24CTP7MA-CrjmBowP.js +0 -120
- package/web/assets/transformers.web-aWUkeYjZ.js +0 -2896
- package/web/assets/vennDiagram-4TSXK5OY-t0JqhJnA.js +0 -34
- package/web/assets/wardleyDiagram-VM6X3IG4-DKYd1Jnq.js +0 -78
- package/web/assets/whisper-worker-Dtk1MkQa.js +0 -1
- package/web/assets/xychartDiagram-S5SC5T6Z-CH7Mipdq.js +0 -7
- package/web/assets/zh-TW-DNKt7XlL.js +0 -1
- package/web/favicon-32x32.png +0 -0
- package/web/index.html +0 -16
- package/web/manifest.json +0 -21
- package/web/pave-logo-dark.png +0 -0
- package/web/pave-logo-light.png +0 -0
- package/web/sw.js +0 -164
package/web/sw.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/* eslint-env serviceworker */
|
|
2
|
-
/**
|
|
3
|
-
* PAVE Service Worker — Web Push Notifications
|
|
4
|
-
*
|
|
5
|
-
* Handles push events for iOS Safari PWA and desktop browsers.
|
|
6
|
-
* When the app is in the background or the device is locked, the Service
|
|
7
|
-
* Worker receives the push and displays a system notification.
|
|
8
|
-
*
|
|
9
|
-
* On notification click, focuses or opens the PWA and navigates to the
|
|
10
|
-
* relevant session.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
// ─── Push Event ───────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
self.addEventListener('push', (event) => {
|
|
16
|
-
let payload;
|
|
17
|
-
try {
|
|
18
|
-
payload = event.data ? event.data.json() : {};
|
|
19
|
-
} catch (e) {
|
|
20
|
-
payload = { title: 'PAVE', body: event.data ? event.data.text() : 'New notification' };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const title = payload.title || 'PAVE';
|
|
24
|
-
const options = {
|
|
25
|
-
body: payload.body || '',
|
|
26
|
-
icon: payload.icon || '/pave-logo-light.png',
|
|
27
|
-
badge: '/pave-logo-light.png',
|
|
28
|
-
tag: payload.tag || 'pave-notification',
|
|
29
|
-
data: {
|
|
30
|
-
url: payload.url || '/',
|
|
31
|
-
sessionId: payload.sessionId || null,
|
|
32
|
-
},
|
|
33
|
-
// vibrate on mobile if supported
|
|
34
|
-
vibrate: [100],
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
event.waitUntil(
|
|
38
|
-
self.registration.showNotification(title, options),
|
|
39
|
-
);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// ─── Notification Click ───────────────────────────────────────────
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Write sessionId to IndexedDB as a backup communication channel.
|
|
46
|
-
* On iOS PWA, postMessage to a backgrounded client is lost — the page's
|
|
47
|
-
* JS thread is suspended. IndexedDB is available from the SW and persists
|
|
48
|
-
* until the page reads and clears it on visibilitychange. (#1375)
|
|
49
|
-
*/
|
|
50
|
-
function writePendingNav(sessionId) {
|
|
51
|
-
return new Promise((resolve) => {
|
|
52
|
-
if (!sessionId) return resolve();
|
|
53
|
-
try {
|
|
54
|
-
const req = indexedDB.open('pave-sw', 1);
|
|
55
|
-
req.onupgradeneeded = function () {
|
|
56
|
-
req.result.createObjectStore('pave-pending-nav');
|
|
57
|
-
};
|
|
58
|
-
req.onsuccess = function () {
|
|
59
|
-
const db = req.result;
|
|
60
|
-
const tx = db.transaction('pave-pending-nav', 'readwrite');
|
|
61
|
-
tx.objectStore('pave-pending-nav').put(sessionId, 'sessionId');
|
|
62
|
-
tx.oncomplete = function () { db.close(); resolve(); };
|
|
63
|
-
tx.onerror = function () { db.close(); resolve(); };
|
|
64
|
-
};
|
|
65
|
-
req.onerror = function () { resolve(); };
|
|
66
|
-
} catch (e) {
|
|
67
|
-
resolve(); // non-fatal
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
self.addEventListener('notificationclick', (event) => {
|
|
73
|
-
event.notification.close();
|
|
74
|
-
|
|
75
|
-
const notifData = (event.notification && event.notification.data) || {};
|
|
76
|
-
let targetUrl = notifData.url || '/';
|
|
77
|
-
const sessionId = notifData.sessionId || null;
|
|
78
|
-
|
|
79
|
-
// Issue #1208: If sessionId is present, ensure the URL targets that session.
|
|
80
|
-
// The server already includes the session in the url, but this provides
|
|
81
|
-
// a fallback in case the url was overridden or missing.
|
|
82
|
-
if (sessionId && targetUrl.indexOf('session=') === -1) {
|
|
83
|
-
targetUrl = '/?session=' + sessionId;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Resolve URL relative to the SW scope
|
|
87
|
-
if (targetUrl.charAt(0) === '/') {
|
|
88
|
-
targetUrl = self.registration.scope + targetUrl.replace(/^\//, '');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Issue #1217: Build a relaxed origin+path for matching existing clients.
|
|
92
|
-
// The exact targetUrl includes ?session= which existing client URLs won't have.
|
|
93
|
-
let targetPath;
|
|
94
|
-
try {
|
|
95
|
-
targetPath = new URL(targetUrl).pathname;
|
|
96
|
-
} catch {
|
|
97
|
-
targetPath = '/';
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
event.waitUntil(
|
|
101
|
-
// #1375: Write to IndexedDB FIRST — this is the reliable backup channel
|
|
102
|
-
// for iOS PWA where postMessage is lost on suspended pages.
|
|
103
|
-
writePendingNav(sessionId).then(() =>
|
|
104
|
-
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
|
|
105
|
-
// Issue #1217: Use relaxed URL matching — compare origin+path, not the
|
|
106
|
-
// full URL with query params. Existing client URLs rarely have ?session=.
|
|
107
|
-
for (let i = 0; i < clientList.length; i++) {
|
|
108
|
-
const client = clientList[i];
|
|
109
|
-
try {
|
|
110
|
-
const clientUrl = new URL(client.url);
|
|
111
|
-
if (clientUrl.pathname === targetPath && 'focus' in client) {
|
|
112
|
-
// Issue #1377: postMessage unconditionally — when the PWA is already
|
|
113
|
-
// foregrounded, focus() rejects (already focused) and .catch()
|
|
114
|
-
// swallows it, so postMessage inside .then() never executes.
|
|
115
|
-
// The IndexedDB path (#1375) handles the backgrounded case.
|
|
116
|
-
if (sessionId) {
|
|
117
|
-
client.postMessage({ type: 'navigate-session', sessionId });
|
|
118
|
-
}
|
|
119
|
-
return client.focus().catch(() => {});
|
|
120
|
-
}
|
|
121
|
-
} catch {
|
|
122
|
-
// URL parse failure — skip this client
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Try to find any PAVE window and navigate it
|
|
126
|
-
for (let j = 0; j < clientList.length; j++) {
|
|
127
|
-
const c = clientList[j];
|
|
128
|
-
if ('focus' in c && 'navigate' in c) {
|
|
129
|
-
c.navigate(targetUrl);
|
|
130
|
-
return c.focus().catch(() => {});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// Issue #1217: iOS Safari PWA fallback — navigate() is unavailable.
|
|
134
|
-
// postMessage the first available window to switch sessions.
|
|
135
|
-
if (sessionId && clientList.length > 0) {
|
|
136
|
-
for (let k = 0; k < clientList.length; k++) {
|
|
137
|
-
if ('focus' in clientList[k]) {
|
|
138
|
-
// Issue #1377: postMessage unconditionally (see above).
|
|
139
|
-
if (sessionId) {
|
|
140
|
-
clientList[k].postMessage({ type: 'navigate-session', sessionId });
|
|
141
|
-
}
|
|
142
|
-
return clientList[k].focus().catch(() => {});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// No existing window — open a new one
|
|
147
|
-
if (self.clients.openWindow) {
|
|
148
|
-
return self.clients.openWindow(targetUrl);
|
|
149
|
-
}
|
|
150
|
-
})),
|
|
151
|
-
);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
// ─── Install / Activate ───────────────────────────────────────────
|
|
155
|
-
|
|
156
|
-
self.addEventListener('install', (event) => {
|
|
157
|
-
// Skip waiting so the SW activates immediately on first install
|
|
158
|
-
self.skipWaiting();
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
self.addEventListener('activate', (event) => {
|
|
162
|
-
// Take control of all clients immediately
|
|
163
|
-
event.waitUntil(self.clients.claim());
|
|
164
|
-
});
|