import { ViteNodeRunner } from "__VITE_NODE_CLIENT__"

function handleError(msg, error) {
	console.error(msg, error)
	process.send("exit")
}
const runner = new ViteNodeRunner({
	root: ["__ROOT__"],
	base: ["__BASE__"],
	debug: true,
	fetchModule: async function (id) {
		return new Promise((resolve) => {
			try {
				process.once('message', (msg) => {
					const message = JSON.parse(msg)
					if (message.type == "fetched" && id == message.id)
						resolve(message.md)
				})
				process.send({ type: 'fetch', id })
			} catch (error) {
				handleError(`Error fetching module {id}`, error)
			}
		})

	},
	resolveId: async function (id, importer) {
		return new Promise((resolve) => {
			try {
				process.once('message', msg => {
					const { input, output, type } = JSON.parse(msg)
					if (type === "resolved") {
						if (input.id == id && input.importer == importer)
							resolve(output)
					}
				})
				process.send({ type: 'resolve', payload: { id, importer } })
			} catch (error) {
				handleError(`Error fetching module {id}`, error)
			}
		})
	}
}
);
const file = '__FILE__'

await runner.executeFile(file).catch(function (error) {
	handleError(`Error executing file ${file}`, error)
});