mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 09:27:19 +08:00
138 lines
5.1 KiB
JavaScript
138 lines
5.1 KiB
JavaScript
"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
|