{"version":3,"file":"encoding.cjs","sources":["../../src/encoding.ts"],"sourcesContent":["import {Serializer, ListOptions, RequiredOptions} from \"./types\";\n\nexport const defaultDecoder = JSON.parse;\nexport const defaultEncoder = JSON.stringify;\n\nexport const stringSerializer: Serializer<string> = {\n    encode: (value: string) => value,\n    decode: (value: string) => value,\n}\n\nexport const numberSerializer: Serializer<number> = {\n    encode: (value: number) => value.toString(),\n    decode: (value: string) => parseInt(value)\n}\n\nexport const booleanSerializer: Serializer<boolean> = {\n    encode: (value: boolean) => value ? \"true\" : \"false\",\n    decode: (value: string) => value === \"true\",\n}\n\nexport const datetimeSerializer: Serializer<Date> = {\n    encode: (value: Date) => value.toISOString(),\n    decode: (value: string) => new Date(value),\n}\n\nexport const dateSerializer: Serializer<Date> = {\n    encode: (value: Date) => value.toISOString().split('T')[0] || \"\",\n    decode: (value: string) => new Date(`${value}T00:00:00Z`),\n}\n\nexport const decodeParam = <T,>(param: string, decoder: (value: string) => T = defaultDecoder) => {\n    return decoder(decodeURIComponent(param)) as T;\n}\n\nexport const encodeParam = <T,>(param: T, encoder: (value: T) => string = defaultEncoder) => {\n    return encodeURIComponent(encoder(param));\n}\n\ntype BuilderLike = {\n    state: RequiredOptions<unknown>\n}\n\nexport const createListSerializer = ({separator , item}: ListOptions<unknown>) => {\n    return {\n        encode: (value: unknown[]) => {\n            const builder = item as unknown as BuilderLike;\n            const {encode} = builder.state;\n            return value.map((item) => encode(item)).join(separator);\n        },\n        decode: (value: string) => {\n            const builder = item as unknown as BuilderLike;\n            const {encode} = builder.state;\n            if (!value) { return [] }\n            return value.split(separator || \",\").map((item) => encode(item))\n        }\n    }\n}\n"],"names":["item"],"mappings":";;AAEO,MAAM,iBAAiB,KAAK;AAC5B,MAAM,iBAAiB,KAAK;AAE5B,MAAM,mBAAuC;AAAA,EAChD,QAAQ,CAAC,UAAkB;AAAA,EAC3B,QAAQ,CAAC,UAAkB;AAC/B;AAEO,MAAM,mBAAuC;AAAA,EAChD,QAAQ,CAAC,UAAkB,MAAM,SAAS;AAAA,EAC1C,QAAQ,CAAC,UAAkB,SAAS,KAAK;AAC7C;AAEO,MAAM,oBAAyC;AAAA,EAClD,QAAQ,CAAC,UAAmB,QAAQ,SAAS;AAAA,EAC7C,QAAQ,CAAC,UAAkB,UAAU;AACzC;AAEO,MAAM,qBAAuC;AAAA,EAChD,QAAQ,CAAC,UAAgB,MAAM,YAAY;AAAA,EAC3C,QAAQ,CAAC,UAAkB,IAAI,KAAK,KAAK;AAC7C;AAEO,MAAM,iBAAmC;AAAA,EAC5C,QAAQ,CAAC,UAAgB,MAAM,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,EAC9D,QAAQ,CAAC,8BAAsB,KAAK,GAAG,KAAK,YAAY;AAC5D;AAEO,MAAM,cAAc,CAAK,OAAe,UAAgC,mBAAmB;AACvF,SAAA,QAAQ,mBAAmB,KAAK,CAAC;AAC5C;AAEO,MAAM,cAAc,CAAK,OAAU,UAAgC,mBAAmB;AAClF,SAAA,mBAAmB,QAAQ,KAAK,CAAC;AAC5C;AAMO,MAAM,uBAAuB,CAAC,EAAC,WAAY,WAAgC;AACvE,SAAA;AAAA,IACH,QAAQ,CAAC,UAAqB;AAC1B,YAAM,UAAU;AACV,YAAA,EAAC,WAAU,QAAQ;AAClB,aAAA,MAAM,IAAI,CAACA,UAAS,OAAOA,KAAI,CAAC,EAAE,KAAK,SAAS;AAAA,IAC3D;AAAA,IACA,QAAQ,CAAC,UAAkB;AACvB,YAAM,UAAU;AACV,YAAA,EAAC,WAAU,QAAQ;AACzB,UAAI,CAAC,OAAO;AAAE,eAAO,CAAC;AAAA,MAAA;AACf,aAAA,MAAM,MAAM,aAAa,GAAG,EAAE,IAAI,CAACA,UAAS,OAAOA,KAAI,CAAC;AAAA,IAAA;AAAA,EAEvE;AACJ;;;;;;;;;;;"}