@superbright/indexeddb-orm 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/analytics/MixpanelProvider.cjs +1 -1
- package/dist/features/analytics/MixpanelProvider.cjs.map +1 -1
- package/dist/features/analytics/MixpanelProvider.mjs +22 -20
- package/dist/features/analytics/MixpanelProvider.mjs.map +1 -1
- package/dist/features/analytics/analytics.cjs +1 -1
- package/dist/features/analytics/analytics.cjs.map +1 -1
- package/dist/features/analytics/analytics.d.ts +743 -0
- package/dist/features/analytics/analytics.mjs +264 -135
- package/dist/features/analytics/analytics.mjs.map +1 -1
- package/dist/features/filters/transformers.cjs +1 -1
- package/dist/features/filters/transformers.cjs.map +1 -1
- package/dist/features/filters/transformers.mjs +50 -50
- package/dist/features/filters/transformers.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.cjs","sources":["../../../src/features/filters/transformers.ts"],"sourcesContent":["import type { SortBy } from \"../../schema\";\n\ntype RawFilters = Record<string, unknown>;\n\nconst DEFAULT_SORT_PARAM_MAP: Record<string, SortBy> = {\n priceLowToHigh: \"cost_low_to_high\",\n priceHighToLow: \"cost_high_to_low\",\n cost_low_to_high: \"cost_low_to_high\",\n cost_high_to_low: \"cost_high_to_low\",\n newest: \"newest\",\n relevance: \"relevance\",\n};\n\nconst DEFAULT_LIMIT = 10;\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_SORT: SortBy = \"relevance\";\n\nconst isObjectWithValue = (\n value: unknown,\n): value is { value: unknown; bodyKey?: unknown } =>\n value != null && typeof value === \"object\" && \"value\" in value;\n\nconst toArray = (value: unknown): unknown[] => {\n if (Array.isArray(value)) return value.flat();\n return value != null ? [value] : [];\n};\n\nconst toStringArray = (value: unknown): string[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (item == null) return undefined;\n if (typeof item === \"string\") return item;\n if (typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n return undefined;\n })\n .filter((item): item is string => typeof item === \"string\" && item.length > 0);\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberArray = (value: unknown): number[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (typeof item === \"number\" && Number.isFinite(item)) return item;\n if (typeof item === \"string\" && item.trim() !== \"\") {\n const parsed = Number.parseInt(item, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n })\n .filter((item): item is number => typeof item === \"number\");\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberOrNull = (value: unknown): number | null => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number.parseFloat(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return null;\n};\n\nconst mergeHighlightSources = (values: unknown[]): string[] | undefined => {\n const merged = values\n .flatMap((value) => toStringArray(value) ?? [])\n .filter((item) => item.length > 0);\n return merged.length ? Array.from(new Set(merged)) : undefined;\n};\n\nconst normalizeRawFilters = (filters: RawFilters): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n Object.entries(filters ?? {}).forEach(([key, val]) => {\n if ([\"page\", \"sortBy\", \"limit\"].includes(key)) return;\n if (Array.isArray(val)) {\n if (val.every((v) => isObjectWithValue(v))) {\n const mapped = val.map((v) => (v as { value: unknown }).value);\n result[key] = mapped.some(Array.isArray) ? mapped.flat() : mapped;\n } else {\n result[key] = val.flat();\n }\n } else if (isObjectWithValue(val)) {\n result[key] = val.value;\n } else {\n result[key] = key === \"base_price\" && val == null ? 15000 : val;\n }\n });\n\n return result;\n};\n\nconst redirectByBodyKey = (\n raw: RawFilters,\n { dropSource = true }: { dropSource?: boolean } = {},\n): Record<string, unknown> => {\n const draft: Record<string, unknown> = { ...raw };\n\n Object.entries(raw ?? {}).forEach(([prop, arr]) => {\n if (!Array.isArray(arr)) return;\n\n const items = arr.filter((it) => isObjectWithValue(it) && it.bodyKey);\n if (!items.length) return;\n\n items.forEach((it: any) => {\n const target = String(it.bodyKey ?? \"\");\n if (!target || target === prop) return;\n\n const vals = Array.isArray(it.value)\n ? it.value\n : it.value !== undefined\n ? [it.value]\n : [];\n\n const existing = draft[target];\n const merged = Array.from(\n new Set([\n ...(Array.isArray(existing)\n ? existing\n : existing != null\n ? [existing]\n : []),\n ...vals,\n ]),\n );\n\n draft[target] = merged;\n });\n\n if (dropSource) {\n delete draft[prop];\n }\n });\n\n return draft;\n};\n\nconst resolveSortBy = (\n value: unknown,\n sortParamMap: Record<string, SortBy>,\n defaultSort: SortBy,\n): SortBy => {\n if (typeof value === \"string\" && value.length > 0) {\n const mapped = sortParamMap[value];\n if (mapped) return mapped;\n if (\n value === \"relevance\" ||\n value === \"newest\" ||\n value === \"cost_low_to_high\" ||\n value === \"cost_high_to_low\"\n ) {\n return value;\n }\n }\n return defaultSort;\n};\n\nexport interface FilterPreferences {\n base_price: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n}\n\nexport interface UnitsSearchRequest {\n limit: number;\n page: number;\n sortBy: SortBy;\n base_price?: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n nearBuilding?: string[];\n nearNeighbourhood?: string[];\n}\n\nexport interface TransformUnitsSearchOptions {\n defaultLimit?: number;\n defaultPage?: number;\n defaultSort?: SortBy;\n sortParamMap?: Record<string, SortBy>;\n}\n\nexport const transformFiltersToPreferences = (\n rawFilters: RawFilters,\n): FilterPreferences => {\n const normalized = normalizeRawFilters(redirectByBodyKey(rawFilters));\n\n const mergedAvailability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n const mergedBedrooms = toNumberArray(normalized.qty_bedrooms);\n const basePrice = toNumberOrNull(normalized.base_price);\n\n return {\n base_price: basePrice,\n date_availability: mergedAvailability,\n qty_bedrooms: mergedBedrooms,\n highlights: toStringArray(normalized.highlights),\n };\n};\n\nexport const transformFiltersToUnitsSearchParams = (\n rawFilters: RawFilters,\n options: TransformUnitsSearchOptions = {},\n): UnitsSearchRequest => {\n const { defaultLimit, defaultPage, defaultSort, sortParamMap } = options;\n const map = { ...DEFAULT_SORT_PARAM_MAP, ...(sortParamMap ?? {}) };\n const remapped = redirectByBodyKey(rawFilters);\n const normalized = normalizeRawFilters(remapped);\n\n const limitCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).limit) ??\n toNumberOrNull(remapped.limit);\n const pageCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).page) ??\n toNumberOrNull(remapped.page);\n\n const highlights = mergeHighlightSources([\n normalized.highlights,\n normalized.preferredEnvironment,\n normalized.spaceUsage,\n ]);\n const bedrooms = toNumberArray(normalized.qty_bedrooms);\n const base_price = toNumberOrNull(normalized.base_price);\n const date_availability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n\n const sortBy = resolveSortBy(\n (rawFilters as Record<string, unknown>).sortBy,\n map,\n defaultSort ?? DEFAULT_SORT,\n );\n\n const payload: UnitsSearchRequest = {\n limit: limitCandidate ?? defaultLimit ?? DEFAULT_LIMIT,\n page: pageCandidate ?? defaultPage ?? DEFAULT_PAGE,\n sortBy,\n };\n\n if (base_price != null) {\n payload.base_price = base_price;\n }\n\n if (date_availability && date_availability.length > 0) {\n payload.date_availability = date_availability;\n }\n\n if (bedrooms && bedrooms.length > 0) {\n payload.qty_bedrooms = bedrooms;\n }\n\n if (highlights && highlights.length > 0) {\n payload.highlights = highlights;\n }\n\n const nearBuilding = toStringArray(normalized.nearBuilding);\n if (nearBuilding && nearBuilding.length > 0) {\n payload.nearBuilding = nearBuilding;\n }\n\n const nearNeighbourhood = toStringArray(normalized.nearNeighbourhood);\n if (nearNeighbourhood && nearNeighbourhood.length > 0) {\n payload.nearNeighbourhood = nearNeighbourhood;\n }\n\n return payload;\n};\n\nexport const defaultSortParamMap = { ...DEFAULT_SORT_PARAM_MAP };\n"],"names":["DEFAULT_SORT_PARAM_MAP","DEFAULT_LIMIT","DEFAULT_PAGE","DEFAULT_SORT","isObjectWithValue","value","toArray","toStringArray","mapped","item","toNumberArray","parsed","toNumberOrNull","mergeHighlightSources","values","merged","normalizeRawFilters","filters","result","key","val","v","redirectByBodyKey","raw","dropSource","draft","prop","arr","items","it","target","vals","existing","resolveSortBy","sortParamMap","defaultSort","transformFiltersToPreferences","rawFilters","normalized","mergedAvailability","mergedBedrooms","transformFiltersToUnitsSearchParams","options","defaultLimit","defaultPage","map","remapped","limitCandidate","pageCandidate","highlights","bedrooms","base_price","date_availability","sortBy","payload","nearBuilding","nearNeighbourhood","defaultSortParamMap"],"mappings":"gFAIA,MAAMA,EAAiD,CACrD,eAAgB,mBAChB,eAAgB,mBAChB,iBAAkB,mBAClB,iBAAkB,mBAClB,OAAQ,SACR,UAAW,WACb,EAEMC,EAAgB,GAChBC,EAAe,EACfC,EAAuB,YAEvBC,EACJC,GAEAA,GAAS,MAAQ,OAAOA,GAAU,UAAY,UAAWA,EAErDC,EAAWD,GACX,MAAM,QAAQA,CAAK,EAAUA,EAAM,KAAA,EAChCA,GAAS,KAAO,CAACA,CAAK,EAAI,CAAA,EAG7BE,EAAiBF,GAAyC,CAC9D,MAAMG,EAASF,EAAQD,CAAK,EACzB,IAAKI,GAAS,CACb,GAAIA,GAAQ,KACZ,IAAI,OAAOA,GAAS,SAAU,OAAOA,EACrC,GAAI,OAAOA,GAAS,UAAY,OAAOA,GAAS,UAC9C,OAAO,OAAOA,CAAI,EAGtB,CAAC,EACA,OAAQA,GAAyB,OAAOA,GAAS,UAAYA,EAAK,OAAS,CAAC,EAC/E,OAAOD,EAAO,OAAS,MAAM,KAAK,IAAI,IAAIA,CAAM,CAAC,EAAI,MACvD,EAEME,EAAiBL,GAAyC,CAC9D,MAAMG,EAASF,EAAQD,CAAK,EACzB,IAAKI,GAAS,CACb,GAAI,OAAOA,GAAS,UAAY,OAAO,SAASA,CAAI,EAAG,OAAOA,EAC9D,GAAI,OAAOA,GAAS,UAAYA,EAAK,KAAA,IAAW,GAAI,CAClD,MAAME,EAAS,OAAO,SAASF,EAAM,EAAE,EACvC,OAAO,OAAO,SAASE,CAAM,EAAIA,EAAS,MAC5C,CAEF,CAAC,EACA,OAAQF,GAAyB,OAAOA,GAAS,QAAQ,EAC5D,OAAOD,EAAO,OAAS,MAAM,KAAK,IAAI,IAAIA,CAAM,CAAC,EAAI,MACvD,EAEMI,EAAkBP,GAAkC,CACxD,GAAI,OAAOA,GAAU,UAAY,OAAO,SAASA,CAAK,EAAG,OAAOA,EAChE,GAAI,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,GAAI,CACpD,MAAMM,EAAS,OAAO,WAAWN,CAAK,EACtC,GAAI,OAAO,SAASM,CAAM,EAAG,OAAOA,CACtC,CACA,OAAO,IACT,EAEME,EAAyBC,GAA4C,CACzE,MAAMC,EAASD,EACZ,QAAST,GAAUE,EAAcF,CAAK,GAAK,CAAA,CAAE,EAC7C,OAAQI,GAASA,EAAK,OAAS,CAAC,EACnC,OAAOM,EAAO,OAAS,MAAM,KAAK,IAAI,IAAIA,CAAM,CAAC,EAAI,MACvD,EAEMC,EAAuBC,GAAiD,CAC5E,MAAMC,EAAkC,CAAA,EAExC,cAAO,QAAQD,GAAW,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAG,IAAM,CACpD,GAAI,EAAC,OAAQ,SAAU,OAAO,EAAE,SAASD,CAAG,EAC5C,GAAI,MAAM,QAAQC,CAAG,EACnB,GAAIA,EAAI,MAAOC,GAAMjB,EAAkBiB,CAAC,CAAC,EAAG,CAC1C,MAAMb,EAASY,EAAI,IAAKC,GAAOA,EAAyB,KAAK,EAC7DH,EAAOC,CAAG,EAAIX,EAAO,KAAK,MAAM,OAAO,EAAIA,EAAO,KAAA,EAASA,CAC7D,MACEU,EAAOC,CAAG,EAAIC,EAAI,KAAA,OAEXhB,EAAkBgB,CAAG,EAC9BF,EAAOC,CAAG,EAAIC,EAAI,MAElBF,EAAOC,CAAG,EAAIA,IAAQ,cAAgBC,GAAO,KAAO,KAAQA,CAEhE,CAAC,EAEMF,CACT,EAEMI,EAAoB,CACxBC,EACA,CAAE,WAAAC,EAAa,EAAA,EAAmC,CAAA,IACtB,CAC5B,MAAMC,EAAiC,CAAE,GAAGF,CAAA,EAE5C,cAAO,QAAQA,GAAO,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACG,EAAMC,CAAG,IAAM,CACjD,GAAI,CAAC,MAAM,QAAQA,CAAG,EAAG,OAEzB,MAAMC,EAAQD,EAAI,OAAQE,GAAOzB,EAAkByB,CAAE,GAAKA,EAAG,OAAO,EAC/DD,EAAM,SAEXA,EAAM,QAASC,GAAY,CACzB,MAAMC,EAAS,OAAOD,EAAG,SAAW,EAAE,EACtC,GAAI,CAACC,GAAUA,IAAWJ,EAAM,OAEhC,MAAMK,EAAO,MAAM,QAAQF,EAAG,KAAK,EAC/BA,EAAG,MACHA,EAAG,QAAU,OACX,CAACA,EAAG,KAAK,EACT,CAAA,EAEAG,EAAWP,EAAMK,CAAM,EACvBf,EAAS,MAAM,SACf,IAAI,CACN,GAAI,MAAM,QAAQiB,CAAQ,EACtBA,EACAA,GAAY,KACV,CAACA,CAAQ,EACT,CAAA,EACN,GAAGD,CAAA,CACJ,CAAA,EAGHN,EAAMK,CAAM,EAAIf,CAClB,CAAC,EAEGS,GACF,OAAOC,EAAMC,CAAI,EAErB,CAAC,EAEMD,CACT,EAEMQ,EAAgB,CACpB5B,EACA6B,EACAC,IACW,CACX,GAAI,OAAO9B,GAAU,UAAYA,EAAM,OAAS,EAAG,CACjD,MAAMG,EAAS0B,EAAa7B,CAAK,EACjC,GAAIG,EAAQ,OAAOA,EACnB,GACEH,IAAU,aACVA,IAAU,UACVA,IAAU,oBACVA,IAAU,mBAEV,OAAOA,CAEX,CACA,OAAO8B,CACT,EA4BaC,EACXC,GACsB,CACtB,MAAMC,EAAatB,EAAoBM,EAAkBe,CAAU,CAAC,EAE9DE,EAAqB1B,EAAsB,CAC/CyB,EAAW,iBAAA,CACZ,EACKE,EAAiB9B,EAAc4B,EAAW,YAAY,EAG5D,MAAO,CACL,WAHgB1B,EAAe0B,EAAW,UAAU,EAIpD,kBAAmBC,EACnB,aAAcC,EACd,WAAYjC,EAAc+B,EAAW,UAAU,CAAA,CAEnD,EAEaG,EAAsC,CACjDJ,EACAK,EAAuC,KAChB,CACvB,KAAM,CAAE,aAAAC,EAAc,YAAAC,EAAa,YAAAT,EAAa,aAAAD,GAAiBQ,EAC3DG,EAAM,CAAE,GAAG7C,EAAwB,GAAIkC,GAAgB,CAAA,CAAC,EACxDY,EAAWxB,EAAkBe,CAAU,EACvCC,EAAatB,EAAoB8B,CAAQ,EAEzCC,EACJnC,EAAgByB,EAAuC,KAAK,GAC5DzB,EAAekC,EAAS,KAAK,EACzBE,EACJpC,EAAgByB,EAAuC,IAAI,GAC3DzB,EAAekC,EAAS,IAAI,EAExBG,EAAapC,EAAsB,CACvCyB,EAAW,WACXA,EAAW,qBACXA,EAAW,UAAA,CACZ,EACKY,EAAWxC,EAAc4B,EAAW,YAAY,EAChDa,EAAavC,EAAe0B,EAAW,UAAU,EACjDc,EAAoBvC,EAAsB,CAC9CyB,EAAW,iBAAA,CACZ,EAEKe,EAASpB,EACZI,EAAuC,OACxCQ,EACAV,GAAehC,CAAA,EAGXmD,EAA8B,CAClC,MAAOP,GAAkBJ,GAAgB1C,EACzC,KAAM+C,GAAiBJ,GAAe1C,EACtC,OAAAmD,CAAA,EAGEF,GAAc,OAChBG,EAAQ,WAAaH,GAGnBC,GAAqBA,EAAkB,OAAS,IAClDE,EAAQ,kBAAoBF,GAG1BF,GAAYA,EAAS,OAAS,IAChCI,EAAQ,aAAeJ,GAGrBD,GAAcA,EAAW,OAAS,IACpCK,EAAQ,WAAaL,GAGvB,MAAMM,EAAehD,EAAc+B,EAAW,YAAY,EACtDiB,GAAgBA,EAAa,OAAS,IACxCD,EAAQ,aAAeC,GAGzB,MAAMC,EAAoBjD,EAAc+B,EAAW,iBAAiB,EACpE,OAAIkB,GAAqBA,EAAkB,OAAS,IAClDF,EAAQ,kBAAoBE,GAGvBF,CACT,EAEaG,EAAsB,CAAE,GAAGzD,CAAA"}
|
|
1
|
+
{"version":3,"file":"transformers.cjs","sources":["../../../src/features/filters/transformers.ts"],"sourcesContent":["import type { SortBy } from \"../../schema\";\n\ntype RawFilters = Record<string, unknown>;\n\nconst DEFAULT_SORT_PARAM_MAP: Record<string, SortBy> = {\n priceLowToHigh: \"cost_low_to_high\",\n priceHighToLow: \"cost_high_to_low\",\n cost_low_to_high: \"cost_low_to_high\",\n cost_high_to_low: \"cost_high_to_low\",\n newest: \"newest\",\n relevance: \"relevance\",\n};\n\nconst DEFAULT_LIMIT = 10;\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_SORT: SortBy = \"relevance\";\n\nconst isObjectWithValue = (\n value: unknown,\n): value is { value: unknown; bodyKey?: unknown } =>\n value != null && typeof value === \"object\" && \"value\" in value;\n\nconst toArray = (value: unknown): unknown[] => {\n if (Array.isArray(value)) return value.flat();\n return value != null ? [value] : [];\n};\n\nconst toStringArray = (value: unknown): string[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (item == null) return undefined;\n if (typeof item === \"string\") return item;\n if (typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n return undefined;\n })\n .filter((item): item is string => typeof item === \"string\" && item.length > 0);\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberArray = (value: unknown): number[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (typeof item === \"number\" && Number.isFinite(item)) return item;\n if (typeof item === \"string\" && item.trim() !== \"\") {\n const parsed = Number.parseInt(item, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n })\n .filter((item): item is number => typeof item === \"number\");\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberOrNull = (value: unknown): number | null => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number.parseFloat(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return null;\n};\n\nconst mergeHighlightSources = (values: unknown[]): string[] | undefined => {\n const merged = values\n .flatMap((value) => toStringArray(value) ?? [])\n .filter((item) => item.length > 0);\n return merged.length ? Array.from(new Set(merged)) : undefined;\n};\n\nconst normalizeRawFilters = (filters: RawFilters): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n Object.entries(filters ?? {}).forEach(([key, val]) => {\n if ([\"page\", \"sortBy\", \"limit\"].includes(key)) return;\n if (Array.isArray(val)) {\n if (val.every((v) => isObjectWithValue(v))) {\n const mapped = val.map((v) => (v as { value: unknown }).value);\n result[key] = mapped.some(Array.isArray) ? mapped.flat() : mapped;\n } else {\n result[key] = val.flat();\n }\n } else if (isObjectWithValue(val)) {\n result[key] = val.value;\n } else {\n result[key] = key === \"base_price\" && val == null ? 15000 : val;\n }\n });\n\n return result;\n};\n\nconst redirectByBodyKey = (\n raw: RawFilters,\n { dropSource = true }: { dropSource?: boolean } = {},\n): Record<string, unknown> => {\n const draft: Record<string, unknown> = { ...raw };\n\n Object.entries(raw ?? {}).forEach(([prop, arr]) => {\n if (!Array.isArray(arr)) return;\n\n const items = arr.filter((it) => isObjectWithValue(it) && it.bodyKey);\n if (!items.length) return;\n\n items.forEach((it: any) => {\n const target = String(it.bodyKey ?? \"\");\n if (!target || target === prop) return;\n\n const vals = Array.isArray(it.value)\n ? it.value\n : it.value !== undefined\n ? [it.value]\n : [];\n\n const existing = draft[target];\n const merged = Array.from(\n new Set([\n ...(Array.isArray(existing)\n ? existing\n : existing != null\n ? [existing]\n : []),\n ...vals,\n ]),\n );\n\n draft[target] = merged;\n });\n\n\n });\n\n return draft;\n};\n\nconst resolveSortBy = (\n value: unknown,\n sortParamMap: Record<string, SortBy>,\n defaultSort: SortBy,\n): SortBy => {\n if (typeof value === \"string\" && value.length > 0) {\n const mapped = sortParamMap[value];\n if (mapped) return mapped;\n if (\n value === \"relevance\" ||\n value === \"newest\" ||\n value === \"cost_low_to_high\" ||\n value === \"cost_high_to_low\"\n ) {\n return value;\n }\n }\n return defaultSort;\n};\n\nexport interface FilterPreferences {\n base_price: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n}\n\nexport interface UnitsSearchRequest {\n limit: number;\n page: number;\n sortBy: SortBy;\n base_price?: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n nearBuilding?: string[];\n nearNeighbourhood?: string[];\n}\n\nexport interface TransformUnitsSearchOptions {\n defaultLimit?: number;\n defaultPage?: number;\n defaultSort?: SortBy;\n sortParamMap?: Record<string, SortBy>;\n}\n\nexport const transformFiltersToPreferences = (\n rawFilters: RawFilters,\n): FilterPreferences => {\n const normalized = normalizeRawFilters(redirectByBodyKey(rawFilters));\n\n const mergedAvailability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n const mergedBedrooms = toNumberArray(normalized.qty_bedrooms);\n const basePrice = toNumberOrNull(normalized.base_price);\n\n return {\n base_price: basePrice,\n date_availability: mergedAvailability,\n qty_bedrooms: mergedBedrooms,\n highlights: toStringArray(normalized.highlights),\n };\n};\n\nexport const transformFiltersToUnitsSearchParams = (\n rawFilters: RawFilters,\n options: TransformUnitsSearchOptions = {},\n): UnitsSearchRequest => {\n const { defaultLimit, defaultPage, defaultSort, sortParamMap } = options;\n const map = { ...DEFAULT_SORT_PARAM_MAP, ...(sortParamMap ?? {}) };\n const remapped = redirectByBodyKey(rawFilters);\n const normalized = normalizeRawFilters(remapped);\n\n const limitCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).limit) ??\n toNumberOrNull(remapped.limit);\n const pageCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).page) ??\n toNumberOrNull(remapped.page);\n\n const highlights = mergeHighlightSources([\n normalized.highlights,\n normalized.preferredEnvironment,\n normalized.spaceUsage,\n ]);\n const bedrooms = toNumberArray(normalized.qty_bedrooms);\n const base_price = toNumberOrNull(normalized.base_price);\n const date_availability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n\n const sortBy = resolveSortBy(\n (rawFilters as Record<string, unknown>).sortBy,\n map,\n defaultSort ?? DEFAULT_SORT,\n );\n\n const payload: UnitsSearchRequest = {\n limit: limitCandidate ?? defaultLimit ?? DEFAULT_LIMIT,\n page: pageCandidate ?? defaultPage ?? DEFAULT_PAGE,\n sortBy,\n };\n\n if (base_price != null) {\n payload.base_price = base_price;\n }\n\n if (date_availability && date_availability.length > 0) {\n payload.date_availability = date_availability;\n }\n\n if (bedrooms && bedrooms.length > 0) {\n payload.qty_bedrooms = bedrooms;\n }\n\n if (highlights && highlights.length > 0) {\n payload.highlights = highlights;\n }\n\n const nearBuilding = toStringArray(normalized.nearBuilding);\n if (nearBuilding && nearBuilding.length > 0) {\n payload.nearBuilding = nearBuilding;\n }\n\n const nearNeighbourhood = toStringArray(normalized.nearNeighbourhood);\n if (nearNeighbourhood && nearNeighbourhood.length > 0) {\n payload.nearNeighbourhood = nearNeighbourhood;\n }\n\n return payload;\n};\n\nexport const defaultSortParamMap = { ...DEFAULT_SORT_PARAM_MAP };\n"],"names":["DEFAULT_SORT_PARAM_MAP","DEFAULT_LIMIT","DEFAULT_PAGE","DEFAULT_SORT","isObjectWithValue","value","toArray","toStringArray","mapped","item","toNumberArray","parsed","toNumberOrNull","mergeHighlightSources","values","merged","normalizeRawFilters","filters","result","key","val","v","redirectByBodyKey","raw","dropSource","draft","prop","arr","items","it","target","vals","existing","resolveSortBy","sortParamMap","defaultSort","transformFiltersToPreferences","rawFilters","normalized","mergedAvailability","mergedBedrooms","transformFiltersToUnitsSearchParams","options","defaultLimit","defaultPage","map","remapped","limitCandidate","pageCandidate","highlights","bedrooms","base_price","date_availability","sortBy","payload","nearBuilding","nearNeighbourhood","defaultSortParamMap"],"mappings":"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"}
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
const
|
|
1
|
+
const w = {
|
|
2
2
|
priceLowToHigh: "cost_low_to_high",
|
|
3
3
|
priceHighToLow: "cost_high_to_low",
|
|
4
4
|
cost_low_to_high: "cost_low_to_high",
|
|
5
5
|
cost_high_to_low: "cost_high_to_low",
|
|
6
6
|
newest: "newest",
|
|
7
7
|
relevance: "relevance"
|
|
8
|
-
}, F = 10, L = 1, M = "relevance", b = (
|
|
9
|
-
const e = N(
|
|
10
|
-
if (
|
|
11
|
-
if (typeof
|
|
12
|
-
if (typeof
|
|
13
|
-
return String(
|
|
8
|
+
}, F = 10, L = 1, M = "relevance", b = (r) => r != null && typeof r == "object" && "value" in r, N = (r) => Array.isArray(r) ? r.flat() : r != null ? [r] : [], h = (r) => {
|
|
9
|
+
const e = N(r).map((t) => {
|
|
10
|
+
if (t != null) {
|
|
11
|
+
if (typeof t == "string") return t;
|
|
12
|
+
if (typeof t == "number" || typeof t == "boolean")
|
|
13
|
+
return String(t);
|
|
14
14
|
}
|
|
15
|
-
}).filter((
|
|
15
|
+
}).filter((t) => typeof t == "string" && t.length > 0);
|
|
16
16
|
return e.length ? Array.from(new Set(e)) : void 0;
|
|
17
|
-
}, T = (
|
|
18
|
-
const e = N(
|
|
19
|
-
if (typeof
|
|
20
|
-
if (typeof
|
|
21
|
-
const o = Number.parseInt(
|
|
17
|
+
}, T = (r) => {
|
|
18
|
+
const e = N(r).map((t) => {
|
|
19
|
+
if (typeof t == "number" && Number.isFinite(t)) return t;
|
|
20
|
+
if (typeof t == "string" && t.trim() !== "") {
|
|
21
|
+
const o = Number.parseInt(t, 10);
|
|
22
22
|
return Number.isFinite(o) ? o : void 0;
|
|
23
23
|
}
|
|
24
|
-
}).filter((
|
|
24
|
+
}).filter((t) => typeof t == "number");
|
|
25
25
|
return e.length ? Array.from(new Set(e)) : void 0;
|
|
26
|
-
}, f = (
|
|
27
|
-
if (typeof
|
|
28
|
-
if (typeof
|
|
29
|
-
const e = Number.parseFloat(
|
|
26
|
+
}, f = (r) => {
|
|
27
|
+
if (typeof r == "number" && Number.isFinite(r)) return r;
|
|
28
|
+
if (typeof r == "string" && r.trim() !== "") {
|
|
29
|
+
const e = Number.parseFloat(r);
|
|
30
30
|
if (Number.isFinite(e)) return e;
|
|
31
31
|
}
|
|
32
32
|
return null;
|
|
33
|
-
}, A = (
|
|
34
|
-
const e =
|
|
33
|
+
}, A = (r) => {
|
|
34
|
+
const e = r.flatMap((t) => h(t) ?? []).filter((t) => t.length > 0);
|
|
35
35
|
return e.length ? Array.from(new Set(e)) : void 0;
|
|
36
|
-
}, B = (
|
|
36
|
+
}, B = (r) => {
|
|
37
37
|
const e = {};
|
|
38
|
-
return Object.entries(
|
|
39
|
-
if (!["page", "sortBy", "limit"].includes(
|
|
38
|
+
return Object.entries(r ?? {}).forEach(([t, o]) => {
|
|
39
|
+
if (!["page", "sortBy", "limit"].includes(t))
|
|
40
40
|
if (Array.isArray(o))
|
|
41
41
|
if (o.every((n) => b(n))) {
|
|
42
42
|
const n = o.map((l) => l.value);
|
|
43
|
-
e[
|
|
43
|
+
e[t] = n.some(Array.isArray) ? n.flat() : n;
|
|
44
44
|
} else
|
|
45
|
-
e[
|
|
46
|
-
else b(o) ? e[
|
|
45
|
+
e[t] = o.flat();
|
|
46
|
+
else b(o) ? e[t] = o.value : e[t] = t === "base_price" && o == null ? 15e3 : o;
|
|
47
47
|
}), e;
|
|
48
|
-
}, P = (
|
|
49
|
-
const
|
|
50
|
-
return Object.entries(
|
|
48
|
+
}, P = (r, { dropSource: e = !0 } = {}) => {
|
|
49
|
+
const t = { ...r };
|
|
50
|
+
return Object.entries(r ?? {}).forEach(([o, n]) => {
|
|
51
51
|
if (!Array.isArray(n)) return;
|
|
52
52
|
const l = n.filter((i) => b(i) && i.bodyKey);
|
|
53
|
-
l.length &&
|
|
53
|
+
l.length && l.forEach((i) => {
|
|
54
54
|
const a = String(i.bodyKey ?? "");
|
|
55
55
|
if (!a || a === o) return;
|
|
56
|
-
const s = Array.isArray(i.value) ? i.value : i.value !== void 0 ? [i.value] : [], g =
|
|
56
|
+
const s = Array.isArray(i.value) ? i.value : i.value !== void 0 ? [i.value] : [], g = t[a], d = Array.from(
|
|
57
57
|
/* @__PURE__ */ new Set([
|
|
58
58
|
...Array.isArray(g) ? g : g != null ? [g] : [],
|
|
59
59
|
...s
|
|
60
60
|
])
|
|
61
61
|
);
|
|
62
|
-
|
|
63
|
-
})
|
|
64
|
-
}),
|
|
65
|
-
}, O = (
|
|
66
|
-
if (typeof
|
|
67
|
-
const o = e[
|
|
62
|
+
t[a] = d;
|
|
63
|
+
});
|
|
64
|
+
}), t;
|
|
65
|
+
}, O = (r, e, t) => {
|
|
66
|
+
if (typeof r == "string" && r.length > 0) {
|
|
67
|
+
const o = e[r];
|
|
68
68
|
if (o) return o;
|
|
69
|
-
if (
|
|
70
|
-
return
|
|
69
|
+
if (r === "relevance" || r === "newest" || r === "cost_low_to_high" || r === "cost_high_to_low")
|
|
70
|
+
return r;
|
|
71
71
|
}
|
|
72
|
-
return
|
|
73
|
-
}, U = (
|
|
74
|
-
const e = B(P(
|
|
72
|
+
return t;
|
|
73
|
+
}, U = (r) => {
|
|
74
|
+
const e = B(P(r)), t = A([
|
|
75
75
|
e.date_availability
|
|
76
76
|
]), o = T(e.qty_bedrooms);
|
|
77
77
|
return {
|
|
78
78
|
base_price: f(e.base_price),
|
|
79
|
-
date_availability:
|
|
79
|
+
date_availability: t,
|
|
80
80
|
qty_bedrooms: o,
|
|
81
81
|
highlights: h(e.highlights)
|
|
82
82
|
};
|
|
83
|
-
}, v = (
|
|
84
|
-
const { defaultLimit:
|
|
83
|
+
}, v = (r, e = {}) => {
|
|
84
|
+
const { defaultLimit: t, defaultPage: o, defaultSort: n, sortParamMap: l } = e, i = { ...w, ...l ?? {} }, a = P(r), s = B(a), g = f(r.limit) ?? f(a.limit), d = f(r.page) ?? f(a.page), u = A([
|
|
85
85
|
s.highlights,
|
|
86
86
|
s.preferredEnvironment,
|
|
87
87
|
s.spaceUsage
|
|
88
|
-
]),
|
|
88
|
+
]), p = T(s.qty_bedrooms), S = f(s.base_price), y = A([
|
|
89
89
|
s.date_availability
|
|
90
90
|
]), E = O(
|
|
91
|
-
|
|
91
|
+
r.sortBy,
|
|
92
92
|
i,
|
|
93
93
|
n ?? M
|
|
94
94
|
), c = {
|
|
95
|
-
limit: g ??
|
|
95
|
+
limit: g ?? t ?? F,
|
|
96
96
|
page: d ?? o ?? L,
|
|
97
97
|
sortBy: E
|
|
98
98
|
};
|
|
99
|
-
|
|
99
|
+
S != null && (c.base_price = S), y && y.length > 0 && (c.date_availability = y), p && p.length > 0 && (c.qty_bedrooms = p), u && u.length > 0 && (c.highlights = u);
|
|
100
100
|
const _ = h(s.nearBuilding);
|
|
101
101
|
_ && _.length > 0 && (c.nearBuilding = _);
|
|
102
102
|
const m = h(s.nearNeighbourhood);
|
|
103
103
|
return m && m.length > 0 && (c.nearNeighbourhood = m), c;
|
|
104
|
-
}, j = { ...
|
|
104
|
+
}, j = { ...w };
|
|
105
105
|
export {
|
|
106
106
|
j as defaultSortParamMap,
|
|
107
107
|
U as transformFiltersToPreferences,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.mjs","sources":["../../../src/features/filters/transformers.ts"],"sourcesContent":["import type { SortBy } from \"../../schema\";\n\ntype RawFilters = Record<string, unknown>;\n\nconst DEFAULT_SORT_PARAM_MAP: Record<string, SortBy> = {\n priceLowToHigh: \"cost_low_to_high\",\n priceHighToLow: \"cost_high_to_low\",\n cost_low_to_high: \"cost_low_to_high\",\n cost_high_to_low: \"cost_high_to_low\",\n newest: \"newest\",\n relevance: \"relevance\",\n};\n\nconst DEFAULT_LIMIT = 10;\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_SORT: SortBy = \"relevance\";\n\nconst isObjectWithValue = (\n value: unknown,\n): value is { value: unknown; bodyKey?: unknown } =>\n value != null && typeof value === \"object\" && \"value\" in value;\n\nconst toArray = (value: unknown): unknown[] => {\n if (Array.isArray(value)) return value.flat();\n return value != null ? [value] : [];\n};\n\nconst toStringArray = (value: unknown): string[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (item == null) return undefined;\n if (typeof item === \"string\") return item;\n if (typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n return undefined;\n })\n .filter((item): item is string => typeof item === \"string\" && item.length > 0);\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberArray = (value: unknown): number[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (typeof item === \"number\" && Number.isFinite(item)) return item;\n if (typeof item === \"string\" && item.trim() !== \"\") {\n const parsed = Number.parseInt(item, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n })\n .filter((item): item is number => typeof item === \"number\");\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberOrNull = (value: unknown): number | null => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number.parseFloat(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return null;\n};\n\nconst mergeHighlightSources = (values: unknown[]): string[] | undefined => {\n const merged = values\n .flatMap((value) => toStringArray(value) ?? [])\n .filter((item) => item.length > 0);\n return merged.length ? Array.from(new Set(merged)) : undefined;\n};\n\nconst normalizeRawFilters = (filters: RawFilters): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n Object.entries(filters ?? {}).forEach(([key, val]) => {\n if ([\"page\", \"sortBy\", \"limit\"].includes(key)) return;\n if (Array.isArray(val)) {\n if (val.every((v) => isObjectWithValue(v))) {\n const mapped = val.map((v) => (v as { value: unknown }).value);\n result[key] = mapped.some(Array.isArray) ? mapped.flat() : mapped;\n } else {\n result[key] = val.flat();\n }\n } else if (isObjectWithValue(val)) {\n result[key] = val.value;\n } else {\n result[key] = key === \"base_price\" && val == null ? 15000 : val;\n }\n });\n\n return result;\n};\n\nconst redirectByBodyKey = (\n raw: RawFilters,\n { dropSource = true }: { dropSource?: boolean } = {},\n): Record<string, unknown> => {\n const draft: Record<string, unknown> = { ...raw };\n\n Object.entries(raw ?? {}).forEach(([prop, arr]) => {\n if (!Array.isArray(arr)) return;\n\n const items = arr.filter((it) => isObjectWithValue(it) && it.bodyKey);\n if (!items.length) return;\n\n items.forEach((it: any) => {\n const target = String(it.bodyKey ?? \"\");\n if (!target || target === prop) return;\n\n const vals = Array.isArray(it.value)\n ? it.value\n : it.value !== undefined\n ? [it.value]\n : [];\n\n const existing = draft[target];\n const merged = Array.from(\n new Set([\n ...(Array.isArray(existing)\n ? existing\n : existing != null\n ? [existing]\n : []),\n ...vals,\n ]),\n );\n\n draft[target] = merged;\n });\n\n if (dropSource) {\n delete draft[prop];\n }\n });\n\n return draft;\n};\n\nconst resolveSortBy = (\n value: unknown,\n sortParamMap: Record<string, SortBy>,\n defaultSort: SortBy,\n): SortBy => {\n if (typeof value === \"string\" && value.length > 0) {\n const mapped = sortParamMap[value];\n if (mapped) return mapped;\n if (\n value === \"relevance\" ||\n value === \"newest\" ||\n value === \"cost_low_to_high\" ||\n value === \"cost_high_to_low\"\n ) {\n return value;\n }\n }\n return defaultSort;\n};\n\nexport interface FilterPreferences {\n base_price: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n}\n\nexport interface UnitsSearchRequest {\n limit: number;\n page: number;\n sortBy: SortBy;\n base_price?: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n nearBuilding?: string[];\n nearNeighbourhood?: string[];\n}\n\nexport interface TransformUnitsSearchOptions {\n defaultLimit?: number;\n defaultPage?: number;\n defaultSort?: SortBy;\n sortParamMap?: Record<string, SortBy>;\n}\n\nexport const transformFiltersToPreferences = (\n rawFilters: RawFilters,\n): FilterPreferences => {\n const normalized = normalizeRawFilters(redirectByBodyKey(rawFilters));\n\n const mergedAvailability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n const mergedBedrooms = toNumberArray(normalized.qty_bedrooms);\n const basePrice = toNumberOrNull(normalized.base_price);\n\n return {\n base_price: basePrice,\n date_availability: mergedAvailability,\n qty_bedrooms: mergedBedrooms,\n highlights: toStringArray(normalized.highlights),\n };\n};\n\nexport const transformFiltersToUnitsSearchParams = (\n rawFilters: RawFilters,\n options: TransformUnitsSearchOptions = {},\n): UnitsSearchRequest => {\n const { defaultLimit, defaultPage, defaultSort, sortParamMap } = options;\n const map = { ...DEFAULT_SORT_PARAM_MAP, ...(sortParamMap ?? {}) };\n const remapped = redirectByBodyKey(rawFilters);\n const normalized = normalizeRawFilters(remapped);\n\n const limitCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).limit) ??\n toNumberOrNull(remapped.limit);\n const pageCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).page) ??\n toNumberOrNull(remapped.page);\n\n const highlights = mergeHighlightSources([\n normalized.highlights,\n normalized.preferredEnvironment,\n normalized.spaceUsage,\n ]);\n const bedrooms = toNumberArray(normalized.qty_bedrooms);\n const base_price = toNumberOrNull(normalized.base_price);\n const date_availability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n\n const sortBy = resolveSortBy(\n (rawFilters as Record<string, unknown>).sortBy,\n map,\n defaultSort ?? DEFAULT_SORT,\n );\n\n const payload: UnitsSearchRequest = {\n limit: limitCandidate ?? defaultLimit ?? DEFAULT_LIMIT,\n page: pageCandidate ?? defaultPage ?? DEFAULT_PAGE,\n sortBy,\n };\n\n if (base_price != null) {\n payload.base_price = base_price;\n }\n\n if (date_availability && date_availability.length > 0) {\n payload.date_availability = date_availability;\n }\n\n if (bedrooms && bedrooms.length > 0) {\n payload.qty_bedrooms = bedrooms;\n }\n\n if (highlights && highlights.length > 0) {\n payload.highlights = highlights;\n }\n\n const nearBuilding = toStringArray(normalized.nearBuilding);\n if (nearBuilding && nearBuilding.length > 0) {\n payload.nearBuilding = nearBuilding;\n }\n\n const nearNeighbourhood = toStringArray(normalized.nearNeighbourhood);\n if (nearNeighbourhood && nearNeighbourhood.length > 0) {\n payload.nearNeighbourhood = nearNeighbourhood;\n }\n\n return payload;\n};\n\nexport const defaultSortParamMap = { ...DEFAULT_SORT_PARAM_MAP };\n"],"names":["DEFAULT_SORT_PARAM_MAP","DEFAULT_LIMIT","DEFAULT_PAGE","DEFAULT_SORT","isObjectWithValue","value","toArray","toStringArray","mapped","item","toNumberArray","parsed","toNumberOrNull","mergeHighlightSources","values","merged","normalizeRawFilters","filters","result","key","val","v","redirectByBodyKey","raw","dropSource","draft","prop","arr","items","it","target","vals","existing","resolveSortBy","sortParamMap","defaultSort","transformFiltersToPreferences","rawFilters","normalized","mergedAvailability","mergedBedrooms","transformFiltersToUnitsSearchParams","options","defaultLimit","defaultPage","map","remapped","limitCandidate","pageCandidate","highlights","bedrooms","base_price","date_availability","sortBy","payload","nearBuilding","nearNeighbourhood","defaultSortParamMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformers.mjs","sources":["../../../src/features/filters/transformers.ts"],"sourcesContent":["import type { SortBy } from \"../../schema\";\n\ntype RawFilters = Record<string, unknown>;\n\nconst DEFAULT_SORT_PARAM_MAP: Record<string, SortBy> = {\n priceLowToHigh: \"cost_low_to_high\",\n priceHighToLow: \"cost_high_to_low\",\n cost_low_to_high: \"cost_low_to_high\",\n cost_high_to_low: \"cost_high_to_low\",\n newest: \"newest\",\n relevance: \"relevance\",\n};\n\nconst DEFAULT_LIMIT = 10;\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_SORT: SortBy = \"relevance\";\n\nconst isObjectWithValue = (\n value: unknown,\n): value is { value: unknown; bodyKey?: unknown } =>\n value != null && typeof value === \"object\" && \"value\" in value;\n\nconst toArray = (value: unknown): unknown[] => {\n if (Array.isArray(value)) return value.flat();\n return value != null ? [value] : [];\n};\n\nconst toStringArray = (value: unknown): string[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (item == null) return undefined;\n if (typeof item === \"string\") return item;\n if (typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n return undefined;\n })\n .filter((item): item is string => typeof item === \"string\" && item.length > 0);\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberArray = (value: unknown): number[] | undefined => {\n const mapped = toArray(value)\n .map((item) => {\n if (typeof item === \"number\" && Number.isFinite(item)) return item;\n if (typeof item === \"string\" && item.trim() !== \"\") {\n const parsed = Number.parseInt(item, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n })\n .filter((item): item is number => typeof item === \"number\");\n return mapped.length ? Array.from(new Set(mapped)) : undefined;\n};\n\nconst toNumberOrNull = (value: unknown): number | null => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number.parseFloat(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return null;\n};\n\nconst mergeHighlightSources = (values: unknown[]): string[] | undefined => {\n const merged = values\n .flatMap((value) => toStringArray(value) ?? [])\n .filter((item) => item.length > 0);\n return merged.length ? Array.from(new Set(merged)) : undefined;\n};\n\nconst normalizeRawFilters = (filters: RawFilters): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n Object.entries(filters ?? {}).forEach(([key, val]) => {\n if ([\"page\", \"sortBy\", \"limit\"].includes(key)) return;\n if (Array.isArray(val)) {\n if (val.every((v) => isObjectWithValue(v))) {\n const mapped = val.map((v) => (v as { value: unknown }).value);\n result[key] = mapped.some(Array.isArray) ? mapped.flat() : mapped;\n } else {\n result[key] = val.flat();\n }\n } else if (isObjectWithValue(val)) {\n result[key] = val.value;\n } else {\n result[key] = key === \"base_price\" && val == null ? 15000 : val;\n }\n });\n\n return result;\n};\n\nconst redirectByBodyKey = (\n raw: RawFilters,\n { dropSource = true }: { dropSource?: boolean } = {},\n): Record<string, unknown> => {\n const draft: Record<string, unknown> = { ...raw };\n\n Object.entries(raw ?? {}).forEach(([prop, arr]) => {\n if (!Array.isArray(arr)) return;\n\n const items = arr.filter((it) => isObjectWithValue(it) && it.bodyKey);\n if (!items.length) return;\n\n items.forEach((it: any) => {\n const target = String(it.bodyKey ?? \"\");\n if (!target || target === prop) return;\n\n const vals = Array.isArray(it.value)\n ? it.value\n : it.value !== undefined\n ? [it.value]\n : [];\n\n const existing = draft[target];\n const merged = Array.from(\n new Set([\n ...(Array.isArray(existing)\n ? existing\n : existing != null\n ? [existing]\n : []),\n ...vals,\n ]),\n );\n\n draft[target] = merged;\n });\n\n\n });\n\n return draft;\n};\n\nconst resolveSortBy = (\n value: unknown,\n sortParamMap: Record<string, SortBy>,\n defaultSort: SortBy,\n): SortBy => {\n if (typeof value === \"string\" && value.length > 0) {\n const mapped = sortParamMap[value];\n if (mapped) return mapped;\n if (\n value === \"relevance\" ||\n value === \"newest\" ||\n value === \"cost_low_to_high\" ||\n value === \"cost_high_to_low\"\n ) {\n return value;\n }\n }\n return defaultSort;\n};\n\nexport interface FilterPreferences {\n base_price: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n}\n\nexport interface UnitsSearchRequest {\n limit: number;\n page: number;\n sortBy: SortBy;\n base_price?: number | null;\n date_availability?: string[];\n qty_bedrooms?: number[];\n highlights?: string[];\n nearBuilding?: string[];\n nearNeighbourhood?: string[];\n}\n\nexport interface TransformUnitsSearchOptions {\n defaultLimit?: number;\n defaultPage?: number;\n defaultSort?: SortBy;\n sortParamMap?: Record<string, SortBy>;\n}\n\nexport const transformFiltersToPreferences = (\n rawFilters: RawFilters,\n): FilterPreferences => {\n const normalized = normalizeRawFilters(redirectByBodyKey(rawFilters));\n\n const mergedAvailability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n const mergedBedrooms = toNumberArray(normalized.qty_bedrooms);\n const basePrice = toNumberOrNull(normalized.base_price);\n\n return {\n base_price: basePrice,\n date_availability: mergedAvailability,\n qty_bedrooms: mergedBedrooms,\n highlights: toStringArray(normalized.highlights),\n };\n};\n\nexport const transformFiltersToUnitsSearchParams = (\n rawFilters: RawFilters,\n options: TransformUnitsSearchOptions = {},\n): UnitsSearchRequest => {\n const { defaultLimit, defaultPage, defaultSort, sortParamMap } = options;\n const map = { ...DEFAULT_SORT_PARAM_MAP, ...(sortParamMap ?? {}) };\n const remapped = redirectByBodyKey(rawFilters);\n const normalized = normalizeRawFilters(remapped);\n\n const limitCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).limit) ??\n toNumberOrNull(remapped.limit);\n const pageCandidate =\n toNumberOrNull((rawFilters as Record<string, unknown>).page) ??\n toNumberOrNull(remapped.page);\n\n const highlights = mergeHighlightSources([\n normalized.highlights,\n normalized.preferredEnvironment,\n normalized.spaceUsage,\n ]);\n const bedrooms = toNumberArray(normalized.qty_bedrooms);\n const base_price = toNumberOrNull(normalized.base_price);\n const date_availability = mergeHighlightSources([\n normalized.date_availability,\n ]);\n\n const sortBy = resolveSortBy(\n (rawFilters as Record<string, unknown>).sortBy,\n map,\n defaultSort ?? DEFAULT_SORT,\n );\n\n const payload: UnitsSearchRequest = {\n limit: limitCandidate ?? defaultLimit ?? DEFAULT_LIMIT,\n page: pageCandidate ?? defaultPage ?? DEFAULT_PAGE,\n sortBy,\n };\n\n if (base_price != null) {\n payload.base_price = base_price;\n }\n\n if (date_availability && date_availability.length > 0) {\n payload.date_availability = date_availability;\n }\n\n if (bedrooms && bedrooms.length > 0) {\n payload.qty_bedrooms = bedrooms;\n }\n\n if (highlights && highlights.length > 0) {\n payload.highlights = highlights;\n }\n\n const nearBuilding = toStringArray(normalized.nearBuilding);\n if (nearBuilding && nearBuilding.length > 0) {\n payload.nearBuilding = nearBuilding;\n }\n\n const nearNeighbourhood = toStringArray(normalized.nearNeighbourhood);\n if (nearNeighbourhood && nearNeighbourhood.length > 0) {\n payload.nearNeighbourhood = nearNeighbourhood;\n }\n\n return payload;\n};\n\nexport const defaultSortParamMap = { ...DEFAULT_SORT_PARAM_MAP };\n"],"names":["DEFAULT_SORT_PARAM_MAP","DEFAULT_LIMIT","DEFAULT_PAGE","DEFAULT_SORT","isObjectWithValue","value","toArray","toStringArray","mapped","item","toNumberArray","parsed","toNumberOrNull","mergeHighlightSources","values","merged","normalizeRawFilters","filters","result","key","val","v","redirectByBodyKey","raw","dropSource","draft","prop","arr","items","it","target","vals","existing","resolveSortBy","sortParamMap","defaultSort","transformFiltersToPreferences","rawFilters","normalized","mergedAvailability","mergedBedrooms","transformFiltersToUnitsSearchParams","options","defaultLimit","defaultPage","map","remapped","limitCandidate","pageCandidate","highlights","bedrooms","base_price","date_availability","sortBy","payload","nearBuilding","nearNeighbourhood","defaultSortParamMap"],"mappings":"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"}
|