ultimate-jekyll-manager 1.0.13 → 1.0.15

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/CHANGELOG.md CHANGED
@@ -14,6 +14,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
14
14
  - `Fixed` for any bug fixes.
15
15
  - `Security` in case of vulnerabilities.
16
16
 
17
+ ---
18
+ ## [1.0.15] - 2026-03-30
19
+ ### Changed
20
+ - Bump web-manager from 4.1.32 to 4.1.33 (includes @sentry/* 10.46.0, chatsy 2.0.13)
21
+
17
22
  ---
18
23
  ## [1.0.13] - 2026-03-27
19
24
  ### Added
@@ -46,156 +46,158 @@ sitemap:
46
46
  import { initializeApp } from 'https://www.gstatic.com/firebasejs/12.11.0/firebase-app.js';
47
47
  import { getAuth, onAuthStateChanged } from 'https://www.gstatic.com/firebasejs/12.11.0/firebase-auth.js';
48
48
 
49
- const config = {{ page.resolved.web_manager.firebase.app.config | jsonify }};
50
-
51
- document.getElementById('ua').textContent = navigator.userAgent;
49
+ (async function() {
50
+ const config = {{ page.resolved.web_manager.firebase.app.config | jsonify }};
51
+
52
+ document.getElementById('ua').textContent = navigator.userAgent;
53
+
54
+ // Unregister all service workers first
55
+ if ('serviceWorker' in navigator) {
56
+ const regs = await navigator.serviceWorker.getRegistrations();
57
+ console.log(`[Setup] Found ${regs.length} service worker(s)`);
58
+ for (const reg of regs) {
59
+ const result = await reg.unregister();
60
+ console.log(`[Setup] Unregistered service worker: ${reg.scope} (success: ${result})`);
61
+ }
62
+ const swMsg = regs.length > 0
63
+ ? `Unregistered ${regs.length} service worker(s)`
64
+ : 'No service workers found';
65
+ document.getElementById('sw-status').textContent = swMsg;
66
+ document.getElementById('status').textContent = swMsg + '. Running tests...';
67
+ } else {
68
+ console.log('[Setup] Service workers not supported');
69
+ document.getElementById('sw-status').textContent = 'Service workers not supported';
70
+ }
52
71
 
53
- // Unregister all service workers first
54
- if ('serviceWorker' in navigator) {
55
- const regs = await navigator.serviceWorker.getRegistrations();
56
- console.log(`[Setup] Found ${regs.length} service worker(s)`);
57
- for (const reg of regs) {
58
- const result = await reg.unregister();
59
- console.log(`[Setup] Unregistered service worker: ${reg.scope} (success: ${result})`);
72
+ function makeLogger(id) {
73
+ const $log = document.getElementById(id + '-log');
74
+ const $box = document.getElementById(id);
75
+ return {
76
+ log: (msg) => {
77
+ console.log(`[${id}]`, msg);
78
+ $log.textContent += msg + '\n';
79
+ $log.scrollTop = $log.scrollHeight;
80
+ },
81
+ pass: () => { $box.classList.add('success'); return 'PASS'; },
82
+ fail: () => { $box.classList.add('fail'); return 'FAIL'; },
83
+ };
60
84
  }
61
- const swMsg = regs.length > 0
62
- ? `Unregistered ${regs.length} service worker(s)`
63
- : 'No service workers found';
64
- document.getElementById('sw-status').textContent = swMsg;
65
- document.getElementById('status').textContent = swMsg + '. Running tests...';
66
- } else {
67
- console.log('[Setup] Service workers not supported');
68
- document.getElementById('sw-status').textContent = 'Service workers not supported';
69
- }
70
-
71
- function makeLogger(id) {
72
- const $log = document.getElementById(id + '-log');
73
- const $box = document.getElementById(id);
74
- return {
75
- log: (msg) => {
76
- console.log(`[${id}]`, msg);
77
- $log.textContent += msg + '\n';
78
- $log.scrollTop = $log.scrollHeight;
79
- },
80
- pass: () => { $box.classList.add('success'); return 'PASS'; },
81
- fail: () => { $box.classList.add('fail'); return 'FAIL'; },
82
- };
83
- }
84
-
85
- const results = {};
86
-
87
- // REST baseline
88
- async function testRest(uid, token) {
89
- const t = makeLogger('rest');
90
- try {
91
- const url = `https://firestore.googleapis.com/v1/projects/${config.projectId}/databases/(default)/documents/users/${uid}`;
92
- t.log('Fetching via REST...');
93
- const res = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` } });
94
- t.log(`Status: ${res.status}`);
95
- if (res.ok) {
96
- const data = await res.json();
97
- t.log('SUCCESS');
98
- results['REST'] = t.pass();
99
- } else {
100
- const text = await res.text();
101
- t.log('ERROR: ' + text.substring(0, 150));
102
- results['REST'] = t.fail();
103
- }
104
- } catch (e) { t.log('ERROR: ' + e.message); results['REST'] = t.fail(); }
105
- }
106
85
 
107
- // Generic version test using dynamic import
108
- async function testVersion(id, version, uid, useLP) {
109
- const t = makeLogger(id);
110
- try {
111
- const label = useLP ? 'initializeFirestore+forceLongPolling' : 'getFirestore';
112
- t.log(`Loading Firebase ${version}...`);
86
+ const results = {};
113
87
 
114
- const appMod = await import(`https://www.gstatic.com/firebasejs/${version}/firebase-app.js`);
115
- const fsMod = await import(`https://www.gstatic.com/firebasejs/${version}/firebase-firestore.js`);
88
+ // REST baseline
89
+ async function testRest(uid, token) {
90
+ const t = makeLogger('rest');
91
+ try {
92
+ const url = `https://firestore.googleapis.com/v1/projects/${config.projectId}/databases/(default)/documents/users/${uid}`;
93
+ t.log('Fetching via REST...');
94
+ const res = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` } });
95
+ t.log(`Status: ${res.status}`);
96
+ if (res.ok) {
97
+ const data = await res.json();
98
+ t.log('SUCCESS');
99
+ results['REST'] = t.pass();
100
+ } else {
101
+ const text = await res.text();
102
+ t.log('ERROR: ' + text.substring(0, 150));
103
+ results['REST'] = t.fail();
104
+ }
105
+ } catch (e) { t.log('ERROR: ' + e.message); results['REST'] = t.fail(); }
106
+ }
116
107
 
117
- const appName = id;
118
- let app;
108
+ // Generic version test using dynamic import
109
+ async function testVersion(id, version, uid, useLP) {
110
+ const t = makeLogger(id);
119
111
  try {
120
- app = appMod.initializeApp(config, appName);
112
+ const label = useLP ? 'initializeFirestore+forceLongPolling' : 'getFirestore';
113
+ t.log(`Loading Firebase ${version}...`);
114
+
115
+ const appMod = await import(`https://www.gstatic.com/firebasejs/${version}/firebase-app.js`);
116
+ const fsMod = await import(`https://www.gstatic.com/firebasejs/${version}/firebase-firestore.js`);
117
+
118
+ const appName = id;
119
+ let app;
120
+ try {
121
+ app = appMod.initializeApp(config, appName);
122
+ } catch (e) {
123
+ app = appMod.getApp(appName);
124
+ }
125
+
126
+ let db;
127
+ if (useLP) {
128
+ t.log(`initializeFirestore + experimentalForceLongPolling...`);
129
+ db = fsMod.initializeFirestore(app, { experimentalForceLongPolling: true });
130
+ } else {
131
+ t.log(`getFirestore...`);
132
+ db = fsMod.getFirestore(app);
133
+ }
134
+
135
+ t.log(`Fetching users/${uid} (10s timeout)...`);
136
+
137
+ // Race against a timeout
138
+ const fetchPromise = fsMod.getDoc(fsMod.doc(db, 'users', uid));
139
+ const timeoutPromise = new Promise((_, reject) =>
140
+ setTimeout(() => reject(new Error('TIMEOUT after 10s')), 10000)
141
+ );
142
+
143
+ const snap = await Promise.race([fetchPromise, timeoutPromise]);
144
+
145
+ if (snap.exists()) {
146
+ t.log('SUCCESS: ' + JSON.stringify(snap.data()).substring(0, 100));
147
+ results[id] = t.pass();
148
+ } else {
149
+ t.log('Doc not found');
150
+ results[id] = t.fail();
151
+ }
121
152
  } catch (e) {
122
- app = appMod.getApp(appName);
123
- }
124
-
125
- let db;
126
- if (useLP) {
127
- t.log(`initializeFirestore + experimentalForceLongPolling...`);
128
- db = fsMod.initializeFirestore(app, { experimentalForceLongPolling: true });
129
- } else {
130
- t.log(`getFirestore...`);
131
- db = fsMod.getFirestore(app);
132
- }
133
-
134
- t.log(`Fetching users/${uid} (10s timeout)...`);
135
-
136
- // Race against a timeout
137
- const fetchPromise = fsMod.getDoc(fsMod.doc(db, 'users', uid));
138
- const timeoutPromise = new Promise((_, reject) =>
139
- setTimeout(() => reject(new Error('TIMEOUT after 10s')), 10000)
140
- );
141
-
142
- const snap = await Promise.race([fetchPromise, timeoutPromise]);
143
-
144
- if (snap.exists()) {
145
- t.log('SUCCESS: ' + JSON.stringify(snap.data()).substring(0, 100));
146
- results[id] = t.pass();
147
- } else {
148
- t.log('Doc not found');
149
- results[id] = t.fail();
150
- }
151
- } catch (e) {
152
- const code = e.code || '';
153
- if (code === 'permission-denied') {
154
- t.log('TRANSPORT OK (permission-denied = network works, just no auth)');
155
- results[id] = t.pass();
156
- } else {
157
- t.log(`ERROR: ${code} ${e.message}`);
158
- results[id] = t.fail();
153
+ const code = e.code || '';
154
+ if (code === 'permission-denied') {
155
+ t.log('TRANSPORT OK (permission-denied = network works, just no auth)');
156
+ results[id] = t.pass();
157
+ } else {
158
+ t.log(`ERROR: ${code} ${e.message}`);
159
+ results[id] = t.fail();
160
+ }
159
161
  }
160
162
  }
161
- }
162
163
 
163
- // Main
164
- const defaultApp = initializeApp(config);
165
- const auth = getAuth(defaultApp);
164
+ // Main
165
+ const defaultApp = initializeApp(config);
166
+ const auth = getAuth(defaultApp);
166
167
 
167
- onAuthStateChanged(auth, async (user) => {
168
- if (!user) {
169
- document.getElementById('status').textContent = 'Not signed in. Sign in at /dashboard first.';
170
- return;
171
- }
168
+ onAuthStateChanged(auth, async (user) => {
169
+ if (!user) {
170
+ document.getElementById('status').textContent = 'Not signed in. Sign in at /dashboard first.';
171
+ return;
172
+ }
172
173
 
173
- const uid = user.uid;
174
- const token = await user.getIdToken();
175
- document.getElementById('status').textContent = `Signed in: ${uid}. Running tests...`;
176
-
177
- // Run REST first
178
- await testRest(uid, token);
179
-
180
- // Run version tests (sequential to avoid interference)
181
- await testVersion('v10', '10.14.0', uid, false);
182
- await testVersion('v10lp', '10.14.0', uid, true);
183
- await testVersion('v11', '11.0.0', uid, false);
184
- await testVersion('v11lp', '11.0.0', uid, true);
185
- await testVersion('v12_0', '12.0.0', uid, false);
186
- await testVersion('v12_0lp', '12.0.0', uid, true);
187
- await testVersion('v12_11', '12.11.0', uid, false);
188
- await testVersion('v12_11lp', '12.11.0', uid, true);
189
-
190
- // Show summary
191
- document.getElementById('status').textContent = 'All tests complete.';
192
- const $summary = document.getElementById('summary');
193
- $summary.style.display = 'block';
194
- $summary.innerHTML = '<h2 style="margin-bottom:8px">Results Summary</h2>' +
195
- Object.entries(results).map(([k, v]) =>
196
- `<div style="color:${v === 'PASS' ? '#0f0' : '#f00'}">${v}: ${k}</div>`
197
- ).join('');
198
- });
174
+ const uid = user.uid;
175
+ const token = await user.getIdToken();
176
+ document.getElementById('status').textContent = `Signed in: ${uid}. Running tests...`;
177
+
178
+ // Run REST first
179
+ await testRest(uid, token);
180
+
181
+ // Run version tests (sequential to avoid interference)
182
+ await testVersion('v10', '10.14.0', uid, false);
183
+ await testVersion('v10lp', '10.14.0', uid, true);
184
+ await testVersion('v11', '11.0.0', uid, false);
185
+ await testVersion('v11lp', '11.0.0', uid, true);
186
+ await testVersion('v12_0', '12.0.0', uid, false);
187
+ await testVersion('v12_0lp', '12.0.0', uid, true);
188
+ await testVersion('v12_11', '12.11.0', uid, false);
189
+ await testVersion('v12_11lp', '12.11.0', uid, true);
190
+
191
+ // Show summary
192
+ document.getElementById('status').textContent = 'All tests complete.';
193
+ const $summary = document.getElementById('summary');
194
+ $summary.style.display = 'block';
195
+ $summary.innerHTML = '<h2 style="margin-bottom:8px">Results Summary</h2>' +
196
+ Object.entries(results).map(([k, v]) =>
197
+ `<div style="color:${v === 'PASS' ? '#0f0' : '#f00'}">${v}: ${k}</div>`
198
+ ).join('');
199
+ });
200
+ })();
199
201
  </script>
200
202
  </body>
201
203
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -104,7 +104,7 @@
104
104
  "sass": "^1.98.0",
105
105
  "spellchecker": "^3.7.1",
106
106
  "through2": "^4.0.2",
107
- "web-manager": "^4.1.32",
107
+ "web-manager": "^4.1.33",
108
108
  "webpack": "^5.105.4",
109
109
  "wonderful-fetch": "^2.0.4",
110
110
  "wonderful-version": "^1.3.2",