vfsjs-test 1.0.0 → 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.
Files changed (4) hide show
  1. package/index.html +8 -54
  2. package/main.js +67 -0
  3. package/package.json +1 -1
  4. package/sw.js +34 -10
package/index.html CHANGED
@@ -2,66 +2,20 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <title>Infrared GitHack VFS Engine</title>
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 Native Network Pipeline</h2>
12
- <div id="status" style="background: #020617; border: 1px solid #334155; padding: 15px; height: 120px; color: #f1f5f9; line-height: 1.6;">
13
- > Initializing same-origin network worker...
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
- <script src="live-alert.js"></script>
17
-
18
- <script>
19
- async function bootEngine() {
20
- const display = document.getElementById('status');
21
-
22
- try {
23
- // Since index.html and sw.js live in the same repo, we can use a relative path!
24
- // This completely bypasses the Same-Origin Policy check in Firefox.
25
- const registration = await navigator.serviceWorker.register('./sw.js', { scope: './' });
26
- display.innerHTML += "<br>> Service worker registered successfully.";
27
-
28
- // Wait until the Service Worker has complete control of the page
29
- if (!navigator.serviceWorker.controller) {
30
- display.innerHTML += "<br>> Activating worker routing link... (Please refresh if stuck)";
31
- await new Promise(r => navigator.serviceWorker.addEventListener('controllerchange', r, { once: true }));
32
- }
33
- display.innerHTML += "<br>> Link secured. Writing virtual assets to thread...";
34
-
35
- // 3. Write your assets directly into the active worker's virtual RAM
36
- const encoder = new TextEncoder();
37
-
38
- navigator.serviceWorker.controller.postMessage({
39
- type: 'VFS_WRITE',
40
- filename: 'live-theme.css',
41
- content: encoder.encode(`body { background: #011627 !important; color: #82aaff !important; }`)
42
- });
43
-
44
- navigator.serviceWorker.controller.postMessage({
45
- type: 'VFS_WRITE',
46
- filename: 'live-alert.js',
47
- content: encoder.encode(`
48
- console.log("SUCCESS: Native script tag caught by Service Worker intercept loop!");
49
- document.getElementById('status').innerHTML += "<br>> Virtual script execution confirmed.";
50
- `)
51
- });
52
-
53
- // Give the worker a tiny fraction of a second to map the files
54
- await new Promise(r => setTimeout(r, 100));
55
-
56
- display.innerHTML += "<br>> Matrix deployment complete.";
57
-
58
- } catch (err) {
59
- display.innerHTML += `<br>><span style="color: #ef4444;"> Error: ${err.message}</span>`;
60
- console.error(err);
61
- }
62
- }
17
+ <script src="index.js"></script>
63
18
 
64
- bootEngine();
65
- </script>
19
+ <script src="main.js"></script>
66
20
  </body>
67
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vfsjs-test",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "",
5
5
  "main": "index.html",
6
6
  "scripts": {
package/sw.js CHANGED
@@ -1,6 +1,12 @@
1
+ // sw.js - Virtual Storage Matrix Kernel
2
+ const vfsStorage = new Map();
1
3
 
2
- const files = new Map();
3
- const defaultMimes = { 'js': 'text/javascript', 'css': 'text/css', 'html': 'text/html' };
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
- // Intercept matching virtual files from local memory
13
- if (files.has(filename)) {
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
- event.respondWith(new Response(content, {
21
+ const contentType = fileData.mime || defaultMimes[ext] || 'application/octet-stream';
22
+
23
+ event.respondWith(new Response(fileData.content, {
18
24
  status: 200,
19
- headers: { 'Content-Type': defaultMimes[ext] || 'application/octet-stream' }
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 && event.data.type === 'VFS_WRITE') {
26
- files.set(event.data.filename, event.data.content);
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
  });