UNPKG

@tomjs/vite-plugin-monaco-editor

Version:

vite plugin for monaco-editor, inject scripts for index.html

136 lines (129 loc) 5.25 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/index.ts var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra); var _nodehtmlparser = require('node-html-parser'); // src/constants.ts var PLUGIN_NAME = "tomjs:monaco"; // src/utils.ts function urlConcat(...urls) { return urls.map((s) => (s || "").trim()).filter((s) => s).join("/").replace(/\/+/g, "/").replace(/:\//, "://"); } // src/index.ts var urlTypeMap = { npmmirror: "https://registry.npmmirror.com/monaco-editor/{version}/files", unpkg: "https://unpkg.com/monaco-editor@{version}", jsdelivr: "https://cdn.jsdelivr.net/npm/monaco-editor@{version}" }; function getPkgVersion() { const pwd = process.cwd(); const modulePath = _path2.default.join(pwd, "node_modules/monaco-editor"); const pkgFile = _path2.default.join(modulePath, "package.json"); if (!_fsextra2.default.existsSync(pkgFile)) { return; } const pkg = JSON.parse(_fsextra2.default.readFileSync(pkgFile, "utf-8")); return pkg.version; } function getHtmlRoot(html) { const root = _nodehtmlparser.parse.call(void 0, html); const title = root.querySelector("title"); if (!title) { const head = root.querySelector("head"); if (!head) { root == null ? void 0 : root.insertAdjacentHTML("beforeend", "<head></head>"); } head == null ? void 0 : head.insertAdjacentHTML("beforeend", "<title></title>"); } return { root, title }; } function getInjectHtml(urlPrefix) { return ( /* html*/ ` <link rel="stylesheet" data-name="vs/editor/editor.main" href="${urlPrefix}/editor/editor.main.css"/> <script>var require = { paths: { vs: "${urlPrefix}" } };</script> <script src="${urlPrefix}/loader.js"></script> <script src="${urlPrefix}/editor/editor.main.nls.js"></script> <script src="${urlPrefix}/editor/editor.main.js"></script>` ); } function preHandleOptions(options) { const { local, ...opts } = Object.assign({}, options); const serveOpts = Object.assign({}, opts.serve); opts.serve = serveOpts; let localOpts; if (local === true) { localOpts = { copy: true }; } else if (typeof local === "object") { localOpts = local; } return Object.assign(opts, { local: localOpts }); } function useMonacoEditorPlugin(options) { const opts = preHandleOptions(options); const serveOpts = opts.serve; const localOpts = opts.local; let cdUrl; return [ { name: PLUGIN_NAME, apply: "serve", configResolved(config) { serveOpts.base = (serveOpts == null ? void 0 : serveOpts.base) || config.base || "/"; }, transformIndexHtml(html) { const { root, title } = getHtmlRoot(html); const urlPrefix = urlConcat(serveOpts.base, `node_modules/monaco-editor/dev/vs`); title == null ? void 0 : title.insertAdjacentHTML("afterend", getInjectHtml(urlPrefix)); return root.toString(); } }, { name: PLUGIN_NAME, apply: "build", configResolved(config) { console.log(config.base); if (localOpts) { localOpts.base ||= config.base; localOpts.outDir ||= config.build.outDir; localOpts.copy ??= true; localOpts.path ||= "npm/monaco-editor@{version}"; localOpts.path = localOpts.path.replace(/{version}/g, getPkgVersion()); opts.local = localOpts; } else { let { type, url } = opts; if (!type || !["npmmirror", "jsdelivr", "unpkg", "custom"].includes(type)) { type = new Intl.NumberFormat().resolvedOptions().locale === "zh-CN" ? "npmmirror" : "jsdelivr"; } if (["npmmirror", "jsdelivr", "unpkg"].includes(type)) { url = urlTypeMap[type]; } else if (!url) { throw new Error("When the type parameter is custom, the url parameter is required."); } cdUrl = url.replace(/{version}/g, getPkgVersion()); } }, transformIndexHtml(html) { const { root, title } = getHtmlRoot(html); const urlPrefix = cdUrl || urlConcat((localOpts == null ? void 0 : localOpts.base) || "/", (localOpts == null ? void 0 : localOpts.path) || ""); title == null ? void 0 : title.insertAdjacentHTML("afterend", getInjectHtml(urlConcat(urlPrefix, "/min/vs"))); return root.toString(); }, closeBundle() { if (!(localOpts == null ? void 0 : localOpts.copy)) { return; } const outDir = localOpts.outDir || "dist"; const outPath = _path2.default.join(process.cwd(), outDir); if (!_fsextra2.default.existsSync(outPath)) { _fsextra2.default.mkdirpSync(outPath); } const srcFolder = _path2.default.join(process.cwd(), "node_modules/monaco-editor/min"); const destFolder = _path2.default.join(outPath, localOpts.path, "min"); _fsextra2.default.copySync(srcFolder, destFolder); } } ]; } var src_default = useMonacoEditorPlugin; exports.default = src_default; exports.useMonacoEditorPlugin = useMonacoEditorPlugin;