UNPKG

@ztl-uwu/nuxt-content

Version:

Write your content inside your Nuxt app

51 lines (50 loc) 1.34 kB
import { unified } from "unified"; import { defineTransformer } from "../utils.js"; import { fromCSV } from "./from-csv.js"; function csvParse(options) { const parser = (doc) => { return fromCSV(doc, options); }; Object.assign(this, { Parser: parser }); const toJsonObject = (tree) => { const [header, ...rows] = tree.children; const columns = header.children.map((col) => col.children[0].value); const data = rows.map((row) => { return row.children.reduce((acc, col, i) => { acc[String(columns[i])] = col.children[0]?.value; return acc; }, {}); }); return data; }; const toJsonArray = (tree) => { const data = tree.children.map((row) => { return row.children.map((col) => col.children[0]?.value); }); return data; }; const compiler = (doc) => { if (options.json) { return toJsonObject(doc); } return toJsonArray(doc); }; Object.assign(this, { Compiler: compiler }); } export default defineTransformer({ name: "csv", extensions: [".csv"], parse: async (_id, content, options = {}) => { const stream = unified().use(csvParse, { delimiter: ",", json: true, ...options }); const { result } = await stream.process(content); return { _id, _type: "csv", body: result }; } });