UNPKG

advanced-search-params

Version:

[![npm version](https://badge.fury.io/js/%40urlkit%2Fsearch-params.svg)](https://www.npmjs.com/package/advanced-search-params) [![jsDelivr hits](https://data.jsdelivr.com/v1/package/npm/advanced-search-params/badge)](https://www.jsdelivr.com/package/npm/a

1 lines 3.97 kB
{"version":3,"sources":["../src/lib/parsers.ts"],"names":["parseAsTimestamp","options","value","num","parseAsIsoDateTime","date","parseAsStringEnum","enumValues","parseAsNumber","parseAsBoolean"],"mappings":"aAYO,SAASA,EAAiBC,CAAiC,CAAA,GAAI,CACpE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EAAkB,CACxB,IAAMC,EAAM,MAAOD,CAAAA,CAAK,EACxB,OAAI,KAAA,CAAMC,CAAG,CAAUF,CAAAA,CAAAA,CAAQ,YACxBE,CAAAA,CACT,EACA,SAAYD,CAAAA,CAAAA,EAAkBA,EAAM,QAAS,EAAA,CAC7C,SAAUD,CAAQ,CAAA,QACpB,CACF,CAEO,SAASG,EAAmBH,CAA+B,CAAA,GAAI,CACpE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EAAkB,CACxB,IAAMG,EAAO,IAAI,IAAA,CAAKH,CAAK,CAC3B,CAAA,OAAO,MAAMG,CAAK,CAAA,OAAA,EAAS,CAAA,CAAIJ,EAAQ,YAAeI,CAAAA,CACxD,EACA,SAAYH,CAAAA,CAAAA,EAAgBA,EAAM,WAAY,EAAA,CAC9C,QAAUD,CAAAA,CAAAA,CAAQ,QACpB,CACF,CAGO,SAASK,CACdC,CAAAA,CAAAA,CACAN,EAA4B,EAAC,CAC7B,CACA,OAAO,CACL,MAAQC,CACCK,EAAAA,CAAAA,CAAW,SAASL,CAAU,CAAA,CAChCA,EACDD,CAAQ,CAAA,YAAA,CAEd,SAAYC,CAAAA,CAAAA,EAAaA,EACzB,QAAUD,CAAAA,CAAAA,CAAQ,WAAcC,CAAaK,EAAAA,CAAAA,CAAW,SAASL,CAAK,CAAA,CACxE,CACF,CAGO,SAASM,CACdP,CAAAA,CAAAA,CAGI,EACJ,CAAA,CACA,OAAO,CACL,KAAA,CAAQC,CAAkB,EAAA,CACxB,IAAMC,CAAM,CAAA,MAAA,CAAOD,CAAK,CACxB,CAAA,OAAI,MAAMC,CAAG,CAAA,CAAUF,EAAQ,YAC3BA,CAAAA,CAAAA,CAAQ,MAAQ,KAAaE,CAAAA,EAAAA,CAAAA,CAAMF,EAAQ,GAAYA,CAAAA,CAAAA,CAAQ,IAC/DA,CAAQ,CAAA,GAAA,GAAQ,KAAaE,CAAAA,EAAAA,CAAAA,CAAMF,EAAQ,GAAYA,CAAAA,CAAAA,CAAQ,IAC5DE,CACT,CAAA,CACA,UAAYD,CAAkBA,EAAAA,CAAAA,CAAM,UACpC,CAAA,QAAA,CAAUD,EAAQ,QACpB,CACF,CAGO,SAASQ,CAAAA,CAAeR,EAAkC,EAAC,CAAG,CACnE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EACFA,IAAU,MAAe,CAAA,CAAA,CAAA,CACzBA,IAAU,OAAgB,CAAA,CAAA,CAAA,CACvBD,EAAQ,YAEjB,CAAA,SAAA,CAAYC,GAAmBA,CAAM,CAAA,QAAA,GACrC,QAAUD,CAAAA,CAAAA,CAAQ,QACpB,CACF","file":"parsers.cjs","sourcesContent":["export interface ParserOptions<T> {\n defaultValue?: T;\n validate?: (value: T) => boolean;\n}\n\nexport interface Parser<T> {\n parse: (value: string) => T | undefined;\n serialize: (value: T) => string;\n validate?: (value: T) => boolean;\n}\n\n// Date Parsers\nexport function parseAsTimestamp(options: ParserOptions<number> = {}) {\n return {\n parse: (value: string) => {\n const num = Number(value);\n if (isNaN(num)) return options.defaultValue;\n return num;\n },\n serialize: (value: number) => value.toString(),\n validate: options.validate,\n };\n}\n\nexport function parseAsIsoDateTime(options: ParserOptions<Date> = {}) {\n return {\n parse: (value: string) => {\n const date = new Date(value);\n return isNaN(date.getTime()) ? options.defaultValue : date;\n },\n serialize: (value: Date) => value.toISOString(),\n validate: options.validate,\n };\n}\n\n// Enum Parser\nexport function parseAsStringEnum<T extends string>(\n enumValues: readonly T[],\n options: ParserOptions<T> = {}\n) {\n return {\n parse: (value: string) => {\n return enumValues.includes(value as T)\n ? (value as T)\n : options.defaultValue;\n },\n serialize: (value: T) => value,\n validate: options.validate ?? ((value: T) => enumValues.includes(value)),\n };\n}\n\n// Number Parser with Range\nexport function parseAsNumber(\n options: ParserOptions<number> & {\n min?: number;\n max?: number;\n } = {}\n) {\n return {\n parse: (value: string) => {\n const num = Number(value);\n if (isNaN(num)) return options.defaultValue;\n if (options.min !== undefined && num < options.min) return options.min;\n if (options.max !== undefined && num > options.max) return options.max;\n return num;\n },\n serialize: (value: number) => value.toString(),\n validate: options.validate,\n };\n}\n\n// Boolean Parser\nexport function parseAsBoolean(options: ParserOptions<boolean> = {}) {\n return {\n parse: (value: string) => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n return options.defaultValue;\n },\n serialize: (value: boolean) => value.toString(),\n validate: options.validate,\n };\n}\n"]}