@benpsnyder/analogjs-esm-vite-plugin-nitro
Version:
A Vite plugin for adding a nitro API server
84 lines (81 loc) • 2.76 kB
JavaScript
import { buildSync } from 'esbuild';
import { normalizePath } from 'vite';
export function pageEndpointsPlugin() {
return {
name: 'analogjs-vite-plugin-nitro-rollup-page-endpoint',
async transform(_code, id) {
if (normalizePath(id).includes('/pages/') && id.endsWith('.server.ts')) {
const compiled = buildSync({
stdin: {
contents: _code,
sourcefile: id,
loader: 'ts',
},
write: false,
metafile: true,
platform: 'neutral',
format: 'esm',
logLevel: 'silent',
});
let fileExports = [];
for (let key in compiled.metafile?.outputs) {
if (compiled.metafile?.outputs[key].entryPoint) {
fileExports = compiled.metafile?.outputs[key].exports;
}
}
const code = `
import { defineEventHandler } from 'h3';
${fileExports.includes('load')
? _code
: `
${_code}
export const load = () => {
return {};
}`}
${fileExports.includes('action')
? ''
: `
export const action = () => {
return {};
}
`}
export default defineEventHandler(async(event) => {
if (event.method === 'GET') {
try {
return await load({
params: event.context.params,
req: event.node.req,
res: event.node.res,
fetch: $fetch,
event
});
} catch(e) {
console.error(\` An error occurred: \$\{e\}\`)
throw e;
}
} else {
try {
return await action({
params: event.context.params,
req: event.node.req,
res: event.node.res,
fetch: $fetch,
event
});
} catch(e) {
console.error(\` An error occurred: \$\{e\}\`)
throw e;
}
}
});
`;
return {
code,
map: null,
};
}
return;
},
};
}
//# sourceMappingURL=page-endpoints.js.map