{"version":3,"file":"types.mjs","names":["timeFormats.timeFormat","timeFormats.dateFormat","timeFormats.timeFormatWithSeconds"],"sources":["../../../src/utils/transformers/types.ts"],"sourcesContent":["import { UTCDate } from '@date-fns/utc';\nimport { format } from 'date-fns';\nimport * as timeFormats from '../timeFormats.js';\n\nconst outputBase = {\n  integer: (text: string) => {\n    return parseInt(text, 10);\n  },\n  /**\n   *\n   * Parse a NMB2B date/datetime.\n   *\n   * All datetimes are assumed to be UTC.\n   *\n   * Per NM B2B documentation, we only need to support these formats:\n   * - DateTimeMinute: YYYY-MM-DD hh:mm\n   * - DateTimeSecond: YYYY-MM-DD hh:mm:ss\n   * - DateYearMonthDay: YYYY-MM-DD\n   *\n   * All dates are\n   * @param text NM B2B Date string\n   * @returns Parsed Date instance\n   */\n  date: (text: string) => {\n    // eslint-disable-next-line prefer-const\n    let [date, time] = text.split(' ');\n\n    if (date === undefined || time === undefined) {\n      return new Date(text);\n    }\n\n    if (time.length === 5) {\n      time += ':00';\n    }\n\n    return new Date(`${date}T${time}Z`);\n  },\n};\n\ninterface SerDe {\n  [key: string]: {\n    input: null | ((input: never) => unknown);\n    output: null | ((input: never) => unknown);\n  };\n}\n\nexport const types = {\n  FlightLevel_DataType: {\n    input: null,\n    output: outputBase.integer,\n  },\n  DurationHourMinute: {\n    input: (d: number): string => {\n      const totalMinutes = Math.floor(d / 60);\n      const hours = Math.floor(totalMinutes / 60);\n      const minutes = totalMinutes % 60;\n      return (\n        hours.toFixed(0).padStart(2, '0') + minutes.toFixed(0).padStart(2, '0')\n      );\n    },\n    output: (s: string): number => {\n      const hours = parseInt(s.slice(0, 2), 10);\n      const minutes = parseInt(s.slice(2), 10);\n\n      return 60 * (60 * hours + minutes);\n    },\n  },\n  DurationHourMinuteSecond: {\n    input: (d: number): string => {\n      const totalMinutes = Math.floor(d / 60);\n      const hours = Math.floor(totalMinutes / 60);\n      const minutes = totalMinutes % 60;\n      const seconds = d % 60;\n\n      return (\n        hours.toFixed(0).padStart(2, '0') +\n        minutes.toFixed(0).padStart(2, '0') +\n        seconds.toFixed(0).padStart(2, '0')\n      );\n    },\n    output: (s: string): number => {\n      const hours = parseInt(s.slice(0, 2), 10);\n      const minutes = parseInt(s.slice(2, 4), 10);\n      const seconds = parseInt(s.slice(4), 10);\n\n      return 3600 * hours + 60 * minutes + seconds;\n    },\n  },\n  DurationMinute: {\n    input: (d: number): number => Math.floor(d / 60),\n    output: (d: number): number => 60 * d,\n  },\n  CountsValue: {\n    input: null,\n    output: outputBase.integer,\n  },\n  DateTimeMinute: {\n    input: (d: Date): string => format(new UTCDate(d), timeFormats.timeFormat),\n    output: outputBase.date,\n  },\n  DateYearMonthDay: {\n    input: (d: Date): string => format(new UTCDate(d), timeFormats.dateFormat),\n    output: outputBase.date,\n  },\n  DateTimeSecond: {\n    input: (d: Date): string =>\n      format(new UTCDate(d), timeFormats.timeFormatWithSeconds),\n    output: outputBase.date,\n  },\n  DistanceNM: {\n    input: null,\n    output: outputBase.integer,\n  },\n  DistanceM: {\n    input: null,\n    output: outputBase.integer,\n  },\n  Bearing: {\n    input: null,\n    output: outputBase.integer,\n  },\n  OTMVThreshold: {\n    input: null,\n    output: outputBase.integer,\n  },\n} satisfies SerDe;\n"],"mappings":";;;;AAIA,MAAM,aAAa;CACjB,UAAU,SAAiB;AACzB,SAAO,SAAS,MAAM,GAAG;;;;;;;;;;;;;;;;;CAiB3B,OAAO,SAAiB;EAEtB,IAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,IAAI;AAElC,MAAI,SAAS,KAAA,KAAa,SAAS,KAAA,EACjC,QAAO,IAAI,KAAK,KAAK;AAGvB,MAAI,KAAK,WAAW,EAClB,SAAQ;AAGV,yBAAO,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG;;CAEtC;AASD,MAAa,QAAQ;CACnB,sBAAsB;EACpB,OAAO;EACP,QAAQ,WAAW;EACpB;CACD,oBAAoB;EAClB,QAAQ,MAAsB;GAC5B,MAAM,eAAe,KAAK,MAAM,IAAI,GAAG;GACvC,MAAM,QAAQ,KAAK,MAAM,eAAe,GAAG;GAC3C,MAAM,UAAU,eAAe;AAC/B,UACE,MAAM,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,QAAQ,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI;;EAG3E,SAAS,MAAsB;GAC7B,MAAM,QAAQ,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG;GACzC,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG;AAExC,UAAO,MAAM,KAAK,QAAQ;;EAE7B;CACD,0BAA0B;EACxB,QAAQ,MAAsB;GAC5B,MAAM,eAAe,KAAK,MAAM,IAAI,GAAG;GACvC,MAAM,QAAQ,KAAK,MAAM,eAAe,GAAG;GAC3C,MAAM,UAAU,eAAe;GAC/B,MAAM,UAAU,IAAI;AAEpB,UACE,MAAM,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI,GACjC,QAAQ,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI,GACnC,QAAQ,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI;;EAGvC,SAAS,MAAsB;GAC7B,MAAM,QAAQ,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG;GACzC,MAAM,UAAU,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG;GAC3C,MAAM,UAAU,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG;AAExC,UAAO,OAAO,QAAQ,KAAK,UAAU;;EAExC;CACD,gBAAgB;EACd,QAAQ,MAAsB,KAAK,MAAM,IAAI,GAAG;EAChD,SAAS,MAAsB,KAAK;EACrC;CACD,aAAa;EACX,OAAO;EACP,QAAQ,WAAW;EACpB;CACD,gBAAgB;EACd,QAAQ,MAAoB,OAAO,IAAI,QAAQ,EAAE,EAAEA,WAAuB;EAC1E,QAAQ,WAAW;EACpB;CACD,kBAAkB;EAChB,QAAQ,MAAoB,OAAO,IAAI,QAAQ,EAAE,EAAEC,WAAuB;EAC1E,QAAQ,WAAW;EACpB;CACD,gBAAgB;EACd,QAAQ,MACN,OAAO,IAAI,QAAQ,EAAE,EAAEC,sBAAkC;EAC3D,QAAQ,WAAW;EACpB;CACD,YAAY;EACV,OAAO;EACP,QAAQ,WAAW;EACpB;CACD,WAAW;EACT,OAAO;EACP,QAAQ,WAAW;EACpB;CACD,SAAS;EACP,OAAO;EACP,QAAQ,WAAW;EACpB;CACD,eAAe;EACb,OAAO;EACP,QAAQ,WAAW;EACpB;CACF"}