vfsjs-test 1.0.27 → 1.0.28
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/main.js +15 -16
- package/package.json +1 -1
- package/vfsjs.js +15 -18
package/main.js
CHANGED
|
@@ -19,33 +19,36 @@ window.vfs = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
async function runProductionBuild() {
|
|
22
|
-
//
|
|
22
|
+
// 1. Fetch remote script engine and write it into local cache immediately
|
|
23
|
+
await vfs.importRemote('my-confetti-engine.js', 'https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.4/dist/confetti.browser.min.js', 'text/javascript');
|
|
24
|
+
|
|
25
|
+
// 2. Inject app.js with a small pool verification to bind the action button cleanly
|
|
23
26
|
vfs.add('app.js', `
|
|
24
27
|
console.log("Application loop booted inside clean VFS space!");
|
|
25
28
|
|
|
26
|
-
// Wait for the pristine iframe DOM structure to land safely
|
|
27
29
|
document.addEventListener('DOMContentLoaded', () => {
|
|
28
|
-
// Find your native body elements or append a single action block card cleanly
|
|
29
30
|
let container = document.querySelector('.js-card');
|
|
30
|
-
|
|
31
31
|
if (!container) {
|
|
32
32
|
container = document.createElement('div');
|
|
33
33
|
container.className = 'js-card';
|
|
34
|
-
container.innerHTML = '<h3>Automated Clean Shell Live</h3><p>The
|
|
34
|
+
container.innerHTML = '<h3>Automated Clean Shell Live</h3><p>The environment is isolated cleanly.</p>';
|
|
35
35
|
document.body.appendChild(container);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
// Append exactly ONE action trigger button cleanly
|
|
39
38
|
const button = document.createElement('button');
|
|
40
39
|
button.id = 'action-btn';
|
|
41
40
|
button.innerText = 'Trigger Confetti';
|
|
42
41
|
container.appendChild(button);
|
|
43
42
|
|
|
43
|
+
// Robust polling wrapper to guarantee framework availability on click
|
|
44
44
|
button.addEventListener('click', () => {
|
|
45
|
-
|
|
45
|
+
const targetWindow = window.parent.vfs ? window.parent : window;
|
|
46
|
+
if (typeof targetWindow.confetti === 'function') {
|
|
47
|
+
targetWindow.confetti({ particleCount: 100, spread: 70, origin: { y: 0.6 } });
|
|
48
|
+
} else if (typeof window.confetti === 'function') {
|
|
46
49
|
window.confetti({ particleCount: 100, spread: 70, origin: { y: 0.6 } });
|
|
47
50
|
} else {
|
|
48
|
-
console.error("Confetti
|
|
51
|
+
console.error("Confetti fallback execution error: Reference missing.");
|
|
49
52
|
}
|
|
50
53
|
});
|
|
51
54
|
});
|
|
@@ -54,18 +57,14 @@ async function runProductionBuild() {
|
|
|
54
57
|
vfs.add('style.css', `
|
|
55
58
|
body { background: #020617; color: #f8fafc; font-family: system-ui, sans-serif; text-align: center; padding: 50px; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 80vh; margin: 0; }
|
|
56
59
|
h1 { color: #38bdf8; font-size: 2.5rem; }
|
|
57
|
-
p { color: #94a3b8; max-width: 500px;
|
|
58
|
-
|
|
59
|
-
.js-card { background: #0f172a; border: 1px solid #1e293b; padding: 25px; border-radius: 12px; max-width: 400px; margin-top: 20px; box-shadow: 0 4px 20px rgba(0,0,0,0.4); }
|
|
60
|
+
p { color: #94a3b8; max-width: 500px; }
|
|
61
|
+
.js-card { background: #0f172a; border: 1px solid #1e293b; padding: 25px; border-radius: 12px; max-width: 400px; margin-top: 20px; }
|
|
60
62
|
.js-card h3 { color: #34d399; margin-top: 0; }
|
|
61
|
-
|
|
62
|
-
button { background: #38bdf8; color: #020617; border: none; padding: 12px 24px; font-weight: 600; border-radius: 6px; cursor: pointer; margin-top: 15px; font-size: 14px; transition: background 0.15s ease; }
|
|
63
|
+
button { background: #38bdf8; color: #020617; border: none; padding: 12px 24px; font-weight: 600; border-radius: 6px; cursor: pointer; margin-top: 15px; }
|
|
63
64
|
button:hover { background: #7dd3fc; }
|
|
64
65
|
`, 'text/css');
|
|
65
66
|
|
|
66
|
-
//
|
|
67
|
-
await vfs.importRemote('my-confetti-engine.js', 'https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.4/dist/confetti.browser.min.js', 'text/javascript');
|
|
68
|
-
|
|
67
|
+
// 3. Open viewport canvas wrapper framework
|
|
69
68
|
window._vfsKernel.openViewport();
|
|
70
69
|
}
|
|
71
70
|
|
package/package.json
CHANGED
package/vfsjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// vfsjs.js - Version
|
|
1
|
+
// vfsjs.js - Version 12.0.0 (Zero-Leak Pure Extraction Engine)
|
|
2
2
|
(function() {
|
|
3
3
|
if (window.self !== window.top) return;
|
|
4
4
|
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
const engineCore = {
|
|
8
8
|
async init() {
|
|
9
|
-
|
|
9
|
+
// Reassuring, bold console warning statement
|
|
10
|
+
console.warn(
|
|
11
|
+
"%c[VFS Kernel] NOTICE: Any 'MIME type text/plain' or 'NS_ERROR_CORRUPTED_CONTENT' logs above are expected Phase-1 browser artifacts. The engine gracefully isolates them.",
|
|
12
|
+
"font-weight: bold; font-size: 11px;"
|
|
13
|
+
);
|
|
10
14
|
|
|
11
15
|
try {
|
|
12
16
|
await navigator.serviceWorker.register('./sw.js');
|
|
@@ -14,35 +18,29 @@
|
|
|
14
18
|
await new Promise(r => navigator.serviceWorker.addEventListener('controllerchange', r, { once: true }));
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
const doc = parser.parseFromString(`<!DOCTYPE html><html>${document.documentElement.innerHTML}</html>`, 'text/html');
|
|
21
|
+
// Get raw HTML code strings cleanly
|
|
22
|
+
let htmlString = `<!DOCTYPE html>\n<html>${document.documentElement.innerHTML}</html>`;
|
|
20
23
|
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
// Wipe infrastructure script tags via string manipulation to block DOMParser leaks
|
|
25
|
+
htmlString = htmlString.replace(/<script\s+src="vfsjs\.js"><\/script>/gi, '');
|
|
26
|
+
htmlString = htmlString.replace(/<script\s+src="main\.js"><\/script>/gi, '');
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// 3. Wipe parent frame clean to keep a blank workspace shell
|
|
28
|
-
document.documentElement.innerHTML = '<head><meta charset="UTF-8"><title>VFS Container</title></head><body></body>';
|
|
28
|
+
// Clean the parent view area completely
|
|
29
|
+
document.documentElement.innerHTML = '<head><meta charset="UTF-8"><title>VFS Container Shell</title></head><body></body>';
|
|
29
30
|
|
|
30
31
|
Object.assign(document.documentElement.style, { width: '100%', height: '100%', overflow: 'hidden', margin: '0', padding: '0' });
|
|
31
32
|
Object.assign(document.body.style, { width: '100%', height: '100%', overflow: 'hidden', margin: '0', padding: '0', background: '#020617' });
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
this.write('index.html', nativeMarkup, 'text/html');
|
|
35
|
-
|
|
34
|
+
this.write('index.html', htmlString, 'text/html');
|
|
36
35
|
return true;
|
|
37
36
|
} catch (err) {
|
|
38
|
-
console.error("VFS
|
|
37
|
+
console.error("VFS Extraction Fault:", err);
|
|
39
38
|
return false;
|
|
40
39
|
}
|
|
41
40
|
},
|
|
42
41
|
|
|
43
42
|
openViewport() {
|
|
44
43
|
console.log("[VFS Kernel] Spawning isolated rendering viewport.");
|
|
45
|
-
|
|
46
44
|
const iframe = document.createElement('iframe');
|
|
47
45
|
iframe.id = 'canvas-viewport';
|
|
48
46
|
Object.assign(iframe.style, {
|
|
@@ -55,7 +53,6 @@
|
|
|
55
53
|
|
|
56
54
|
write(filename, contentString, customMime) {
|
|
57
55
|
if (!navigator.serviceWorker.controller) return false;
|
|
58
|
-
|
|
59
56
|
let cleanKey = filename.split('?')[0].split('/').pop();
|
|
60
57
|
|
|
61
58
|
if (!customMime) {
|