firefish/packages/client/vite.json5.ts
Kainoa Kanter 7fb130b06e formatting
2023-04-06 18:56:46 -07:00

50 lines
1.3 KiB
TypeScript

// Original: https://github.com/rollup/plugins/tree/8835dd2aed92f408d7dc72d7cc25a9728e16face/packages/json
import JSON5 from "json5";
import { Plugin } from "rollup";
import { createFilter, dataToEsm } from "@rollup/pluginutils";
import { RollupJsonOptions } from "@rollup/plugin-json";
interface Json5SyntaxError extends SyntaxError {
lineNumber: number;
columnNumber: number;
}
export default function json5(options: RollupJsonOptions = {}): Plugin {
const filter = createFilter(options.include, options.exclude);
const indent = "indent" in options ? options.indent : "\t";
return {
name: "json5",
transform(json, id) {
if (id.slice(-6) !== ".json5" || !filter(id)) return null;
try {
const parsed = JSON5.parse(json);
return {
code: dataToEsm(parsed, {
preferConst: options.preferConst,
compact: options.compact,
namedExports: options.namedExports,
indent,
}),
map: { mappings: "" },
};
} catch (err) {
if (!(err instanceof SyntaxError)) {
throw err;
}
const message = "Could not parse JSON5 file";
const { lineNumber, columnNumber } = err as Json5SyntaxError;
this.warn({
message,
id,
loc: { line: lineNumber, column: columnNumber },
});
return null;
}
},
};
}