import { ConverterSet, ConverterType } from '../domain.js'; import { GoogleProtoDuration } from './types.js'; export const duration: ConverterSet = { types: ['google.protobuf.Duration'], [ConverterType.TO_JSON]: { transform: ({ seconds = '0', nanos = 0 }: GoogleProtoDuration) => { let nanosPortion = ''; if (nanos !== 0) { nanosPortion = `.${nanos.toString().padStart(9, '0')}`; } return `${seconds}${nanosPortion}s`; }, }, [ConverterType.FROM_JSON]: { transform: (val: string): GoogleProtoDuration => { const [seconds, nanos] = val.substring(0, val.length - 1).split('.'); return { seconds, nanos: nanosForString(nanos), }; }, }, }; function nanosForString(nanos: string) { let res = 0; if (nanos !== undefined) { const precision = 3 - nanos.length / 3; res = parseInt(nanos, 10) * Math.pow(1000, precision); } return res; }