UNPKG

@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
"use strict"; (() => { 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(); })();