UNPKG

@fourlights/mapper

Version:

A simple data mapper written in typescript

1 lines 2.56 kB
{"version":3,"sources":["../src/lib/map.ts"],"names":["set","map","data","config","options","mapped","plugin","key","property","wrapProperty","value","isPlainObject","innerKeys","structureFn","Keep","i","innerKey","innerValue","targetKey","mappedValue"],"mappings":"2HAAA,OAAOA,MAAS,YAMT,SAASC,EAAOC,EAASC,EAAyBC,EAAyB,CACjF,IAAMC,EAA2C,CAAC,EAE9CD,GAAS,SACZA,EAAQ,QAAQ,QAASE,GAAW,CACnCH,EAASG,EAAO,OAAOH,EAAQC,CAAO,CACvC,CAAC,EAGF,QAAWG,KAAOJ,EAAQ,CACzB,IAAMK,EAAWC,EAAaN,EAAOI,CAAG,CAAC,EACzC,GAAI,CAACC,EAAU,SAEXA,EAAS,SAAS,OACrBH,EAAOE,CAAG,EAAIC,EAAS,QAAQ,KAAKN,EAAMK,CAAG,GAG9C,IAAMG,EAAQF,EAAS,MAAMN,CAAI,EACjC,GAAI,MAAM,QAAQQ,CAAK,GAAKC,EAAcD,CAAK,EAAG,CACjD,IAAME,EAAY,OAAOF,GAAU,SAAW,OAAO,KAAKA,CAAK,EAAIA,EAC7DG,EAAcL,EAAS,SAAS,WAAuBM,EAC7D,QAASC,EAAI,EAAGA,EAAIH,EAAU,OAAQG,GAAK,EAAG,CAC7C,IAAMC,EAAW,OAAON,GAAU,SAAWE,EAAUG,CAAC,EAAIA,EACtDE,EAAaP,EAAMM,CAAQ,EAE3BE,EAAYL,EAAYI,EAAYV,EAAKS,CAAQ,EACjDG,EAAcX,EAAS,MAAQA,EAAS,MAAMS,EAAYV,EAAKW,CAAS,EAAID,EAElFjB,EAAIK,EAAQa,EAAWC,EAAa,CAAE,MAAO,EAAK,CAAC,CACpD,CACD,MACCnB,EAAIK,EAAQE,EAAKG,CAAK,CAExB,CACA,OAAOL,CACR","sourcesContent":["import set from 'set-value'\nimport type { MapperConfig, MapperOptions } from './types'\nimport { wrapProperty } from './utils/wrapProperty'\nimport * as structure from './structure'\nimport { isPlainObject } from './utils/isPlainObject'\n\nexport function map<T>(data: T, config: MapperConfig<T>, options?: MapperOptions) {\n\tconst mapped: Record<keyof typeof config, any> = {}\n\n\tif (options?.plugins) {\n\t\toptions.plugins.forEach((plugin) => {\n\t\t\tconfig = plugin.config(config, options)\n\t\t})\n\t}\n\n\tfor (const key in config) {\n\t\tconst property = wrapProperty(config[key])\n\t\tif (!property) continue\n\n\t\tif (property.options?.init) {\n\t\t\tmapped[key] = property.options.init(data, key)\n\t\t}\n\n\t\tconst value = property.value(data)\n\t\tif (Array.isArray(value) || isPlainObject(value)) {\n\t\t\tconst innerKeys = typeof value === 'object' ? Object.keys(value) : value\n\t\t\tconst structureFn = property.options?.structure ?? structure.Keep\n\t\t\tfor (let i = 0; i < innerKeys.length; i += 1) {\n\t\t\t\tconst innerKey = typeof value === 'object' ? innerKeys[i] : i\n\t\t\t\tconst innerValue = value[innerKey]\n\n\t\t\t\tconst targetKey = structureFn(innerValue, key, innerKey)\n\t\t\t\tconst mappedValue = property.apply ? property.apply(innerValue, key, targetKey) : innerValue\n\n\t\t\t\tset(mapped, targetKey, mappedValue, { merge: true })\n\t\t\t}\n\t\t} else {\n\t\t\tset(mapped, key, value)\n\t\t}\n\t}\n\treturn mapped\n}\n"]}