@tomjs/vscode-extension-webview
Version:
When using 'webview.html' in vscode extension development, 'HMR' of vue/react is supported.
79 lines (77 loc) • 2.75 kB
JavaScript
;
(() => {
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
// src/client.ts
var require_client = __commonJS({
"src/client.ts"() {
if (window.top === window.self) {
return;
}
var TAG = "[@tomjs:vscode:client] ";
patchAcquireVsCodeApi();
function onDomReady(callback) {
if (document.readyState === "interactive" || document.readyState === "complete") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
}
function patchInitData(data) {
onDomReady(() => {
console.log(TAG, "patch client style");
const { style, body, root } = data;
document.documentElement.style.cssText = root.cssText;
document.body.className = body.className;
Object.keys(body.dataset).forEach((key) => {
document.body.dataset[key] = body.dataset[key];
});
const defaultStyles = document.createElement("style");
defaultStyles.id = "_defaultStyles";
defaultStyles.textContent = style;
document.head.appendChild(defaultStyles);
});
}
var POST_MESSAGE_TYPE = "[vscode:client]:postMessage";
function patchAcquireVsCodeApi() {
class AcquireVsCodeApi {
postMessage(message) {
console.log(TAG, "mock acquireVsCodeApi.postMessage:", message);
window.parent.postMessage({ type: POST_MESSAGE_TYPE, data: message }, "*");
}
getState() {
console.log(TAG, "mock acquireVsCodeApi.getState");
const state = sessionStorage.getItem("vscodeState");
return state ? JSON.parse(state) : void 0;
}
setState(newState) {
console.log(TAG, "mock acquireVsCodeApi.setState:", newState);
sessionStorage.setItem("vscodeState", JSON.stringify(newState));
return newState;
}
}
console.log(TAG, "patch acquireVsCodeApi");
let api;
window.acquireVsCodeApi = () => {
if (!api) {
api = new AcquireVsCodeApi();
return api;
} else {
return api;
}
};
}
var INIT_TYPE = "[vscode:extension]:init";
window.addEventListener("message", (e) => {
const { type, data } = e.data || {};
if (!e.origin.startsWith("vscode-webview://") || type !== INIT_TYPE) {
return;
}
patchInitData(data);
});
}
});
require_client();
})();