UNPKG

@fourlights/mapper

Version:

A simple data mapper written in typescript

1 lines 2.27 kB
{"version":3,"sources":["../../../src/lib/plugins/changeCasing.ts"],"names":["defu","ChangeCasingPlugin","options","config","key","property","newCasing","originalValueFn","casedValueFn","data","value"],"mappings":"iCAAA,OAAOA,MAAU,OAQV,IAAMC,EAAN,KAAiD,CACtC,SAAsC,CAAE,OAAQ,MAAO,EAExE,YAAYC,EAAqC,CAChD,KAAK,SAAWF,EAAKE,EAAS,KAAK,QAAQ,CAC5C,CAEA,OAAUC,EAAyBD,EAAqD,CACvF,QAAWE,KAAOD,EAAQ,CACzB,IAAME,EAAWF,EAAOC,CAAG,EAErBE,EACL,OAAOD,GAAa,SAChBA,EAAS,SAA+C,QAAU,KAAK,UAAU,OAClF,KAAK,UAAU,OAEnB,GAAIC,IAAc,OAAQ,CACzB,IAAMC,EAAkB,OAAOF,GAAa,WAAaA,EAAWA,EAAS,MACvEG,EAAgBC,GAAY,CACjC,IAAMC,EAAQH,EAAgBE,CAAI,EAClC,OAAI,OAAOC,GAAU,SAAiBA,EAC/BJ,IAAc,QAAUI,EAAM,YAAY,EAAIA,EAAM,YAAY,CACxE,EACAP,EAAOC,CAAG,EACT,OAAOC,GAAa,SAAW,CAAE,GAAGA,EAAU,MAAOG,CAAa,EAAIA,CACxE,CACD,CACA,OAAOL,CACR,CACD","sourcesContent":["import defu from 'defu'\nimport type { MapperConfig, MapperOptions, MapperPlugin } from '../types'\n\nexport type ChangeCasingPluginOptions = {\n\tcasing: 'lower' | 'upper' | 'keep'\n}\nexport type ChangeCasingPluginPropertyOptions = ChangeCasingPluginOptions // same options as the plugin itself, but per-property\n\nexport class ChangeCasingPlugin implements MapperPlugin {\n\tprivate readonly _options: ChangeCasingPluginOptions = { casing: 'keep' }\n\n\tconstructor(options?: ChangeCasingPluginOptions) {\n\t\tthis._options = defu(options, this._options)\n\t}\n\n\tconfig<T>(config: MapperConfig<T>, options: MapperOptions | undefined): MapperConfig<T> {\n\t\tfor (const key in config) {\n\t\t\tconst property = config[key]\n\n\t\t\tconst newCasing =\n\t\t\t\ttypeof property === 'object'\n\t\t\t\t\t? (property.options as ChangeCasingPluginPropertyOptions)?.casing || this._options?.casing\n\t\t\t\t\t: this._options?.casing\n\n\t\t\tif (newCasing !== 'keep') {\n\t\t\t\tconst originalValueFn = typeof property === 'function' ? property : property.value\n\t\t\t\tconst casedValueFn = (data: T) => {\n\t\t\t\t\tconst value = originalValueFn(data)\n\t\t\t\t\tif (typeof value !== 'string') return value\n\t\t\t\t\treturn newCasing === 'upper' ? value.toUpperCase() : value.toLowerCase()\n\t\t\t\t}\n\t\t\t\tconfig[key] =\n\t\t\t\t\ttypeof property === 'object' ? { ...property, value: casedValueFn } : casedValueFn\n\t\t\t}\n\t\t}\n\t\treturn config\n\t}\n}\n"]}