| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.createBuildJsTransformPlugin = exports.createServerTransformPlugin = void 0;
- const utils_1 = require("./utils");
- const serverPluginSourceMap_1 = require("./server/serverPluginSourceMap");
- function createServerTransformPlugin(transforms, customBlockTransforms, resolver) {
- return ({ app }) => {
- if (!transforms.length && !Object.keys(customBlockTransforms).length) {
- return;
- }
- app.use(async (ctx, next) => {
- await next();
- if (!ctx.body ||
- (ctx.type === 'text/html' && !utils_1.isImportRequest(ctx)) ||
- resolver.isPublicRequest(ctx.path)) {
- return;
- }
- let { url, path, query, __notModified } = ctx;
- const id = resolver.requestToFile(url);
- path = resolver.requestToFile(path);
- const isImport = utils_1.isImportRequest(ctx);
- const isBuild = false;
- let code = '';
- for (const t of transforms) {
- const transformContext = {
- id,
- path,
- query,
- isImport,
- isBuild
- };
- if (__notModified) {
- transformContext.notModified = true;
- }
- if (t.test(transformContext)) {
- code = code || (await utils_1.readBody(ctx.body));
- const result = await t.transform({
- ...transformContext,
- code
- });
- if (typeof result === 'string') {
- code = result;
- }
- else {
- code = result.code;
- if (result.map) {
- ctx.map = serverPluginSourceMap_1.mergeSourceMap(ctx.map, result.map);
- }
- }
- ctx.type = 'js';
- ctx.body = code;
- }
- }
- // custom blocks
- if (path.endsWith('vue') && query.type === 'custom') {
- const t = customBlockTransforms[query.blockType];
- if (t) {
- ctx.type = 'js';
- code = code || (await utils_1.readBody(ctx.body));
- ctx.body = await t({
- code,
- id,
- path,
- query,
- isImport,
- isBuild
- });
- }
- }
- });
- };
- }
- exports.createServerTransformPlugin = createServerTransformPlugin;
- function createBuildJsTransformPlugin(transforms, customBlockTransforms) {
- return {
- name: 'vite:transforms',
- async transform(code, id) {
- const { path, query } = utils_1.parseWithQuery(id);
- let transformed = code;
- let map = null;
- const runTransform = async (t, ctx) => {
- const result = await t(ctx);
- if (typeof result === 'string') {
- transformed = result;
- }
- else {
- transformed = result.code;
- if (result.map) {
- map = serverPluginSourceMap_1.mergeSourceMap(map, result.map);
- }
- }
- };
- for (const t of transforms) {
- const transformContext = {
- code: transformed,
- id,
- path,
- query,
- isImport: true,
- isBuild: true
- };
- if (t.test(transformContext)) {
- await runTransform(t.transform, transformContext);
- }
- }
- // custom blocks
- if (query.vue != null && typeof query.type === 'string') {
- const t = customBlockTransforms[query.type];
- if (t) {
- // normalize lang since rollup-plugin-vue appends it as .xxx
- const normalizedQuery = {};
- for (const key in query) {
- if (key.startsWith(`lang.`)) {
- normalizedQuery.lang = key.slice(5);
- }
- else {
- normalizedQuery[key] = query[key];
- }
- }
- await runTransform(t, {
- code: transformed,
- id,
- path,
- query: normalizedQuery,
- isImport: true,
- isBuild: true
- });
- }
- }
- return {
- code: transformed,
- map
- };
- }
- };
- }
- exports.createBuildJsTransformPlugin = createBuildJsTransformPlugin;
- //# sourceMappingURL=transform.js.map
|