msoffice-addin
Version:
Microsoft office addin module for Nuxt abd vite
76 lines (73 loc) • 1.97 kB
JavaScript
import process from 'node:process';
import { O as OFFICE_JS_LOADER_SNIPPET, t as transformManifests } from './shared/msoffice-addin.fd118499.mjs';
import 'node:fs';
import 'node:path';
import 'vite';
function MSOfficeAddin(params) {
let mode;
let viteConfig;
function generate() {
return transformManifests({
mode,
envDir: viteConfig.envDir ?? process.cwd(),
inputs: params.manifests,
defineENV: params.defineENV
});
}
function getManifest(route) {
const outputs = generate();
return outputs.find((entry) => entry.route === route);
}
return {
name: "msoffice-addin-vite",
enforce: "post",
async config(config, env) {
config.server = {
...config.server,
headers: {
"Access-Control-Allow-Origin": "*"
}
};
mode = env.mode;
return viteConfig = config;
},
transformIndexHtml(html, ctx) {
const path = ctx.path;
const matches = params.injectOfficeJS.some(
(entry) => entry instanceof RegExp ? entry.test(path) : entry === path
);
if (!matches)
return html;
return html.replace(
/<\/head>/,
`${OFFICE_JS_LOADER_SNIPPET}
</head>`
);
},
configureServer(server) {
const paths = params.manifests.flatMap((i) => i.route);
server.middlewares.use((req, res, next) => {
const { url } = req;
if (url && paths.includes(url)) {
const manifest = getManifest(url);
if (manifest) {
res.setHeader("content-type", "text/xml");
return res.end(manifest.content);
}
}
next();
});
},
generateBundle() {
const manifests = generate();
for (const entry of manifests) {
this.emitFile({
type: "asset",
fileName: entry.route.slice(1),
source: entry.content
});
}
}
};
}
export { MSOfficeAddin as default };