UNPKG

@flatfile/plugin-json-extractor

Version:

A plugin for parsing json files in Flatfile.

1 lines 7 kB
{"version":3,"sources":["../src/parser.ts","../src/index.ts"],"names":["parseBuffer","buffer","options","fileContents","line","parsedData","results","sheets","sheet","value","parseSheet","error","jsonArray","filteredResults","item","flattenObject","obj","parent","res","key","propName","firstItem","headers","header","filteredData","row","flattenedRow","filteredRow","cell","JSONExtractor","Extractor","jsonParser","jsonExtractorPlugin"],"mappings":";;;;AAEO,SAASA,EACdC,CACAC,CAAAA,CAAAA,CACiB,CACjB,GAAI,CACF,IAAIC,CAAAA,CAAeF,CAAO,CAAA,QAAA,CAAS,MAAM,CAEzC,CAAA,GAAI,CAACE,CAAAA,CACH,OAAQ,OAAA,CAAA,GAAA,CAAI,uBAAuB,CAAA,CAC5B,EAGLD,CAAAA,CAAAA,CAAAA,EAAS,OAAY,GAAA,OAAA,EAAWA,GAAS,OAAY,GAAA,WAAA,IAcvDC,CAAe,CAAA,CAAA,CAAA,EAbDA,EACX,KAAM,CAAA,CAAA;AAAA,CAAI,CACV,CAAA,MAAA,CAAQC,CAASA,EAAAA,CAAAA,CAAK,IAAK,EAAA,GAAM,EAAE,CAAA,CACnC,GAAKA,CAAAA,CAAAA,EAAS,CACb,GAAI,CACF,OAAK,IAAA,CAAA,KAAA,CAAMA,CAAI,CAAA,CACRA,CACT,CAAA,KAAY,CACV,OAAA,OAAA,CAAQ,KAAM,CAAA,oBAAA,CAAsBA,CAAI,CAAA,CACjC,IACT,CACF,CAAC,CAAA,CACA,OAAQA,CAASA,EAAAA,CAAAA,GAAS,IAAI,CAAA,CACR,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAGpC,IAAMC,CAAAA,CAAa,IAAK,CAAA,KAAA,CAAMF,CAAY,CAAA,CAC1C,GAAI,OAAOE,GAAe,QAAYA,EAAAA,CAAAA,GAAe,IACnD,CAAA,OAAA,OAAA,CAAQ,KAAM,CAAA,wCAAwC,CAC/C,CAAA,GAGT,IAAMC,CAAAA,CAA2B,EAAC,CAC5BC,CAAS,CAAA,KAAA,CAAM,OAAQF,CAAAA,CAAU,EACnC,CAAE,MAAA,CAAQA,CAAW,CAAA,CACrBA,CAEJ,CAAA,IAAA,GAAW,CAACG,CAAAA,CAAOC,CAAK,CAAA,GAAK,MAAO,CAAA,OAAA,CAAQF,CAAM,CAAA,CAChD,GAAI,KAAA,CAAM,QAAQE,CAAK,CAAA,CACrB,GAAI,CACFH,CAAQE,CAAAA,CAAK,CAAIE,CAAAA,CAAAA,CAAWD,CAAK,EACnC,CAAA,MAASE,CAAO,CAAA,CACd,OAAQ,CAAA,KAAA,CAAM,CAA2BH,wBAAAA,EAAAA,CAAK,KAAMG,CAAK,EAC3D,CAIJ,OAAOL,CACT,CAAA,MAASK,CAAO,CAAA,CACd,MAAQ,OAAA,CAAA,KAAA,CAAM,oBAAsBA,CAAAA,CAAK,CACnCA,CAAAA,CACR,CACF,CAEO,SAASD,CAAWE,CAAAA,CAAAA,CAAgC,CACzD,GAAI,CAEF,IAAMC,CAAkBD,CAAAA,CAAAA,CAAU,OAC/BE,CAAS,EAAA,OAAOA,CAAS,EAAA,QAAA,EAAYA,CAAS,GAAA,IACjD,CAEA,CAAA,GAAID,EAAgB,MAAW,GAAA,CAAA,CAC7B,OAAO,EAMT,CAAA,IAAME,CAAgB,CAAA,CAACC,CAAUC,CAAAA,CAAAA,CAAiB,EAAIC,CAAAA,CAAAA,CAAW,EAAC,GAAM,CACtE,IAAA,IAASC,KAAOH,CAAK,CAAA,CACnB,IAAMI,CAAAA,CAAWH,CAAS,CAAA,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIE,CAAG,CAAKA,CAAAA,CAAAA,CAAAA,CAC3C,OAAOH,CAAAA,CAAIG,CAAG,CAAA,EAAM,QACtBJ,CAAAA,CAAAA,CAAcC,EAAIG,CAAG,CAAA,CAAGC,CAAUF,CAAAA,CAAG,CAErCA,CAAAA,CAAAA,CAAIE,CAAQ,CAAA,CAAIJ,CAAIG,CAAAA,CAAG,EAE3B,CACA,OAAOD,CACT,CAGMG,CAAAA,CAAAA,CAAYN,EAAcF,CAAgB,CAAA,CAAC,CAAC,CAAA,CAC5CS,CAAU,CAAA,MAAA,CAAO,IAAKD,CAAAA,CAAS,EAAE,MAAQE,CAAAA,CAAAA,EAAWA,CAAW,GAAA,EAAE,CAGjEC,CAAAA,CAAAA,CAAeX,CAAgB,CAAA,GAAA,CAAKY,GAAQ,CAChD,IAAMC,CAAeX,CAAAA,CAAAA,CAAcU,CAAG,CAAA,CACtC,OAAOH,CAAAA,CAAQ,MAAO,CAAA,CAACK,CAAaJ,CAAAA,CAAAA,GAAW,CAC7C,IAAMK,CAAOF,CAAAA,CAAAA,CAAaH,CAAM,CAChC,CAAA,OAAAI,CAAYJ,CAAAA,CAAM,CAAI,CAAA,CACpB,KAAO,CAAA,KAAA,CAAM,QAAQK,CAAI,CAAA,CAAI,IAAK,CAAA,SAAA,CAAUA,CAAI,CAAA,CAAIA,CACtD,CAAA,CACOD,CACT,CAAG,CAAA,EAAE,CACP,CAAC,CAAA,CAED,OAAO,CACL,OAAAL,CAAAA,CAAAA,CACA,IAAME,CAAAA,CACR,CACF,CAAA,MAASb,CAAO,CAAA,CACd,cAAQ,KAAM,CAAA,oBAAA,CAAsBA,CAAK,CAAA,CACnCA,CACR,CACF,CCpGO,IAAMkB,EAAiB3B,CACrB4B,EAAAA,uBAAAA,CAAU,wBAA0B,CAAA,MAAA,CAAQ9B,CAAaE,CAAAA,CAAO,CAG5D6B,CAAAA,CAAAA,CAAa/B,EAKbgC,CAAsBH,CAAAA","file":"index.browser.cjs","sourcesContent":["import { SheetCapture, WorkbookCapture } from '@flatfile/util-extractor'\n\nexport function parseBuffer(\n buffer: Buffer,\n options?: { readonly fileExt?: string }\n): WorkbookCapture {\n try {\n let fileContents = buffer.toString('utf8')\n\n if (!fileContents) {\n console.log('Invalid file contents')\n return {} as WorkbookCapture\n }\n\n if (options?.fileExt === 'jsonl' || options?.fileExt === 'jsonlines') {\n const lines = fileContents\n .split('\\n')\n .filter((line) => line.trim() !== '')\n .map((line) => {\n try {\n JSON.parse(line)\n return line\n } catch (e) {\n console.error('Invalid JSON line:', line)\n return null\n }\n })\n .filter((line) => line !== null)\n fileContents = `[${lines.join(',')}]`\n }\n\n const parsedData = JSON.parse(fileContents)\n if (typeof parsedData !== 'object' || parsedData === null) {\n console.error('Invalid input: data must be an object.')\n return {} as WorkbookCapture\n }\n\n const results: WorkbookCapture = {}\n const sheets = Array.isArray(parsedData)\n ? { Sheet1: parsedData }\n : parsedData\n\n for (const [sheet, value] of Object.entries(sheets)) {\n if (Array.isArray(value)) {\n try {\n results[sheet] = parseSheet(value)\n } catch (error) {\n console.error(`Error processing sheet \"${sheet}\":`, error)\n }\n }\n }\n\n return results\n } catch (error) {\n console.error('An error occurred:', error)\n throw error\n }\n}\n\nexport function parseSheet(jsonArray: any[]): SheetCapture {\n try {\n // Ensure all items are objects\n const filteredResults = jsonArray.filter(\n (item) => typeof item === 'object' && item !== null\n )\n\n if (filteredResults.length === 0) {\n return {} as SheetCapture\n }\n\n // Custom flatten function that extracts all keys in an arbitrarily deep JSON object into headers,\n // where nested levels are separated by `.` in the final header\n // NOTE: The res input is mutated as part of this recursive function\n const flattenObject = (obj: any, parent: string = '', res: any = {}) => {\n for (let key in obj) {\n const propName = parent ? `${parent}.${key}` : key\n if (typeof obj[key] === 'object') {\n flattenObject(obj[key], propName, res)\n } else {\n res[propName] = obj[key]\n }\n }\n return res\n }\n\n // Flatten the first item to determine headers\n const firstItem = flattenObject(filteredResults[0])\n const headers = Object.keys(firstItem).filter((header) => header !== '')\n\n // Flatten and filter all rows\n const filteredData = filteredResults.map((row) => {\n const flattenedRow = flattenObject(row)\n return headers.reduce((filteredRow, header) => {\n const cell = flattenedRow[header]\n filteredRow[header] = {\n value: Array.isArray(cell) ? JSON.stringify(cell) : cell,\n }\n return filteredRow\n }, {})\n })\n\n return {\n headers,\n data: filteredData,\n } as SheetCapture\n } catch (error) {\n console.error('An error occurred:', error)\n throw error\n }\n}\n","import { Extractor } from '@flatfile/util-extractor'\nimport { parseBuffer } from './parser'\n\nexport interface PluginOptions {\n chunkSize?: number\n parallel?: number\n debug?: boolean\n}\n\nexport const JSONExtractor = (options?: PluginOptions) => {\n return Extractor(/\\.(jsonl?|jsonlines)$/i, 'json', parseBuffer, options)\n}\n\nexport const jsonParser = parseBuffer\n\n/*\n * @deprecated use `JSONExtractor` instead\n */\nexport const jsonExtractorPlugin = JSONExtractor\n"]}