vfsjs-test 1.0.1 → 1.0.2
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/index.html +7 -48
- package/main.js +67 -0
- package/package.json +1 -1
- package/sw.js +34 -10
package/index.html
CHANGED
|
@@ -2,61 +2,20 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
|
-
<
|
|
6
|
-
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Infrared Engine Workspace</title>
|
|
7
|
+
|
|
7
8
|
<link rel="stylesheet" href="live-theme.css">
|
|
8
9
|
</head>
|
|
9
10
|
<body style="background: #0f172a; color: #38bdf8; font-family: monospace; padding: 20px;">
|
|
10
11
|
|
|
11
|
-
<h2>Infrared
|
|
12
|
-
<div id="status" style="background: #020617; border: 1px solid #334155; padding: 15px; height:
|
|
13
|
-
>
|
|
12
|
+
<h2>Infrared VFS Operating Matrix</h2>
|
|
13
|
+
<div id="status" style="background: #020617; border: 1px solid #334155; padding: 15px; height: 180px; color: #f1f5f9; line-height: 1.6; overflow-y: auto;">
|
|
14
|
+
> Connecting decoupled operational layer...
|
|
14
15
|
</div>
|
|
15
16
|
|
|
16
17
|
<script src="index.js"></script>
|
|
17
18
|
|
|
18
|
-
<script>
|
|
19
|
-
async function bootEngine() {
|
|
20
|
-
const display = document.getElementById('status');
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
const registration = await navigator.serviceWorker.register('./sw.js', { scope: './' });
|
|
24
|
-
display.innerHTML += "<br>> Service worker registered successfully.";
|
|
25
|
-
|
|
26
|
-
if (!navigator.serviceWorker.controller) {
|
|
27
|
-
display.innerHTML += "<br>> Activating worker routing link... (Please refresh if stuck)";
|
|
28
|
-
await new Promise(r => navigator.serviceWorker.addEventListener('controllerchange', r, { once: true }));
|
|
29
|
-
}
|
|
30
|
-
display.innerHTML += "<br>> Link secured. Writing virtual assets to thread...";
|
|
31
|
-
|
|
32
|
-
const encoder = new TextEncoder();
|
|
33
|
-
|
|
34
|
-
// Match the name exactly to your tag above!
|
|
35
|
-
navigator.serviceWorker.controller.postMessage({
|
|
36
|
-
type: 'VFS_WRITE',
|
|
37
|
-
filename: 'index.js',
|
|
38
|
-
content: encoder.encode(`
|
|
39
|
-
console.log("SUCCESS: Native index.js caught by VFS!");
|
|
40
|
-
document.getElementById('status').innerHTML += "<br>> Virtual index.js execution confirmed.";
|
|
41
|
-
`)
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
navigator.serviceWorker.controller.postMessage({
|
|
45
|
-
type: 'VFS_WRITE',
|
|
46
|
-
filename: 'live-theme.css',
|
|
47
|
-
content: encoder.encode(`body { background: #011627 !important; color: #82aaff !important; }`)
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
await new Promise(r => setTimeout(r, 100));
|
|
51
|
-
display.innerHTML += "<br>> Matrix deployment complete.";
|
|
52
|
-
|
|
53
|
-
} catch (err) {
|
|
54
|
-
display.innerHTML += `<br>><span style="color: #ef4444;"> Error: ${err.message}</span>`;
|
|
55
|
-
console.error(err);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
bootEngine();
|
|
60
|
-
</script>
|
|
19
|
+
<script src="main.js"></script>
|
|
61
20
|
</body>
|
|
62
21
|
</html>
|
package/main.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// main.js - Decoupled Controller and Client API
|
|
2
|
+
const display = document.getElementById('status');
|
|
3
|
+
|
|
4
|
+
window.vfs = {
|
|
5
|
+
encoder: new TextEncoder(),
|
|
6
|
+
|
|
7
|
+
add(filename, contentString, customMime = null) {
|
|
8
|
+
if (!navigator.serviceWorker.controller) return false;
|
|
9
|
+
|
|
10
|
+
navigator.serviceWorker.controller.postMessage({
|
|
11
|
+
type: 'VFS_WRITE',
|
|
12
|
+
filename: filename,
|
|
13
|
+
content: this.encoder.encode(contentString),
|
|
14
|
+
mime: customMime
|
|
15
|
+
});
|
|
16
|
+
display.innerHTML += `<br>> VFS Added: <b>${filename}</b> ${customMime ? `[${customMime}]` : ''}`;
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
delete(filename) {
|
|
20
|
+
if (!navigator.serviceWorker.controller) return false;
|
|
21
|
+
navigator.serviceWorker.controller.postMessage({
|
|
22
|
+
type: 'VFS_DELETE',
|
|
23
|
+
filename: filename
|
|
24
|
+
});
|
|
25
|
+
display.innerHTML += `<br>> VFS Deleted: <span style="color: #ef4444;">${filename}</span>`;
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
clear() {
|
|
29
|
+
if (!navigator.serviceWorker.controller) return false;
|
|
30
|
+
navigator.serviceWorker.controller.postMessage({ type: 'VFS_CLEAR' });
|
|
31
|
+
display.innerHTML += `<br>><span style="color: #f59e0b;"> VFS Memory Completely Wiped.</span>`;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
async function bootEngine() {
|
|
36
|
+
try {
|
|
37
|
+
const registration = await navigator.serviceWorker.register('./sw.js', { scope: './' });
|
|
38
|
+
display.innerHTML += "<br>> Service worker registered successfully.";
|
|
39
|
+
|
|
40
|
+
if (!navigator.serviceWorker.controller) {
|
|
41
|
+
display.innerHTML += "<br>> Activating worker routing link... (Please refresh)";
|
|
42
|
+
await new Promise(r => navigator.serviceWorker.addEventListener('controllerchange', r, { once: true }));
|
|
43
|
+
}
|
|
44
|
+
display.innerHTML += "<br>> Link secured. Executing transaction assertions...";
|
|
45
|
+
|
|
46
|
+
// Run Verification Loop
|
|
47
|
+
vfs.add('live-theme.css', `body { background: #070a13 !important; color: #22d3ee !important; }`);
|
|
48
|
+
|
|
49
|
+
vfs.add('index.js', `
|
|
50
|
+
console.log("VFS Execute: Active out of virtual memory pipeline!");
|
|
51
|
+
document.getElementById('status').innerHTML += "<br>> Virtual index.js routing validated.";
|
|
52
|
+
`, 'text/javascript');
|
|
53
|
+
|
|
54
|
+
// Verify Delete Works
|
|
55
|
+
vfs.add('trash.js', 'console.log("drop")');
|
|
56
|
+
vfs.delete('trash.js');
|
|
57
|
+
|
|
58
|
+
await new Promise(r => setTimeout(r, 100));
|
|
59
|
+
display.innerHTML += "<br>> Matrix deployment complete.";
|
|
60
|
+
|
|
61
|
+
} catch (err) {
|
|
62
|
+
display.innerHTML += `<br>><span style="color: #ef4444;"> Error: ${err.message}</span>`;
|
|
63
|
+
console.error(err);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
bootEngine();
|
package/package.json
CHANGED
package/sw.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
// sw.js - Virtual Storage Matrix Kernel
|
|
2
|
+
const vfsStorage = new Map();
|
|
1
3
|
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
+
const defaultMimes = {
|
|
5
|
+
'js': 'text/javascript',
|
|
6
|
+
'css': 'text/css',
|
|
7
|
+
'html': 'text/html',
|
|
8
|
+
'json': 'application/json'
|
|
9
|
+
};
|
|
4
10
|
|
|
5
11
|
self.addEventListener('install', e => e.waitUntil(self.skipWaiting()));
|
|
6
12
|
self.addEventListener('activate', e => e.waitUntil(self.clients.claim()));
|
|
@@ -9,20 +15,38 @@ self.addEventListener('fetch', (event) => {
|
|
|
9
15
|
const url = new URL(event.request.url);
|
|
10
16
|
const filename = url.pathname.split('/').pop().split('?')[0];
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const content = files.get(filename);
|
|
18
|
+
if (vfsStorage.has(filename)) {
|
|
19
|
+
const fileData = vfsStorage.get(filename);
|
|
15
20
|
const ext = filename.split('.').pop().toLowerCase();
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
const contentType = fileData.mime || defaultMimes[ext] || 'application/octet-stream';
|
|
22
|
+
|
|
23
|
+
event.respondWith(new Response(fileData.content, {
|
|
18
24
|
status: 200,
|
|
19
|
-
headers: {
|
|
25
|
+
headers: {
|
|
26
|
+
'Content-Type': contentType,
|
|
27
|
+
'Access-Control-Allow-Origin': '*'
|
|
28
|
+
}
|
|
20
29
|
}));
|
|
21
30
|
}
|
|
22
31
|
});
|
|
23
32
|
|
|
24
33
|
self.addEventListener('message', (event) => {
|
|
25
|
-
if (event.data
|
|
26
|
-
|
|
34
|
+
if (!event.data || !event.data.type) return;
|
|
35
|
+
|
|
36
|
+
switch (event.data.type) {
|
|
37
|
+
case 'VFS_WRITE':
|
|
38
|
+
vfsStorage.set(event.data.filename, {
|
|
39
|
+
content: event.data.content,
|
|
40
|
+
mime: event.data.mime || null
|
|
41
|
+
});
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
case 'VFS_DELETE':
|
|
45
|
+
vfsStorage.delete(event.data.filename);
|
|
46
|
+
break;
|
|
47
|
+
|
|
48
|
+
case 'VFS_CLEAR':
|
|
49
|
+
vfsStorage.clear();
|
|
50
|
+
break;
|
|
27
51
|
}
|
|
28
52
|
});
|