41 lines
964 B
TypeScript
41 lines
964 B
TypeScript
import { esbuild } from "../deps.ts";
|
|
import { MediaType } from "./deno.ts";
|
|
|
|
export function mediaTypeToLoader(mediaType: MediaType): esbuild.Loader {
|
|
switch (mediaType) {
|
|
case "JavaScript":
|
|
case "Mjs":
|
|
return "js";
|
|
case "JSX":
|
|
return "jsx";
|
|
case "TypeScript":
|
|
case "Mts":
|
|
return "ts";
|
|
case "TSX":
|
|
return "tsx";
|
|
case "Json":
|
|
return "js";
|
|
default:
|
|
throw new Error(`Unhandled media type ${mediaType}.`);
|
|
}
|
|
}
|
|
|
|
export function transformRawIntoContent(
|
|
raw: Uint8Array,
|
|
mediaType: MediaType,
|
|
): string | Uint8Array {
|
|
switch (mediaType) {
|
|
case "Json":
|
|
return jsonToESM(raw);
|
|
default:
|
|
return raw;
|
|
}
|
|
}
|
|
|
|
function jsonToESM(source: Uint8Array): string {
|
|
const sourceString = new TextDecoder().decode(source);
|
|
let json = JSON.stringify(JSON.parse(sourceString), null, 2);
|
|
json = json.replaceAll(`"__proto__":`, `["__proto__"]:`);
|
|
return `export default ${json};`;
|
|
}
|