// 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; } }, }; }