UNPKG

esbuild-plugin-vue-iii

Version:
136 lines 5.45 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveTemplateCompilerOptions = exports.compile = exports.transformTemplateInMain = exports.transformTemplateAsModule = void 0; const path_1 = __importDefault(require("path")); const slash_1 = __importDefault(require("slash")); const compiler_sfc_1 = require("@vue/compiler-sfc"); const script_1 = require("./script"); const error_1 = require("./utils/error"); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function transformTemplateAsModule(code, descriptor, options, pluginContext, ssr) { const result = compile(code, descriptor, options, pluginContext, ssr); let returnCode = result.code; if (options.devServer && options.devServer.config.server.hmr !== false && !ssr && !options.isProduction) { returnCode += `\nimport.meta.hot.accept(({ render }) => { __VUE_HMR_RUNTIME__.rerender(${JSON.stringify(descriptor.id)}, render) })`; } return { code: returnCode, map: result.map }; } exports.transformTemplateAsModule = transformTemplateAsModule; /** * transform the template directly in the main SFC module */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function transformTemplateInMain(code, descriptor, options, pluginContext, ssr) { const result = compile(code, descriptor, options, pluginContext, ssr); return { ...result, code: result.code.replace(/\nexport (function|const) (render|ssrRender)/, '\n$1 _sfc_$2') }; } exports.transformTemplateInMain = transformTemplateInMain; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function compile(code, descriptor, options, pluginContext, ssr) { const filename = descriptor.filename; const result = compiler_sfc_1.compileTemplate({ ...resolveTemplateCompilerOptions(descriptor, options, ssr), source: code }); if (result.errors.length) { result.errors.forEach((error) => pluginContext.error(typeof error === 'string' ? { id: filename, message: error } : error_1.createRollupError(filename, error))); } if (result.tips.length) { result.tips.forEach((tip) => pluginContext.warn({ id: filename, message: tip })); } return result; } exports.compile = compile; function resolveTemplateCompilerOptions(descriptor, options, ssr) { var _a, _b, _c; const block = descriptor.template; if (!block) { return; } const resolvedScript = script_1.getResolvedScript(descriptor, ssr); const hasScoped = descriptor.styles.some((s) => s.scoped); const { id, filename, cssVars } = descriptor; let transformAssetUrls = (_a = options.template) === null || _a === void 0 ? void 0 : _a.transformAssetUrls; // @vue/compiler-sfc/dist/compiler-sfc.d.ts should export `AssetURLOptions` let assetUrlOptions; //: AssetURLOptions | undefined if (options.devServer) { // during dev, inject vite base so that @vue/compiler-sfc can transform // relative paths directly to absolute paths without incurring an extra import // request if (filename.startsWith(options.root)) { assetUrlOptions = { base: options.devServer.config.base + slash_1.default(path_1.default.relative(options.root, path_1.default.dirname(filename))) }; } } else { // build: force all asset urls into import requests so that they go through // the assets plugin for asset registration assetUrlOptions = { includeAbsolute: true }; } if (transformAssetUrls && typeof transformAssetUrls === 'object') { // presence of array fields means this is raw tags config if (Object.keys(transformAssetUrls).some((key) => Array.isArray(transformAssetUrls[key]))) { transformAssetUrls = { ...assetUrlOptions, tags: transformAssetUrls }; } else { transformAssetUrls = { ...transformAssetUrls, ...assetUrlOptions }; } } else { transformAssetUrls = assetUrlOptions; } let preprocessOptions = block.lang && ((_b = options.template) === null || _b === void 0 ? void 0 : _b.preprocessOptions); if (block.lang === 'pug') { preprocessOptions = { doctype: 'html', ...preprocessOptions }; } return { ...options.template, id, filename, scoped: hasScoped, slotted: descriptor.slotted, isProd: options.isProduction, inMap: block.src ? undefined : block.map, ssr, ssrCssVars: cssVars, transformAssetUrls, preprocessLang: block.lang, preprocessOptions, compilerOptions: { ...(_c = options.template) === null || _c === void 0 ? void 0 : _c.compilerOptions, scopeId: hasScoped ? `data-v-${id}` : undefined, bindingMetadata: resolvedScript ? resolvedScript.bindings : undefined } }; } exports.resolveTemplateCompilerOptions = resolveTemplateCompilerOptions; //# sourceMappingURL=template.js.map