@dgac/nmb2b-client
Version:
EUROCONTROL Network Manager B2B SOAP client
1 lines • 4.88 kB
Source Map (JSON)
{"version":3,"file":"serializer.mjs","names":[],"sources":["../../../src/utils/transformers/serializer.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { types } from './types.js';\nimport { piped, identity, evolve, map } from 'remeda';\n\nexport function prepareSerializer<T>(schema: any): (input: T) => T {\n const transformer = prepareTransformer(schema);\n return piped(\n reorderKeys(schema),\n transformer ? evolve(transformer) : identity,\n // (obj) => {\n // console.log(JSON.stringify(obj, null, 2));\n // return obj;\n // },\n ) as any as (input: T) => T;\n}\n\nfunction reduceXSDType(str: string): string {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return str.split('|')[0]!;\n}\n\ninterface Schema {\n [k: string]: string | Schema;\n}\n\ninterface Transformer {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n [k: string]: (input: any) => any | Transformer;\n}\n\nfunction prepareTransformer(schema: Schema): null | Transformer {\n return Object.keys(schema).reduce((prev: null | Transformer, curr) => {\n let key = curr;\n let isArray = false;\n\n /**\n * If the current key marks an array, we need to map over the values instead of just trying\n * to transform the value.\n *\n * We also need to assign the correct key to the transformer.\n */\n if (curr.endsWith('[]')) {\n key = curr.slice(0, -2);\n isArray = true;\n }\n\n if (typeof schema[curr] === 'string') {\n const type = reduceXSDType(schema[curr]);\n\n if ((types as any)[type]?.input) {\n const transformer = (types as any)[type].input;\n return { ...prev, [key]: isArray ? map(transformer) : transformer };\n }\n } else if (typeof schema[curr] === 'object') {\n const subItem = prepareTransformer(schema[curr]);\n if (subItem) {\n return {\n ...prev,\n [key]: isArray ? map(evolve(subItem)) : subItem,\n };\n }\n }\n\n return prev;\n }, null);\n}\n\nexport function reorderKeys<O extends { [key: string]: any }>(\n schema: Schema,\n): (obj: O) => O {\n return (obj: O): O => {\n // console.log(JSON.stringify(schema, null, 2));\n // console.log(JSON.stringify(obj, null, 2));\n\n // Loop through schema, pull property from Object\n return Object.keys(schema).reduce<any>((prev, curr) => {\n const lookupKey: string = curr.replace(/\\[\\]$/, '');\n const isArrayExpected: boolean = curr.endsWith('[]');\n\n if (!(lookupKey in obj)) {\n return prev;\n }\n\n const currSchema = schema[curr];\n\n if (typeof currSchema === 'string') {\n prev[lookupKey] = obj[lookupKey];\n return prev;\n }\n\n if (typeof currSchema === 'object') {\n if (\n Object.keys(currSchema).filter(\n (k) => k !== 'targetNSAlias' && k !== 'targetNamespace',\n ).length\n ) {\n prev[lookupKey] =\n isArrayExpected && obj[lookupKey] && Array.isArray(obj[lookupKey])\n ? obj[lookupKey].map(reorderKeys(currSchema))\n : reorderKeys(currSchema)(obj[lookupKey]);\n return prev;\n }\n\n prev[lookupKey] = obj[lookupKey];\n return prev;\n }\n\n return prev;\n }, {});\n };\n}\n"],"mappings":";;;;AAQA,SAAgB,kBAAqB,QAA8B;CACjE,MAAM,cAAc,mBAAmB,OAAO;AAC9C,QAAO,MACL,YAAY,OAAO,EACnB,cAAc,OAAO,YAAY,GAAG,SAKrC;;AAGH,SAAS,cAAc,KAAqB;AAE1C,QAAO,IAAI,MAAM,IAAI,CAAC;;AAYxB,SAAS,mBAAmB,QAAoC;AAC9D,QAAO,OAAO,KAAK,OAAO,CAAC,QAAQ,MAA0B,SAAS;EACpE,IAAI,MAAM;EACV,IAAI,UAAU;;;;;;;AAQd,MAAI,KAAK,SAAS,KAAK,EAAE;AACvB,SAAM,KAAK,MAAM,GAAG,GAAG;AACvB,aAAU;;AAGZ,MAAI,OAAO,OAAO,UAAU,UAAU;GACpC,MAAM,OAAO,cAAc,OAAO,MAAM;AAExC,OAAK,MAAc,OAAO,OAAO;IAC/B,MAAM,cAAe,MAAc,MAAM;AACzC,WAAO;KAAE,GAAG;MAAO,MAAM,UAAU,IAAI,YAAY,GAAG;KAAa;;aAE5D,OAAO,OAAO,UAAU,UAAU;GAC3C,MAAM,UAAU,mBAAmB,OAAO,MAAM;AAChD,OAAI,QACF,QAAO;IACL,GAAG;KACF,MAAM,UAAU,IAAI,OAAO,QAAQ,CAAC,GAAG;IACzC;;AAIL,SAAO;IACN,KAAK;;AAGV,SAAgB,YACd,QACe;AACf,SAAQ,QAAc;AAKpB,SAAO,OAAO,KAAK,OAAO,CAAC,QAAa,MAAM,SAAS;GACrD,MAAM,YAAoB,KAAK,QAAQ,SAAS,GAAG;GACnD,MAAM,kBAA2B,KAAK,SAAS,KAAK;AAEpD,OAAI,EAAE,aAAa,KACjB,QAAO;GAGT,MAAM,aAAa,OAAO;AAE1B,OAAI,OAAO,eAAe,UAAU;AAClC,SAAK,aAAa,IAAI;AACtB,WAAO;;AAGT,OAAI,OAAO,eAAe,UAAU;AAClC,QACE,OAAO,KAAK,WAAW,CAAC,QACrB,MAAM,MAAM,mBAAmB,MAAM,kBACvC,CAAC,QACF;AACA,UAAK,aACH,mBAAmB,IAAI,cAAc,MAAM,QAAQ,IAAI,WAAW,GAC9D,IAAI,WAAW,IAAI,YAAY,WAAW,CAAC,GAC3C,YAAY,WAAW,CAAC,IAAI,WAAW;AAC7C,YAAO;;AAGT,SAAK,aAAa,IAAI;AACtB,WAAO;;AAGT,UAAO;KACN,EAAE,CAAC"}