UNPKG

esbuild-plugin-vue-iii

Version:
210 lines 9.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.vue3Plugin = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); // import { createFilter } from '@rollup/pluginutils'; const compiler_sfc_1 = require("@vue/compiler-sfc"); const query_1 = require("../vite/packages/plugin-vue/src/utils/query"); const descriptorCache_1 = require("../vite/packages/plugin-vue/src/utils/descriptorCache"); const script_1 = require("../vite/packages/plugin-vue/src/script"); const main_1 = require("../vite/packages/plugin-vue/src/main"); // import { handleHotUpdate } from '../vite/packages/plugin-vue/src/handleHotUpdate'; const template_1 = require("../vite/packages/plugin-vue/src/template"); const style_1 = require("../vite/packages/plugin-vue/src/style"); const logger = { log: process.env.NODE_ENV === 'dev' ? console.log : () => { }, }; const AbsolutePath = /^(?:\/|(?:[A-Za-z]:)?[\\|/])/; const dummyContextFactory = () => { const errors = []; return { resolve(src, importer) { if (AbsolutePath.test(src)) { logger.log('resolve abs:', src); return { id: src }; } else if (src[0] === '.') { // is relative path logger.log('resolve rel:', importer ? path_1.default.resolve(importer, '..', src) : path_1.default.resolve(src)); return { id: importer ? path_1.default.resolve(importer, '..', src) : path_1.default.resolve(src) }; } }, error(param) { var _a, _b, _c; errors.push({ location: { file: ((_a = param.loc) === null || _a === void 0 ? void 0 : _a.file) || param.id, column: (_b = param.loc) === null || _b === void 0 ? void 0 : _b.column, line: (_c = param.loc) === null || _c === void 0 ? void 0 : _c.line, }, text: param.message, }); }, get errors() { return errors; }, }; }; // const filter = createFilter( // rawOptions.include || /\.vue$/, // rawOptions.exclude // ) const createFilter = (include, exclude) => // eslint-disable-line @typescript-eslint/no-unused-vars (name) => !!(include === null || include === void 0 ? void 0 : include.test(name)); const vue3Plugin = (rawOptions = {}) => { // const { // include = /\.vue$/, // exclude, // customElement = /\.ce\.vue$/, // refTransform = false // } = rawOptions; const include = /\.vue$/; const exclude = undefined; const customElement = undefined; const refTransform = undefined; const filter = createFilter(include, exclude); // eslint-disable-line @typescript-eslint/no-unused-vars const customElementFilter = // eslint-disable-line @typescript-eslint/no-unused-vars typeof customElement === 'boolean' ? () => customElement : createFilter(customElement); const refTransformFilter = // eslint-disable-line @typescript-eslint/no-unused-vars refTransform === false ? () => false : refTransform === true ? createFilter(/\.(j|t)sx?$/, /node_modules/) : createFilter(refTransform); // compat for older verisons const canUseRefTransform = typeof compiler_sfc_1.shouldTransformRef === 'function'; // eslint-disable-line @typescript-eslint/no-unused-vars const options = { isProduction: process.env.NODE_ENV === 'production', ...rawOptions, include, exclude, customElement, refTransform, root: process.cwd(), }; return { name: 'vue-iii', setup(build) { // transform build.onResolve({ filter: /\.vue$/ }, args => ({ path: args.importer ? path_1.default.resolve(args.importer, '..', args.path) : path_1.default.resolve(args.path), namespace: 'vue-iii-transform', })); build.onLoad({ filter: /\.vue$/, namespace: 'vue-iii-transform' }, async (args) => { const id = args.path; const ssr = false; const resolveDir = path_1.default.dirname(id); logger.log('transform', id); logger.log('resolveDir', resolveDir); const { filename, query } = query_1.parseVueRequest(id); if (query.raw) { logger.log('transform 1 returned', id); return; } // if (!filter(filename) && !query.vue) { // if (!query.vue && refTransformFilter(filename)) { // if (!canUseRefTransform) { // this.warn('refTransform requires @vue/compiler-sfc@^3.2.5.') // } else if (shouldTransformRef(code)) { // return transformRef(code, { // filename, // sourceMap: true // }) // } // } // return // } const code = await fs_1.default.promises.readFile(args.path, 'utf-8'); const dummyContext = dummyContextFactory(); if (!query.vue) { // main request const ret = await main_1.transformMain(code, filename, options, dummyContext, ssr, // customElementFilter(filename) false); logger.log('transform 2 returned', ret); return { contents: ret === null || ret === void 0 ? void 0 : ret.code, loader: 'ts', resolveDir, errors: dummyContext.errors }; } else { // sub block request is done in the load section } }); // load build.onResolve({ filter: /\.vue\?/ }, args => { // serve subpart requests (*?vue) as virtual modules if (query_1.parseVueRequest(args.path).query.vue) { return { path: args.importer ? path_1.default.resolve(args.importer, '..', args.path) : path_1.default.resolve(args.path), namespace: 'vue-iii-load', }; } }); build.onLoad({ filter: /\.vue\?/, namespace: 'vue-iii-load' }, async (args) => { const id = args.path; const ssr = false; const { filename, query } = query_1.parseVueRequest(id); const resolveDir = path_1.default.dirname(id.split('?')[0]); logger.log('resolveDir', resolveDir); // select corresponding block for subpart virtual modules if (query.vue) { if (query.src) { logger.log('load 1 returned', id); return { contents: await fs_1.default.promises.readFile(filename, 'utf-8'), loader: 'ts', resolveDir }; } const descriptor = descriptorCache_1.getDescriptor(filename, options.root, options.isProduction); let block; const loader = 'ts'; const dummyContext = dummyContextFactory(); if (query.type === 'script') { // handle <scrip> + <script setup> merge via compileScript() block = script_1.getResolvedScript(descriptor, ssr); } else if (query.type === 'template') { block = descriptor.template; const ret = template_1.transformTemplateAsModule(block.content, descriptor, options, dummyContext, ssr); logger.log('transform 3 returned', ret); return { contents: ret === null || ret === void 0 ? void 0 : ret.code, loader, resolveDir, errors: dummyContext.errors }; } else if (query.type === 'style') { block = descriptor.styles[query.index]; const ret = await style_1.transformStyle(block.content, descriptor, Number(query.index), options, dummyContext); logger.log('transform 4 returned', ret); return { contents: ret === null || ret === void 0 ? void 0 : ret.code, loader: 'css', resolveDir, errors: dummyContext.errors }; } else if (query.index != null) { block = descriptor.customBlocks[query.index]; } if (block) { logger.log('load 2 returned', id, block); return { contents: block.content, loader, resolveDir, }; } } }); }, }; }; exports.vue3Plugin = vue3Plugin; //# sourceMappingURL=index.js.map