@superbright/indexeddb-orm 1.0.13 → 1.0.14
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/base/floorplan.d.ts +2 -2
- package/dist/base/property.d.ts +2 -2
- package/dist/base/propertyamenity.d.ts +2 -2
- package/dist/base/propertyhighlight.d.ts +2 -2
- package/dist/base/room.d.ts +2 -2
- package/dist/base/style.d.ts +2 -2
- package/dist/base/unit.d.ts +2 -2
- package/dist/features/analytics/analytics.cjs +1 -1
- package/dist/features/analytics/analytics.cjs.map +1 -1
- package/dist/features/analytics/analytics.d.ts +18 -0
- package/dist/features/analytics/analytics.mjs +4 -3
- package/dist/features/analytics/analytics.mjs.map +1 -1
- package/dist/features/units/transformers.cjs +1 -1
- package/dist/features/units/transformers.cjs.map +1 -1
- package/dist/features/units/transformers.d.ts +1 -2
- package/dist/features/units/transformers.mjs +35 -32
- package/dist/features/units/transformers.mjs.map +1 -1
- package/dist/schema.cjs +1 -1
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.ts +77 -77
- package/dist/schema.mjs +2 -2
- package/dist/schema.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.mjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useMixpanel } from \"./MixpanelProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureViewedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\n// 360 app only\nconst webPageViewedSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n})\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (convertKeysToSnakeCase(payload) as Record<string, any>);\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedSchema","toastSchema","contentModalOpenedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analytics.mjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useMixpanel } from \"./MixpanelProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureViewedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\n// 360 app only\nconst webPageViewedSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n})\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (convertKeysToSnakeCase(payload) as Record<string, any>);\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"More Units Loaded\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedSchema","toastSchema","contentModalOpenedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d="//web.inresiapp.com",p="/placeholder.jpg",h=t=>t?t.startsWith("?")?t:`?${t}`:"",s=t=>{if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t)},A=(t,e)=>s(e.propertySlug)??s(e.property_slug)??t,U=(t,e,r=d)=>`${r}/${e}/unit/${t}/explore`,a=(t,e=p)=>!(t!=null&&t.CFURL)||!(t!=null&&t.name)||!(t!=null&&t.signature)?e:`${t.CFURL}${t.name}${h(t.signature)}`;function v(t){return{data:t}}function I(t,e,r){var l,f;r==null||r.origin;const i=(r==null?void 0:r.placeholderImage)??p,o=((l=t.hits)==null?void 0:l.map(m=>{var y,_;const n=m._source??{},g=typeof n.name=="string"?n.name:typeof n.title=="string"?n.title:"";s(n.slug)??s(n.unit_slug);const b=s(n.propertySlug)??s(n.property_slug)??A(e,n)??e,c={...n,name:g,imageUrl:a(n.image,i),secondaryImageUrl:a((y=n.additionalImages)==null?void 0:y[0],i),tertiaryImageUrl:a((_=n.additionalImages)==null?void 0:_[1],i)};return b&&!c.propertySlug&&(c.propertySlug=b),c}))??[];return{total:((f=t.total)==null?void 0:f.value)??o.length,maxScore:t.max_score??null,type:t.type??"units",hits:o}}const S={asap:"ASAP",next_month:"Next Month","2_3_months":"2-3 Months",all:"Just Browsing"},u={0:"Studio",1:"1 Bed",2:"2 Bed",3:"3+ Bed"},E=new Set(Object.values(u)),L=t=>{if(!t||t.length===0)return;const e=new Set;for(const r of t){if(typeof r=="number"){const o=u[r];o&&e.add(o);continue}const i=r.split(",").map(o=>o.trim());for(const o of i){const l=Number.parseInt(o,10);!Number.isNaN(l)&&u[l]?e.add(u[l]):E.has(o)&&e.add(o)}}return e.size>0?Array.from(e):void 0},F=t=>({date_availability:t.date_availability&&t.date_availability.length>0?t.date_availability.map(r=>S[r]??r):void 0,qty_bedrooms:L(t.qty_bedrooms),base_price:t.base_price??void 0,highlights:t.highlights??[]});exports.DEFAULT_PLACEHOLDER_IMAGE=p;exports.DEFAULT_WEB_ORIGIN=d;exports.buildExploreUrl=U;exports.buildImageUrl=a;exports.transformUnitsApiResponse=v;exports.transformUnitsApiResponseToClient=I;exports.transformUnitsApiResponseToClientFilters=F;
|
|
2
2
|
//# sourceMappingURL=transformers.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.cjs","sources":["../../../src/features/units/transformers.ts"],"sourcesContent":["export const DEFAULT_WEB_ORIGIN = \"//web.inresiapp.com\";\nexport const DEFAULT_PLACEHOLDER_IMAGE = \"/placeholder.jpg\";\n\nexport interface UnitImageApiResponse {\n CFURL?: string;\n name?: string;\n signature?: string;\n}\n\nexport interface UnitSourceApiResponse extends Record<string, unknown> {\n id?: number | string;\n name?: string;\n title?: string;\n slug?: string;\n base_price?: number;\n qty_bedrooms?: number | string;\n qty_bathrooms?: number | string;\n totalSqFt?: number;\n dim_sq_ft?: number | string;\n amenities?: unknown;\n highlights?: unknown;\n date_availability?: string | Date | null;\n unitSetAvailableOn?: string | Date | null;\n image?: UnitImageApiResponse;\n additionalImages?: UnitImageApiResponse[];\n}\n\nexport interface UnitHitApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n _index?: string;\n _id?: string;\n _score?: number;\n _source?: Source;\n}\n\nexport interface UnitsTotalInfo {\n value: number;\n relation?: string;\n}\n\nexport interface UnitsDataApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total?: UnitsTotalInfo;\n max_score?: number | null;\n hits?: UnitHitApiResponse<Source>[];\n type?: string;\n}\n\nexport interface UnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n data: UnitsDataApiResponse<Source>;\n}\n\nexport type TransformedUnit<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> = Source & {\n title: string;\n slug: string;\n imageUrl: string;\n secondaryImageUrl?: string;\n tertiaryImageUrl?: string;\n};\n\nexport interface UnitsClientList<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total: number;\n maxScore: number | null;\n type: string;\n hits: TransformedUnit<Source>[];\n}\n\nexport interface TransformUnitsOptions {\n origin?: string;\n placeholderImage?: string;\n}\n\nconst normalizeSignature = (signature?: string): string => {\n if (!signature) return \"\";\n return signature.startsWith(\"?\") ? signature : `?${signature}`;\n};\n\nconst coerceString = (value: unknown): string | undefined => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n};\n\nconst propertySlugFallback = (\n defaultSlug: string,\n source: UnitSourceApiResponse,\n): string | undefined => {\n const slug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug);\n return slug ?? defaultSlug;\n};\n\nexport const buildExploreUrl = (\n unitSlug: string,\n propertySlug: string,\n origin = DEFAULT_WEB_ORIGIN,\n): string => `${origin}/${propertySlug}/unit/${unitSlug}/explore`;\n\nexport const buildImageUrl = (\n image?: UnitImageApiResponse,\n placeholder = DEFAULT_PLACEHOLDER_IMAGE,\n): string => {\n if (!image?.CFURL || !image?.name || !image?.signature) return placeholder;\n return `${image.CFURL}${image.name}${normalizeSignature(image.signature)}`;\n};\n\nexport function transformUnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(apiResponse: UnitsDataApiResponse<Source>): UnitsApiResponse<Source> {\n return { data: apiResponse };\n}\n\nexport function transformUnitsApiResponseToClient<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(\n apiResponse: UnitsDataApiResponse<Source>,\n propertySlug: string,\n options?: TransformUnitsOptions,\n): UnitsClientList<Source> {\n const origin = options?.origin ?? DEFAULT_WEB_ORIGIN;\n const placeholderImage = options?.placeholderImage ?? DEFAULT_PLACEHOLDER_IMAGE;\n\n const hits =\n apiResponse.hits?.map((hit) => {\n const source = (hit._source ?? {}) as Source & UnitSourceApiResponse;\n const title =\n typeof source.name === \"string\"\n ? source.name\n : typeof source.title === \"string\"\n ? source.title\n : \"\";\n\n const slugCandidate =\n coerceString(source.slug) ?? coerceString((source as any).unit_slug) ?? \"\";\n const resolvedPropertySlug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug) ??\n propertySlugFallback(propertySlug, source) ??\n propertySlug;\n\n const normalized: TransformedUnit<Source> = {\n ...(source as Source),\n title,\n slug: buildExploreUrl(slugCandidate, resolvedPropertySlug ?? \"\", origin),\n imageUrl: buildImageUrl(source.image, placeholderImage),\n secondaryImageUrl: buildImageUrl(source.additionalImages?.[0], placeholderImage),\n tertiaryImageUrl: buildImageUrl(source.additionalImages?.[1], placeholderImage),\n };\n\n if (typeof normalized.slug !== \"string\" || normalized.slug.trim() === \"\") {\n normalized.slug = buildExploreUrl(\"\", propertySlug ?? \"\", origin);\n }\n\n if (\n resolvedPropertySlug &&\n !(normalized as Record<string, unknown>).propertySlug\n ) {\n (normalized as Record<string, unknown>).propertySlug = resolvedPropertySlug;\n }\n\n return normalized;\n }) ?? [];\n\n return {\n total: apiResponse.total?.value ?? hits.length,\n maxScore: apiResponse.max_score ?? null,\n type: apiResponse.type ?? \"units\",\n hits,\n };\n}\n\nexport interface UnitsFilterParams {\n date_availability?: string[];\n qty_bedrooms?: (number | string)[];\n base_price?: number | null;\n highlights?: string[];\n}\n\nexport interface UnitsClientFilters {\n date_availability?: string[];\n qty_bedrooms?: string[];\n base_price?: number;\n highlights: string[];\n}\n\nconst reverseAvailabilityMap: Record<string, string> = {\n asap: \"ASAP\",\n next_month: \"Next Month\",\n \"2_3_months\": \"2-3 Months\",\n all: \"Just Browsing\",\n};\n\nconst reverseBedroomMap: Record<number, string> = {\n 0: \"Studio\",\n 1: \"1 Bed\",\n 2: \"2 Bed\",\n 3: \"3+ Bed\",\n};\n\nconst bedroomLabels = new Set(Object.values(reverseBedroomMap));\n\nconst normalizeBedrooms = (\n bedrooms?: (number | string)[],\n): string[] | undefined => {\n if (!bedrooms || bedrooms.length === 0) return undefined;\n\n const result = new Set<string>();\n\n for (const bedroom of bedrooms) {\n if (typeof bedroom === \"number\") {\n const label = reverseBedroomMap[bedroom];\n if (label) result.add(label);\n continue;\n }\n\n const values = bedroom.split(\",\").map((v) => v.trim());\n\n for (const value of values) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isNaN(parsed) && reverseBedroomMap[parsed]) {\n result.add(reverseBedroomMap[parsed]);\n } else if (bedroomLabels.has(value)) {\n result.add(value);\n }\n }\n }\n\n return result.size > 0 ? Array.from(result) : undefined;\n};\n\nexport const transformUnitsApiResponseToClientFilters = (\n params: UnitsFilterParams,\n): UnitsClientFilters => {\n const dateAvailabilityLabels =\n params.date_availability && params.date_availability.length > 0\n ? params.date_availability.map(\n (value) => reverseAvailabilityMap[value] ?? value,\n )\n : undefined;\n\n return {\n date_availability: dateAvailabilityLabels,\n qty_bedrooms: normalizeBedrooms(params.qty_bedrooms),\n base_price: params.base_price ?? undefined,\n highlights: params.highlights ?? [],\n };\n};\n"],"names":["DEFAULT_WEB_ORIGIN","DEFAULT_PLACEHOLDER_IMAGE","normalizeSignature","signature","coerceString","value","propertySlugFallback","defaultSlug","source","buildExploreUrl","unitSlug","propertySlug","origin","buildImageUrl","image","placeholder","transformUnitsApiResponse","apiResponse","transformUnitsApiResponseToClient","options","placeholderImage","hits","_a","hit","title","slugCandidate","resolvedPropertySlug","normalized","_b","reverseAvailabilityMap","reverseBedroomMap","bedroomLabels","normalizeBedrooms","bedrooms","result","bedroom","label","values","v","parsed","transformUnitsApiResponseToClientFilters","params"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformers.cjs","sources":["../../../src/features/units/transformers.ts"],"sourcesContent":["export const DEFAULT_WEB_ORIGIN = \"//web.inresiapp.com\";\nexport const DEFAULT_PLACEHOLDER_IMAGE = \"/placeholder.jpg\";\n\nexport interface UnitImageApiResponse {\n CFURL?: string;\n name?: string;\n signature?: string;\n}\n\nexport interface UnitSourceApiResponse extends Record<string, unknown> {\n id?: number | string;\n name?: string;\n title?: string;\n slug?: string;\n base_price?: number;\n qty_bedrooms?: number | string;\n qty_bathrooms?: number | string;\n totalSqFt?: number;\n dim_sq_ft?: number | string;\n amenities?: unknown;\n highlights?: unknown;\n date_availability?: string | Date | null;\n unitSetAvailableOn?: string | Date | null;\n image?: UnitImageApiResponse;\n additionalImages?: UnitImageApiResponse[];\n}\n\nexport interface UnitHitApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n _index?: string;\n _id?: string;\n _score?: number;\n _source?: Source;\n}\n\nexport interface UnitsTotalInfo {\n value: number;\n relation?: string;\n}\n\nexport interface UnitsDataApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total?: UnitsTotalInfo;\n max_score?: number | null;\n hits?: UnitHitApiResponse<Source>[];\n type?: string;\n}\n\nexport interface UnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n data: UnitsDataApiResponse<Source>;\n}\n\nexport type TransformedUnit<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> = Source & {\n name: string;\n imageUrl: string;\n secondaryImageUrl?: string;\n tertiaryImageUrl?: string;\n};\n\nexport interface UnitsClientList<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total: number;\n maxScore: number | null;\n type: string;\n hits: TransformedUnit<Source>[];\n}\n\nexport interface TransformUnitsOptions {\n origin?: string;\n placeholderImage?: string;\n}\n\nconst normalizeSignature = (signature?: string): string => {\n if (!signature) return \"\";\n return signature.startsWith(\"?\") ? signature : `?${signature}`;\n};\n\nconst coerceString = (value: unknown): string | undefined => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n};\n\nconst propertySlugFallback = (\n defaultSlug: string,\n source: UnitSourceApiResponse,\n): string | undefined => {\n const slug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug);\n return slug ?? defaultSlug;\n};\n\nexport const buildExploreUrl = (\n unitSlug: string,\n propertySlug: string,\n origin = DEFAULT_WEB_ORIGIN,\n): string => `${origin}/${propertySlug}/unit/${unitSlug}/explore`;\n\nexport const buildImageUrl = (\n image?: UnitImageApiResponse,\n placeholder = DEFAULT_PLACEHOLDER_IMAGE,\n): string => {\n if (!image?.CFURL || !image?.name || !image?.signature) return placeholder;\n return `${image.CFURL}${image.name}${normalizeSignature(image.signature)}`;\n};\n\nexport function transformUnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(apiResponse: UnitsDataApiResponse<Source>): UnitsApiResponse<Source> {\n return { data: apiResponse };\n}\n\nexport function transformUnitsApiResponseToClient<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(\n apiResponse: UnitsDataApiResponse<Source>,\n propertySlug: string,\n options?: TransformUnitsOptions,\n): UnitsClientList<Source> {\n const origin = options?.origin ?? DEFAULT_WEB_ORIGIN;\n const placeholderImage = options?.placeholderImage ?? DEFAULT_PLACEHOLDER_IMAGE;\n\n const hits =\n apiResponse.hits?.map((hit) => {\n const source = (hit._source ?? {}) as Source & UnitSourceApiResponse;\n const unit_name =\n typeof source.name === \"string\"\n ? source.name\n : typeof source.title === \"string\"\n ? source.title\n : \"\";\n\n const slugCandidate =\n coerceString(source.slug) ?? coerceString((source as any).unit_slug) ?? \"\";\n const resolvedPropertySlug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug) ??\n propertySlugFallback(propertySlug, source) ??\n propertySlug;\n\n const normalized: TransformedUnit<Source> = {\n ...(source as Source),\n name: unit_name,\n // slug: buildExploreUrl(slugCandidate, resolvedPropertySlug ?? \"\", origin),\n imageUrl: buildImageUrl(source.image, placeholderImage),\n secondaryImageUrl: buildImageUrl(source.additionalImages?.[0], placeholderImage),\n tertiaryImageUrl: buildImageUrl(source.additionalImages?.[1], placeholderImage),\n };\n\n\n\n if (\n resolvedPropertySlug &&\n !(normalized as Record<string, unknown>).propertySlug\n ) {\n (normalized as Record<string, unknown>).propertySlug = resolvedPropertySlug;\n }\n\n return normalized;\n }) ?? [];\n return {\n total: apiResponse.total?.value ?? hits.length,\n maxScore: apiResponse.max_score ?? null,\n type: apiResponse.type ?? \"units\",\n hits,\n };\n}\n\nexport interface UnitsFilterParams {\n date_availability?: string[];\n qty_bedrooms?: (number | string)[];\n base_price?: number | null;\n highlights?: string[];\n}\n\nexport interface UnitsClientFilters {\n date_availability?: string[];\n qty_bedrooms?: string[];\n base_price?: number;\n highlights: string[];\n}\n\nconst reverseAvailabilityMap: Record<string, string> = {\n asap: \"ASAP\",\n next_month: \"Next Month\",\n \"2_3_months\": \"2-3 Months\",\n all: \"Just Browsing\",\n};\n\nconst reverseBedroomMap: Record<number, string> = {\n 0: \"Studio\",\n 1: \"1 Bed\",\n 2: \"2 Bed\",\n 3: \"3+ Bed\",\n};\n\nconst bedroomLabels = new Set(Object.values(reverseBedroomMap));\n\nconst normalizeBedrooms = (\n bedrooms?: (number | string)[],\n): string[] | undefined => {\n if (!bedrooms || bedrooms.length === 0) return undefined;\n\n const result = new Set<string>();\n\n for (const bedroom of bedrooms) {\n if (typeof bedroom === \"number\") {\n const label = reverseBedroomMap[bedroom];\n if (label) result.add(label);\n continue;\n }\n\n const values = bedroom.split(\",\").map((v) => v.trim());\n\n for (const value of values) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isNaN(parsed) && reverseBedroomMap[parsed]) {\n result.add(reverseBedroomMap[parsed]);\n } else if (bedroomLabels.has(value)) {\n result.add(value);\n }\n }\n }\n\n return result.size > 0 ? Array.from(result) : undefined;\n};\n\nexport const transformUnitsApiResponseToClientFilters = (\n params: UnitsFilterParams,\n): UnitsClientFilters => {\n const dateAvailabilityLabels =\n params.date_availability && params.date_availability.length > 0\n ? params.date_availability.map(\n (value) => reverseAvailabilityMap[value] ?? value,\n )\n : undefined;\n\n return {\n date_availability: dateAvailabilityLabels,\n qty_bedrooms: normalizeBedrooms(params.qty_bedrooms),\n base_price: params.base_price ?? undefined,\n highlights: params.highlights ?? [],\n };\n};\n"],"names":["DEFAULT_WEB_ORIGIN","DEFAULT_PLACEHOLDER_IMAGE","normalizeSignature","signature","coerceString","value","propertySlugFallback","defaultSlug","source","buildExploreUrl","unitSlug","propertySlug","origin","buildImageUrl","image","placeholder","transformUnitsApiResponse","apiResponse","transformUnitsApiResponseToClient","options","placeholderImage","hits","_a","hit","unit_name","resolvedPropertySlug","normalized","_b","reverseAvailabilityMap","reverseBedroomMap","bedroomLabels","normalizeBedrooms","bedrooms","result","bedroom","label","values","v","parsed","transformUnitsApiResponseToClientFilters","params"],"mappings":"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"}
|
|
@@ -42,8 +42,7 @@ export interface UnitsApiResponse<Source extends Record<string, unknown> = UnitS
|
|
|
42
42
|
data: UnitsDataApiResponse<Source>;
|
|
43
43
|
}
|
|
44
44
|
export type TransformedUnit<Source extends Record<string, unknown> = UnitSourceApiResponse> = Source & {
|
|
45
|
-
|
|
46
|
-
slug: string;
|
|
45
|
+
name: string;
|
|
47
46
|
imageUrl: string;
|
|
48
47
|
secondaryImageUrl?: string;
|
|
49
48
|
tertiaryImageUrl?: string;
|
|
@@ -1,73 +1,76 @@
|
|
|
1
|
-
const
|
|
1
|
+
const b = "//web.inresiapp.com", _ = "/placeholder.jpg", m = (t) => t ? t.startsWith("?") ? t : `?${t}` : "", s = (t) => {
|
|
2
2
|
if (typeof t == "string") return t;
|
|
3
3
|
if (typeof t == "number" || typeof t == "boolean")
|
|
4
4
|
return String(t);
|
|
5
|
-
},
|
|
6
|
-
function
|
|
5
|
+
}, v = (t, e) => s(e.propertySlug) ?? s(e.property_slug) ?? t, I = (t, e, r = b) => `${r}/${e}/unit/${t}/explore`, u = (t, e = _) => !(t != null && t.CFURL) || !(t != null && t.name) || !(t != null && t.signature) ? e : `${t.CFURL}${t.name}${m(t.signature)}`;
|
|
6
|
+
function L(t) {
|
|
7
7
|
return { data: t };
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
function x(t, e, r) {
|
|
10
|
+
var l, d;
|
|
11
|
+
r == null || r.origin;
|
|
12
|
+
const i = (r == null ? void 0 : r.placeholderImage) ?? _, o = ((l = t.hits) == null ? void 0 : l.map((h) => {
|
|
13
|
+
var y, f;
|
|
14
|
+
const n = h._source ?? {}, g = typeof n.name == "string" ? n.name : typeof n.title == "string" ? n.title : "";
|
|
15
|
+
s(n.slug) ?? s(n.unit_slug);
|
|
16
|
+
const p = s(n.propertySlug) ?? s(n.property_slug) ?? v(e, n) ?? e, c = {
|
|
14
17
|
...n,
|
|
15
|
-
|
|
16
|
-
slug:
|
|
17
|
-
imageUrl:
|
|
18
|
-
secondaryImageUrl:
|
|
19
|
-
tertiaryImageUrl:
|
|
18
|
+
name: g,
|
|
19
|
+
// slug: buildExploreUrl(slugCandidate, resolvedPropertySlug ?? "", origin),
|
|
20
|
+
imageUrl: u(n.image, i),
|
|
21
|
+
secondaryImageUrl: u((y = n.additionalImages) == null ? void 0 : y[0], i),
|
|
22
|
+
tertiaryImageUrl: u((f = n.additionalImages) == null ? void 0 : f[1], i)
|
|
20
23
|
};
|
|
21
|
-
return
|
|
24
|
+
return p && !c.propertySlug && (c.propertySlug = p), c;
|
|
22
25
|
})) ?? [];
|
|
23
26
|
return {
|
|
24
|
-
total: ((
|
|
27
|
+
total: ((d = t.total) == null ? void 0 : d.value) ?? o.length,
|
|
25
28
|
maxScore: t.max_score ?? null,
|
|
26
29
|
type: t.type ?? "units",
|
|
27
|
-
hits:
|
|
30
|
+
hits: o
|
|
28
31
|
};
|
|
29
32
|
}
|
|
30
|
-
const
|
|
33
|
+
const A = {
|
|
31
34
|
asap: "ASAP",
|
|
32
35
|
next_month: "Next Month",
|
|
33
36
|
"2_3_months": "2-3 Months",
|
|
34
37
|
all: "Just Browsing"
|
|
35
|
-
},
|
|
38
|
+
}, a = {
|
|
36
39
|
0: "Studio",
|
|
37
40
|
1: "1 Bed",
|
|
38
41
|
2: "2 Bed",
|
|
39
42
|
3: "3+ Bed"
|
|
40
|
-
},
|
|
43
|
+
}, S = new Set(Object.values(a)), U = (t) => {
|
|
41
44
|
if (!t || t.length === 0) return;
|
|
42
45
|
const e = /* @__PURE__ */ new Set();
|
|
43
46
|
for (const r of t) {
|
|
44
47
|
if (typeof r == "number") {
|
|
45
|
-
const o =
|
|
48
|
+
const o = a[r];
|
|
46
49
|
o && e.add(o);
|
|
47
50
|
continue;
|
|
48
51
|
}
|
|
49
|
-
const
|
|
50
|
-
for (const o of
|
|
52
|
+
const i = r.split(",").map((o) => o.trim());
|
|
53
|
+
for (const o of i) {
|
|
51
54
|
const l = Number.parseInt(o, 10);
|
|
52
|
-
!Number.isNaN(l) &&
|
|
55
|
+
!Number.isNaN(l) && a[l] ? e.add(a[l]) : S.has(o) && e.add(o);
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
return e.size > 0 ? Array.from(e) : void 0;
|
|
56
|
-
},
|
|
59
|
+
}, B = (t) => ({
|
|
57
60
|
date_availability: t.date_availability && t.date_availability.length > 0 ? t.date_availability.map(
|
|
58
|
-
(r) =>
|
|
61
|
+
(r) => A[r] ?? r
|
|
59
62
|
) : void 0,
|
|
60
|
-
qty_bedrooms:
|
|
63
|
+
qty_bedrooms: U(t.qty_bedrooms),
|
|
61
64
|
base_price: t.base_price ?? void 0,
|
|
62
65
|
highlights: t.highlights ?? []
|
|
63
66
|
});
|
|
64
67
|
export {
|
|
65
68
|
_ as DEFAULT_PLACEHOLDER_IMAGE,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
b as DEFAULT_WEB_ORIGIN,
|
|
70
|
+
I as buildExploreUrl,
|
|
71
|
+
u as buildImageUrl,
|
|
72
|
+
L as transformUnitsApiResponse,
|
|
73
|
+
x as transformUnitsApiResponseToClient,
|
|
74
|
+
B as transformUnitsApiResponseToClientFilters
|
|
72
75
|
};
|
|
73
76
|
//# sourceMappingURL=transformers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.mjs","sources":["../../../src/features/units/transformers.ts"],"sourcesContent":["export const DEFAULT_WEB_ORIGIN = \"//web.inresiapp.com\";\nexport const DEFAULT_PLACEHOLDER_IMAGE = \"/placeholder.jpg\";\n\nexport interface UnitImageApiResponse {\n CFURL?: string;\n name?: string;\n signature?: string;\n}\n\nexport interface UnitSourceApiResponse extends Record<string, unknown> {\n id?: number | string;\n name?: string;\n title?: string;\n slug?: string;\n base_price?: number;\n qty_bedrooms?: number | string;\n qty_bathrooms?: number | string;\n totalSqFt?: number;\n dim_sq_ft?: number | string;\n amenities?: unknown;\n highlights?: unknown;\n date_availability?: string | Date | null;\n unitSetAvailableOn?: string | Date | null;\n image?: UnitImageApiResponse;\n additionalImages?: UnitImageApiResponse[];\n}\n\nexport interface UnitHitApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n _index?: string;\n _id?: string;\n _score?: number;\n _source?: Source;\n}\n\nexport interface UnitsTotalInfo {\n value: number;\n relation?: string;\n}\n\nexport interface UnitsDataApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total?: UnitsTotalInfo;\n max_score?: number | null;\n hits?: UnitHitApiResponse<Source>[];\n type?: string;\n}\n\nexport interface UnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n data: UnitsDataApiResponse<Source>;\n}\n\nexport type TransformedUnit<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> = Source & {\n title: string;\n slug: string;\n imageUrl: string;\n secondaryImageUrl?: string;\n tertiaryImageUrl?: string;\n};\n\nexport interface UnitsClientList<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total: number;\n maxScore: number | null;\n type: string;\n hits: TransformedUnit<Source>[];\n}\n\nexport interface TransformUnitsOptions {\n origin?: string;\n placeholderImage?: string;\n}\n\nconst normalizeSignature = (signature?: string): string => {\n if (!signature) return \"\";\n return signature.startsWith(\"?\") ? signature : `?${signature}`;\n};\n\nconst coerceString = (value: unknown): string | undefined => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n};\n\nconst propertySlugFallback = (\n defaultSlug: string,\n source: UnitSourceApiResponse,\n): string | undefined => {\n const slug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug);\n return slug ?? defaultSlug;\n};\n\nexport const buildExploreUrl = (\n unitSlug: string,\n propertySlug: string,\n origin = DEFAULT_WEB_ORIGIN,\n): string => `${origin}/${propertySlug}/unit/${unitSlug}/explore`;\n\nexport const buildImageUrl = (\n image?: UnitImageApiResponse,\n placeholder = DEFAULT_PLACEHOLDER_IMAGE,\n): string => {\n if (!image?.CFURL || !image?.name || !image?.signature) return placeholder;\n return `${image.CFURL}${image.name}${normalizeSignature(image.signature)}`;\n};\n\nexport function transformUnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(apiResponse: UnitsDataApiResponse<Source>): UnitsApiResponse<Source> {\n return { data: apiResponse };\n}\n\nexport function transformUnitsApiResponseToClient<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(\n apiResponse: UnitsDataApiResponse<Source>,\n propertySlug: string,\n options?: TransformUnitsOptions,\n): UnitsClientList<Source> {\n const origin = options?.origin ?? DEFAULT_WEB_ORIGIN;\n const placeholderImage = options?.placeholderImage ?? DEFAULT_PLACEHOLDER_IMAGE;\n\n const hits =\n apiResponse.hits?.map((hit) => {\n const source = (hit._source ?? {}) as Source & UnitSourceApiResponse;\n const title =\n typeof source.name === \"string\"\n ? source.name\n : typeof source.title === \"string\"\n ? source.title\n : \"\";\n\n const slugCandidate =\n coerceString(source.slug) ?? coerceString((source as any).unit_slug) ?? \"\";\n const resolvedPropertySlug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug) ??\n propertySlugFallback(propertySlug, source) ??\n propertySlug;\n\n const normalized: TransformedUnit<Source> = {\n ...(source as Source),\n title,\n slug: buildExploreUrl(slugCandidate, resolvedPropertySlug ?? \"\", origin),\n imageUrl: buildImageUrl(source.image, placeholderImage),\n secondaryImageUrl: buildImageUrl(source.additionalImages?.[0], placeholderImage),\n tertiaryImageUrl: buildImageUrl(source.additionalImages?.[1], placeholderImage),\n };\n\n if (typeof normalized.slug !== \"string\" || normalized.slug.trim() === \"\") {\n normalized.slug = buildExploreUrl(\"\", propertySlug ?? \"\", origin);\n }\n\n if (\n resolvedPropertySlug &&\n !(normalized as Record<string, unknown>).propertySlug\n ) {\n (normalized as Record<string, unknown>).propertySlug = resolvedPropertySlug;\n }\n\n return normalized;\n }) ?? [];\n\n return {\n total: apiResponse.total?.value ?? hits.length,\n maxScore: apiResponse.max_score ?? null,\n type: apiResponse.type ?? \"units\",\n hits,\n };\n}\n\nexport interface UnitsFilterParams {\n date_availability?: string[];\n qty_bedrooms?: (number | string)[];\n base_price?: number | null;\n highlights?: string[];\n}\n\nexport interface UnitsClientFilters {\n date_availability?: string[];\n qty_bedrooms?: string[];\n base_price?: number;\n highlights: string[];\n}\n\nconst reverseAvailabilityMap: Record<string, string> = {\n asap: \"ASAP\",\n next_month: \"Next Month\",\n \"2_3_months\": \"2-3 Months\",\n all: \"Just Browsing\",\n};\n\nconst reverseBedroomMap: Record<number, string> = {\n 0: \"Studio\",\n 1: \"1 Bed\",\n 2: \"2 Bed\",\n 3: \"3+ Bed\",\n};\n\nconst bedroomLabels = new Set(Object.values(reverseBedroomMap));\n\nconst normalizeBedrooms = (\n bedrooms?: (number | string)[],\n): string[] | undefined => {\n if (!bedrooms || bedrooms.length === 0) return undefined;\n\n const result = new Set<string>();\n\n for (const bedroom of bedrooms) {\n if (typeof bedroom === \"number\") {\n const label = reverseBedroomMap[bedroom];\n if (label) result.add(label);\n continue;\n }\n\n const values = bedroom.split(\",\").map((v) => v.trim());\n\n for (const value of values) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isNaN(parsed) && reverseBedroomMap[parsed]) {\n result.add(reverseBedroomMap[parsed]);\n } else if (bedroomLabels.has(value)) {\n result.add(value);\n }\n }\n }\n\n return result.size > 0 ? Array.from(result) : undefined;\n};\n\nexport const transformUnitsApiResponseToClientFilters = (\n params: UnitsFilterParams,\n): UnitsClientFilters => {\n const dateAvailabilityLabels =\n params.date_availability && params.date_availability.length > 0\n ? params.date_availability.map(\n (value) => reverseAvailabilityMap[value] ?? value,\n )\n : undefined;\n\n return {\n date_availability: dateAvailabilityLabels,\n qty_bedrooms: normalizeBedrooms(params.qty_bedrooms),\n base_price: params.base_price ?? undefined,\n highlights: params.highlights ?? [],\n };\n};\n"],"names":["DEFAULT_WEB_ORIGIN","DEFAULT_PLACEHOLDER_IMAGE","normalizeSignature","signature","coerceString","value","propertySlugFallback","defaultSlug","source","buildExploreUrl","unitSlug","propertySlug","origin","buildImageUrl","image","placeholder","transformUnitsApiResponse","apiResponse","transformUnitsApiResponseToClient","options","_a","_b","placeholderImage","hits","hit","title","slugCandidate","resolvedPropertySlug","normalized","reverseAvailabilityMap","reverseBedroomMap","bedroomLabels","normalizeBedrooms","bedrooms","result","bedroom","label","values","v","parsed","transformUnitsApiResponseToClientFilters","params"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformers.mjs","sources":["../../../src/features/units/transformers.ts"],"sourcesContent":["export const DEFAULT_WEB_ORIGIN = \"//web.inresiapp.com\";\nexport const DEFAULT_PLACEHOLDER_IMAGE = \"/placeholder.jpg\";\n\nexport interface UnitImageApiResponse {\n CFURL?: string;\n name?: string;\n signature?: string;\n}\n\nexport interface UnitSourceApiResponse extends Record<string, unknown> {\n id?: number | string;\n name?: string;\n title?: string;\n slug?: string;\n base_price?: number;\n qty_bedrooms?: number | string;\n qty_bathrooms?: number | string;\n totalSqFt?: number;\n dim_sq_ft?: number | string;\n amenities?: unknown;\n highlights?: unknown;\n date_availability?: string | Date | null;\n unitSetAvailableOn?: string | Date | null;\n image?: UnitImageApiResponse;\n additionalImages?: UnitImageApiResponse[];\n}\n\nexport interface UnitHitApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n _index?: string;\n _id?: string;\n _score?: number;\n _source?: Source;\n}\n\nexport interface UnitsTotalInfo {\n value: number;\n relation?: string;\n}\n\nexport interface UnitsDataApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total?: UnitsTotalInfo;\n max_score?: number | null;\n hits?: UnitHitApiResponse<Source>[];\n type?: string;\n}\n\nexport interface UnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n data: UnitsDataApiResponse<Source>;\n}\n\nexport type TransformedUnit<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> = Source & {\n name: string;\n imageUrl: string;\n secondaryImageUrl?: string;\n tertiaryImageUrl?: string;\n};\n\nexport interface UnitsClientList<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n> {\n total: number;\n maxScore: number | null;\n type: string;\n hits: TransformedUnit<Source>[];\n}\n\nexport interface TransformUnitsOptions {\n origin?: string;\n placeholderImage?: string;\n}\n\nconst normalizeSignature = (signature?: string): string => {\n if (!signature) return \"\";\n return signature.startsWith(\"?\") ? signature : `?${signature}`;\n};\n\nconst coerceString = (value: unknown): string | undefined => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return undefined;\n};\n\nconst propertySlugFallback = (\n defaultSlug: string,\n source: UnitSourceApiResponse,\n): string | undefined => {\n const slug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug);\n return slug ?? defaultSlug;\n};\n\nexport const buildExploreUrl = (\n unitSlug: string,\n propertySlug: string,\n origin = DEFAULT_WEB_ORIGIN,\n): string => `${origin}/${propertySlug}/unit/${unitSlug}/explore`;\n\nexport const buildImageUrl = (\n image?: UnitImageApiResponse,\n placeholder = DEFAULT_PLACEHOLDER_IMAGE,\n): string => {\n if (!image?.CFURL || !image?.name || !image?.signature) return placeholder;\n return `${image.CFURL}${image.name}${normalizeSignature(image.signature)}`;\n};\n\nexport function transformUnitsApiResponse<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(apiResponse: UnitsDataApiResponse<Source>): UnitsApiResponse<Source> {\n return { data: apiResponse };\n}\n\nexport function transformUnitsApiResponseToClient<\n Source extends Record<string, unknown> = UnitSourceApiResponse,\n>(\n apiResponse: UnitsDataApiResponse<Source>,\n propertySlug: string,\n options?: TransformUnitsOptions,\n): UnitsClientList<Source> {\n const origin = options?.origin ?? DEFAULT_WEB_ORIGIN;\n const placeholderImage = options?.placeholderImage ?? DEFAULT_PLACEHOLDER_IMAGE;\n\n const hits =\n apiResponse.hits?.map((hit) => {\n const source = (hit._source ?? {}) as Source & UnitSourceApiResponse;\n const unit_name =\n typeof source.name === \"string\"\n ? source.name\n : typeof source.title === \"string\"\n ? source.title\n : \"\";\n\n const slugCandidate =\n coerceString(source.slug) ?? coerceString((source as any).unit_slug) ?? \"\";\n const resolvedPropertySlug =\n coerceString((source as any).propertySlug) ??\n coerceString((source as any).property_slug) ??\n propertySlugFallback(propertySlug, source) ??\n propertySlug;\n\n const normalized: TransformedUnit<Source> = {\n ...(source as Source),\n name: unit_name,\n // slug: buildExploreUrl(slugCandidate, resolvedPropertySlug ?? \"\", origin),\n imageUrl: buildImageUrl(source.image, placeholderImage),\n secondaryImageUrl: buildImageUrl(source.additionalImages?.[0], placeholderImage),\n tertiaryImageUrl: buildImageUrl(source.additionalImages?.[1], placeholderImage),\n };\n\n\n\n if (\n resolvedPropertySlug &&\n !(normalized as Record<string, unknown>).propertySlug\n ) {\n (normalized as Record<string, unknown>).propertySlug = resolvedPropertySlug;\n }\n\n return normalized;\n }) ?? [];\n return {\n total: apiResponse.total?.value ?? hits.length,\n maxScore: apiResponse.max_score ?? null,\n type: apiResponse.type ?? \"units\",\n hits,\n };\n}\n\nexport interface UnitsFilterParams {\n date_availability?: string[];\n qty_bedrooms?: (number | string)[];\n base_price?: number | null;\n highlights?: string[];\n}\n\nexport interface UnitsClientFilters {\n date_availability?: string[];\n qty_bedrooms?: string[];\n base_price?: number;\n highlights: string[];\n}\n\nconst reverseAvailabilityMap: Record<string, string> = {\n asap: \"ASAP\",\n next_month: \"Next Month\",\n \"2_3_months\": \"2-3 Months\",\n all: \"Just Browsing\",\n};\n\nconst reverseBedroomMap: Record<number, string> = {\n 0: \"Studio\",\n 1: \"1 Bed\",\n 2: \"2 Bed\",\n 3: \"3+ Bed\",\n};\n\nconst bedroomLabels = new Set(Object.values(reverseBedroomMap));\n\nconst normalizeBedrooms = (\n bedrooms?: (number | string)[],\n): string[] | undefined => {\n if (!bedrooms || bedrooms.length === 0) return undefined;\n\n const result = new Set<string>();\n\n for (const bedroom of bedrooms) {\n if (typeof bedroom === \"number\") {\n const label = reverseBedroomMap[bedroom];\n if (label) result.add(label);\n continue;\n }\n\n const values = bedroom.split(\",\").map((v) => v.trim());\n\n for (const value of values) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isNaN(parsed) && reverseBedroomMap[parsed]) {\n result.add(reverseBedroomMap[parsed]);\n } else if (bedroomLabels.has(value)) {\n result.add(value);\n }\n }\n }\n\n return result.size > 0 ? Array.from(result) : undefined;\n};\n\nexport const transformUnitsApiResponseToClientFilters = (\n params: UnitsFilterParams,\n): UnitsClientFilters => {\n const dateAvailabilityLabels =\n params.date_availability && params.date_availability.length > 0\n ? params.date_availability.map(\n (value) => reverseAvailabilityMap[value] ?? value,\n )\n : undefined;\n\n return {\n date_availability: dateAvailabilityLabels,\n qty_bedrooms: normalizeBedrooms(params.qty_bedrooms),\n base_price: params.base_price ?? undefined,\n highlights: params.highlights ?? [],\n };\n};\n"],"names":["DEFAULT_WEB_ORIGIN","DEFAULT_PLACEHOLDER_IMAGE","normalizeSignature","signature","coerceString","value","propertySlugFallback","defaultSlug","source","buildExploreUrl","unitSlug","propertySlug","origin","buildImageUrl","image","placeholder","transformUnitsApiResponse","apiResponse","transformUnitsApiResponseToClient","options","_a","_b","placeholderImage","hits","hit","unit_name","resolvedPropertySlug","normalized","reverseAvailabilityMap","reverseBedroomMap","bedroomLabels","normalizeBedrooms","bedrooms","result","bedroom","label","values","v","parsed","transformUnitsApiResponseToClientFilters","params"],"mappings":"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"}
|
package/dist/schema.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),m=1,g=t.object({uuid:t.string().uuid(),createdAt:t.string().datetime().optional()}),u=t.object({isFavorite:t.boolean().optional(),viewedDate:t.string().optional()}),c=u,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),m=1,g=t.object({uuid:t.string().uuid(),createdAt:t.string().datetime().optional()}),u=t.object({isFavorite:t.boolean().optional(),viewedDate:t.string().optional()}),c=u,a=t.union([t.string(),t.number(),t.boolean(),t.record(t.unknown())]),b=t.union([a,t.array(a)]),n=t.object({date_availability:b.nullable().optional(),qty_bedrooms:t.union([t.array(a),t.null()]).optional(),base_price:t.number().nullable().optional(),highlights:t.array(a).optional()}),i=t.enum(["all","bestFit","closestMatch","favorites","loading"]),e=t.enum(["relevance","newest","cost_low_to_high","cost_high_to_low"]),r=t.object({limit:t.number().default(10),page:t.number().default(1),sortBy:e.default("relevance"),base_price:t.number().nullable().optional(),date_availability:t.array(t.string()).optional(),qty_bedrooms:t.array(t.number()).optional(),highlights:t.array(t.string()).optional(),nearBuilding:t.array(t.string()).optional(),nearNeighbourhood:t.array(t.string()).optional()}),y=t.object({data:t.record(c),filters:n,tempFilters:n,apiFilters:r,resultsMode:i,propertySlug:t.string().nullable(),resolvedQuestionnaireValues:t.record(t.array(t.string())),sortBy:e}),o=t.object({id:t.union([t.number().int(),t.string()]).optional(),name:t.string(),slug:t.string().nullable().optional(),qty_bedrooms:t.coerce.number().nullable().optional(),qty_bathrooms:t.coerce.number().nullable().optional(),base_price:t.coerce.number().nullable().optional(),dim_sq_ft:t.coerce.number().nullable().optional(),propertyId:t.union([t.number().int(),t.string()]).optional(),is_available:t.boolean().optional(),createdAt:t.string().datetime().optional(),updatedAt:t.string().datetime().optional(),date_availability:t.string().datetime().nullable().optional(),unitSetAvailableOn:t.string().datetime().nullable().optional(),floorPlanId:t.union([t.number().int(),t.string()]).nullable().optional(),property:t.unknown().optional(),amenities:t.array(t.unknown()).optional(),highlights:t.array(t.unknown()).optional(),floorPlan:t.unknown().nullable().optional(),renderedStyle:t.array(t.unknown()).optional(),video:t.unknown().nullable().optional(),videoThumbnail:t.unknown().nullable().optional(),embedGif:t.unknown().nullable().optional(),userId:t.union([t.number().int(),t.string()]).optional(),user:t.unknown().optional(),status:t.string().optional(),external_id:t.string().nullable().optional(),unitRenderedStyles:t.array(t.unknown()).optional()}),l=t.object({id:t.union([t.number().int(),t.string()]),createdAt:t.string().datetime(),updatedAt:t.string().datetime(),name:t.string(),slug:t.string().nullable().optional(),description:t.string(),contact_name:t.string().nullable().optional(),contact_email:t.string().optional(),contact_phone:t.string().nullable().optional(),notification_email:t.string().nullable().optional(),logo:t.unknown().nullable().optional(),leadMedia:t.unknown().nullable().optional(),overviewImages:t.array(t.unknown()).optional(),amenityImages:t.array(t.unknown()).optional(),address_street:t.string().optional(),address_city:t.string().optional(),address_state:t.string().nullable().optional(),ingestionFileName:t.string().nullable().optional(),address_zip:t.string().optional(),address_country:t.string().optional(),units:t.array(o).optional(),amenities:t.array(t.unknown()).optional(),highlights:t.array(t.unknown()).optional(),externalServices:t.array(t.unknown()).optional(),userId:t.union([t.number().int(),t.string()]).optional(),user:t.unknown().optional(),status:t.string().optional(),floorPlans:t.array(t.unknown()).optional()}),h=t.object({id:t.union([t.number().int(),t.string()]).optional(),email:t.string().email().optional(),first_name:t.string().optional(),last_name:t.string().optional(),password:t.string().optional(),salt:t.string().optional(),role:t.string().optional(),Property:t.array(l).optional(),Unit:t.array(o).optional(),floorPlans:t.array(t.unknown()).optional(),createdAt:t.string().datetime().optional(),updatedAt:t.string().datetime().optional()}),p=t.object({unitId:t.string(),viewedDate:t.string()}),d=t.object({timezone:t.string().optional(),favouriteUnits:t.array(t.coerce.string()).optional(),preferences:t.record(t.unknown()).optional()}),s=t.object({id:t.coerce.string(),slug:t.string(),favoritedUnits:t.array(t.string()),tourContactedOn:t.string().nullable(),viewedUnits:t.array(p),questionnaireResults:t.unknown().nullable().optional(),tourContactData:d.nullable().optional(),data:l.optional()}),S=t.object({data:t.record(s),propertySlug:t.string().nullable(),propertyId:t.string().nullable(),hasPreviouslySearched:t.array(t.string())}),w=t.object({id:t.number().int(),userId:t.number().int(),unitId:t.number().int(),createdAt:t.string().datetime()}),_=t.object({unitIds:t.array(t.string()),updatedAt:t.string().datetime()}),v=t.object({properties:t.record(s),currentPropertyId:t.string().nullable(),currentPropertySlug:t.string().nullable(),hasPreviouslySearched:t.array(t.string()),unitResults:t.array(o),filters:n,tempFilters:n,apiFilters:r,resultsMode:i,resolvedQuestionnaireValues:t.record(t.array(t.string())),sortBy:e});exports.ApiUserSchema=h;exports.AppStoreDataSchema=y;exports.FavoritesSchema=_;exports.FiltersSchema=n;exports.PropertySchema=l;exports.PropertyStoreDataSchema=S;exports.QueryParamsSchema=r;exports.ResultsModeEnum=i;exports.SCHEMA_VERSION=m;exports.SortByEnum=e;exports.TourContactDataSchema=d;exports.UnifiedStoreDataSchema=v;exports.UnitDataSchema=c;exports.UnitFavoriteSchema=w;exports.UnitSchema=o;exports.UserPropertyStateSchema=s;exports.UserSchema=g;exports.UserUnitDataSchema=u;exports.ViewedUnitSchema=p;
|
|
2
2
|
//# sourceMappingURL=schema.cjs.map
|
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.cjs","sources":["../src/schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const SCHEMA_VERSION = 1 as const;\n\n// Entities\nexport const UserSchema = z.object({\n uuid: z.string().uuid(),\n // stored as ISO string; include to match ensureUser()\n createdAt: z.string().datetime().optional(),\n});\nexport type User = z.infer<typeof UserSchema>;\n\n// User-specific Unit state\nexport const UserUnitDataSchema = z.object({\n isFavorite: z.boolean().optional(),\n viewedDate: z.string().optional(),\n});\n// Back-compat alias (to be deprecated): keep existing name\nexport const UnitDataSchema = UserUnitDataSchema;\nexport type UnitData = z.infer<typeof UserUnitDataSchema>;\n\n// Filters and query params\nconst FilterOptionValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.unknown()),\n]);\n\nconst FilterCollectionSchema = z.union([\n FilterOptionValueSchema,\n z.array(FilterOptionValueSchema),\n]);\n\nexport const FiltersSchema = z.object({\n date_availability: FilterCollectionSchema.nullable().optional(),\n qty_bedrooms: z.union([z.array(FilterOptionValueSchema), z.null()]).optional(),\n base_price: z.number().nullable().optional(),\n highlights: z.array(FilterOptionValueSchema).optional(),\n});\nexport type Filters = z.infer<typeof FiltersSchema>;\n\nexport const ResultsModeEnum = z.enum([\"all\", \"bestFit\", \"closestMatch\", \"favorites\", \"loading\"]);\nexport type ResultsMode = z.infer<typeof ResultsModeEnum>;\nexport const SortByEnum = z.enum([\"relevance\", \"newest\", \"cost_low_to_high\", \"cost_high_to_low\"]);\nexport type SortBy = z.infer<typeof SortByEnum>;\n\nexport const QueryParamsSchema = z.object({\n limit: z.number().default(10),\n page: z.number().default(1),\n sortBy: SortByEnum.default(\"relevance\"),\n base_price: z.number().nullable().optional(),\n date_availability: z.array(z.string()).optional(),\n qty_bedrooms: z.array(z.number()).optional(),\n highlights: z.array(z.string()).optional(),\n nearBuilding: z.array(z.string()).optional(),\n nearNeighbourhood: z.array(z.string()).optional(),\n});\nexport type QueryParams = z.infer<typeof QueryParamsSchema>;\n\n// App (standalone) persisted state\nexport const AppStoreDataSchema = z.object({\n data: z.record(UnitDataSchema),\n filters: FiltersSchema,\n tempFilters: FiltersSchema,\n apiFilters: QueryParamsSchema,\n resultsMode: ResultsModeEnum,\n propertySlug: z.string().nullable(),\n resolvedQuestionnaireValues: z.record(z.array(z.string())),\n sortBy: SortByEnum,\n});\nexport type AppStoreData = z.infer<typeof AppStoreDataSchema>;\n\n// Domain models (optional fields to mirror API shape without breaking)\n// Mirrors the backend Unit model with relaxed optional fields\nexport const UnitSchema = z.object({\n id: z.union([z.number().int(), z.string()]).optional(),\n title: z.string(),\n slug: z.string().nullable().optional(),\n qty_bedrooms: z.coerce.number().nullable().optional(),\n qty_bathrooms: z.coerce.number().nullable().optional(),\n base_price: z.coerce.number().nullable().optional(),\n dim_sq_ft: z.coerce.number().nullable().optional(),\n propertyId: z.union([z.number().int(), z.string()]).optional(),\n is_available: z.boolean().optional(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n date_availability: z.string().datetime().nullable().optional(),\n unitSetAvailableOn: z.string().datetime().nullable().optional(),\n floorPlanId: z.union([z.number().int(), z.string()]).nullable().optional(),\n // Relations and nested structures kept loose to avoid coupling\n property: z.unknown().optional(),\n amenities: z.array(z.unknown()).optional(),\n highlights: z.array(z.unknown()).optional(),\n floorPlan: z.unknown().nullable().optional(),\n renderedStyle: z.array(z.unknown()).optional(),\n video: z.unknown().nullable().optional(),\n videoThumbnail: z.unknown().nullable().optional(),\n embedGif: z.unknown().nullable().optional(),\n userId: z.union([z.number().int(), z.string()]).optional(),\n user: z.unknown().optional(),\n status: z.string().optional(),\n external_id: z.string().nullable().optional(),\n unitRenderedStyles: z.array(z.unknown()).optional(),\n});\nexport type Unit = z.infer<typeof UnitSchema>;\n\n// Mirrors the backend Property model with relaxed optional fields\nexport const PropertySchema = z.object({\n /**\n * Property (readable shape)\n *\n * interface Property {\n * id: number | string\n * createdAt: string // ISO\n * updatedAt: string // ISO\n * title: string\n * slug?: string | null\n * description: string\n * contactName?: string | null\n * contactEmail?: string\n * contactPhone?: string | null\n * notificationEmail?: string | null\n * logo?: unknown | null\n * leadMedia?: unknown | null\n * overviewImages?: unknown[]\n * amenityImages?: unknown[]\n * street?: string\n * city?: string\n * state?: string | null\n * zip?: string\n * country?: string\n * units?: Unit[]\n * amenities?: unknown[]\n * highlights?: unknown[]\n * externalServices?: unknown[]\n * userId?: number | string\n * user?: unknown\n * status?: string\n * floorPlans?: unknown[]\n * }\n */\n id: z.union([z.number().int(), z.string()]),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n title: z.string(),\n slug: z.string().nullable().optional(),\n description: z.string(),\n contact_name: z.string().nullable().optional(),\n contact_email: z.string().optional(),\n contact_phone: z.string().nullable().optional(),\n notification_email: z.string().nullable().optional(),\n logo: z.unknown().nullable().optional(),\n leadMedia: z.unknown().nullable().optional(),\n overviewImages: z.array(z.unknown()).optional(),\n amenityImages: z.array(z.unknown()).optional(),\n address_street: z.string().optional(),\n address_city: z.string().optional(),\n address_state: z.string().nullable().optional(),\n ingestionFileName: z.string().nullable().optional(),\n address_zip: z.string().optional(),\n address_country: z.string().optional(),\n units: z.array(UnitSchema).optional(),\n amenities: z.array(z.unknown()).optional(),\n highlights: z.array(z.unknown()).optional(),\n externalServices: z.array(z.unknown()).optional(),\n userId: z.union([z.number().int(), z.string()]).optional(),\n user: z.unknown().optional(),\n status: z.string().optional(),\n floorPlans: z.array(z.unknown()).optional(),\n});\nexport type Property = z.infer<typeof PropertySchema>;\n\n// Mirrors the backend User model with relaxed optional fields\n// Named ApiUserSchema to avoid conflict with local UserSchema (uuid-only)\nexport const ApiUserSchema = z.object({\n id: z.union([z.number().int(), z.string()]).optional(),\n email: z.string().email().optional(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n password: z.string().optional(),\n salt: z.string().optional(),\n role: z.string().optional(),\n Property: z.array(PropertySchema).optional(),\n Unit: z.array(UnitSchema).optional(),\n floorPlans: z.array(z.unknown()).optional(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\n\n// Property-related schemas used by the PropertyStore and UnifiedStore\nexport const ViewedUnitSchema = z.object({\n unitId: z.string(),\n viewedDate: z.string(),\n});\nexport type ViewedUnit = z.infer<typeof ViewedUnitSchema>;\n\nexport const TourContactDataSchema = z.object({\n timezone: z.string().optional(),\n favouriteUnits: z.array(z.coerce.string()).optional(),\n preferences: z.record(z.unknown()).optional(),\n});\nexport type TourContactData = z.infer<typeof TourContactDataSchema>;\n\nexport const UserPropertyStateSchema = z.object({\n id: z.coerce.string(),\n slug: z.string(),\n favoritedUnits: z.array(z.string()),\n tourContactedOn: z.string().nullable(),\n viewedUnits: z.array(ViewedUnitSchema),\n questionnaireResults: z.unknown().nullable().optional(),\n tourContactData: TourContactDataSchema.nullable().optional(),\n // Full property payload persisted alongside per-property state\n data: PropertySchema.optional(),\n});\nexport type UserPropertyState = z.infer<typeof UserPropertyStateSchema>;\n\nexport const PropertyStoreDataSchema = z.object({\n data: z.record(UserPropertyStateSchema),\n propertySlug: z.string().nullable(),\n propertyId: z.string().nullable(),\n hasPreviouslySearched: z.array(z.string()),\n});\nexport type PropertyStoreData = z.infer<typeof PropertyStoreDataSchema>;\n\n// favorites\nexport const UnitFavoriteSchema = z.object({\n id: z.number().int(),\n userId: z.number().int(),\n unitId: z.number().int(),\n createdAt: z.string().datetime(),\n});\nexport type UnitFavorite = z.infer<typeof UnitFavoriteSchema>;\n\nexport const FavoritesSchema = z.object({\n // per-property favorites are stored under a KV key, so propertyId is implicit\n unitIds: z.array(z.string()),\n updatedAt: z.string().datetime(),\n});\nexport type Favorites = z.infer<typeof FavoritesSchema>;\n\n// Unified store schema (combines property + app persistent bits)\nexport const UnifiedStoreDataSchema = z.object({\n // Property-related data\n properties: z.record(UserPropertyStateSchema),\n currentPropertyId: z.string().nullable(),\n currentPropertySlug: z.string().nullable(),\n hasPreviouslySearched: z.array(z.string()),\n\n // App-level data\n unitResults: z.array(UnitSchema),\n filters: FiltersSchema,\n tempFilters: FiltersSchema,\n apiFilters: QueryParamsSchema,\n resultsMode: ResultsModeEnum,\n resolvedQuestionnaireValues: z.record(z.array(z.string())),\n sortBy: SortByEnum,\n});\nexport type UnifiedStoreData = z.infer<typeof UnifiedStoreDataSchema>;\n"],"names":["SCHEMA_VERSION","UserSchema","z.object","z.string","UserUnitDataSchema","z.boolean","UnitDataSchema","FilterOptionValueSchema","z.union","z.number","z.record","z.unknown","FilterCollectionSchema","z.array","FiltersSchema","z.null","ResultsModeEnum","z.enum","SortByEnum","QueryParamsSchema","AppStoreDataSchema","UnitSchema","z.coerce","PropertySchema","ApiUserSchema","ViewedUnitSchema","TourContactDataSchema","UserPropertyStateSchema","PropertyStoreDataSchema","UnitFavoriteSchema","FavoritesSchema","UnifiedStoreDataSchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.cjs","sources":["../src/schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const SCHEMA_VERSION = 1 as const;\n\n// Entities\nexport const UserSchema = z.object({\n uuid: z.string().uuid(),\n // stored as ISO string; include to match ensureUser()\n createdAt: z.string().datetime().optional(),\n});\nexport type User = z.infer<typeof UserSchema>;\n\n// User-specific Unit state\nexport const UserUnitDataSchema = z.object({\n isFavorite: z.boolean().optional(),\n viewedDate: z.string().optional(),\n});\n// Back-compat alias (to be deprecated): keep existing name\nexport const UnitDataSchema = UserUnitDataSchema;\nexport type UnitData = z.infer<typeof UserUnitDataSchema>;\n\n// Filters and query params\nconst FilterOptionValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.unknown()),\n]);\n\nconst FilterCollectionSchema = z.union([\n FilterOptionValueSchema,\n z.array(FilterOptionValueSchema),\n]);\n\nexport const FiltersSchema = z.object({\n date_availability: FilterCollectionSchema.nullable().optional(),\n qty_bedrooms: z.union([z.array(FilterOptionValueSchema), z.null()]).optional(),\n base_price: z.number().nullable().optional(),\n highlights: z.array(FilterOptionValueSchema).optional(),\n});\nexport type Filters = z.infer<typeof FiltersSchema>;\n\nexport const ResultsModeEnum = z.enum([\"all\", \"bestFit\", \"closestMatch\", \"favorites\", \"loading\"]);\nexport type ResultsMode = z.infer<typeof ResultsModeEnum>;\nexport const SortByEnum = z.enum([\"relevance\", \"newest\", \"cost_low_to_high\", \"cost_high_to_low\"]);\nexport type SortBy = z.infer<typeof SortByEnum>;\n\nexport const QueryParamsSchema = z.object({\n limit: z.number().default(10),\n page: z.number().default(1),\n sortBy: SortByEnum.default(\"relevance\"),\n base_price: z.number().nullable().optional(),\n date_availability: z.array(z.string()).optional(),\n qty_bedrooms: z.array(z.number()).optional(),\n highlights: z.array(z.string()).optional(),\n nearBuilding: z.array(z.string()).optional(),\n nearNeighbourhood: z.array(z.string()).optional(),\n});\nexport type QueryParams = z.infer<typeof QueryParamsSchema>;\n\n// App (standalone) persisted state\nexport const AppStoreDataSchema = z.object({\n data: z.record(UnitDataSchema),\n filters: FiltersSchema,\n tempFilters: FiltersSchema,\n apiFilters: QueryParamsSchema,\n resultsMode: ResultsModeEnum,\n propertySlug: z.string().nullable(),\n resolvedQuestionnaireValues: z.record(z.array(z.string())),\n sortBy: SortByEnum,\n});\nexport type AppStoreData = z.infer<typeof AppStoreDataSchema>;\n\n// Domain models (optional fields to mirror API shape without breaking)\n// Mirrors the backend Unit model with relaxed optional fields\nexport const UnitSchema = z.object({\n id: z.union([z.number().int(), z.string()]).optional(),\n name: z.string(),\n slug: z.string().nullable().optional(),\n qty_bedrooms: z.coerce.number().nullable().optional(),\n qty_bathrooms: z.coerce.number().nullable().optional(),\n base_price: z.coerce.number().nullable().optional(),\n dim_sq_ft: z.coerce.number().nullable().optional(),\n propertyId: z.union([z.number().int(), z.string()]).optional(),\n is_available: z.boolean().optional(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n date_availability: z.string().datetime().nullable().optional(),\n unitSetAvailableOn: z.string().datetime().nullable().optional(),\n floorPlanId: z.union([z.number().int(), z.string()]).nullable().optional(),\n // Relations and nested structures kept loose to avoid coupling\n property: z.unknown().optional(),\n amenities: z.array(z.unknown()).optional(),\n highlights: z.array(z.unknown()).optional(),\n floorPlan: z.unknown().nullable().optional(),\n renderedStyle: z.array(z.unknown()).optional(),\n video: z.unknown().nullable().optional(),\n videoThumbnail: z.unknown().nullable().optional(),\n embedGif: z.unknown().nullable().optional(),\n userId: z.union([z.number().int(), z.string()]).optional(),\n user: z.unknown().optional(),\n status: z.string().optional(),\n external_id: z.string().nullable().optional(),\n unitRenderedStyles: z.array(z.unknown()).optional(),\n});\nexport type Unit = z.infer<typeof UnitSchema>;\n\n// Mirrors the backend Property model with relaxed optional fields\nexport const PropertySchema = z.object({\n /**\n * Property (readable shape)\n *\n * interface Property {\n * id: number | string\n * createdAt: string // ISO\n * updatedAt: string // ISO\n * title: string\n * slug?: string | null\n * description: string\n * contactName?: string | null\n * contactEmail?: string\n * contactPhone?: string | null\n * notificationEmail?: string | null\n * logo?: unknown | null\n * leadMedia?: unknown | null\n * overviewImages?: unknown[]\n * amenityImages?: unknown[]\n * street?: string\n * city?: string\n * state?: string | null\n * zip?: string\n * country?: string\n * units?: Unit[]\n * amenities?: unknown[]\n * highlights?: unknown[]\n * externalServices?: unknown[]\n * userId?: number | string\n * user?: unknown\n * status?: string\n * floorPlans?: unknown[]\n * }\n */\n id: z.union([z.number().int(), z.string()]),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n name: z.string(),\n slug: z.string().nullable().optional(),\n description: z.string(),\n contact_name: z.string().nullable().optional(),\n contact_email: z.string().optional(),\n contact_phone: z.string().nullable().optional(),\n notification_email: z.string().nullable().optional(),\n logo: z.unknown().nullable().optional(),\n leadMedia: z.unknown().nullable().optional(),\n overviewImages: z.array(z.unknown()).optional(),\n amenityImages: z.array(z.unknown()).optional(),\n address_street: z.string().optional(),\n address_city: z.string().optional(),\n address_state: z.string().nullable().optional(),\n ingestionFileName: z.string().nullable().optional(),\n address_zip: z.string().optional(),\n address_country: z.string().optional(),\n units: z.array(UnitSchema).optional(),\n amenities: z.array(z.unknown()).optional(),\n highlights: z.array(z.unknown()).optional(),\n externalServices: z.array(z.unknown()).optional(),\n userId: z.union([z.number().int(), z.string()]).optional(),\n user: z.unknown().optional(),\n status: z.string().optional(),\n floorPlans: z.array(z.unknown()).optional(),\n});\nexport type Property = z.infer<typeof PropertySchema>;\n\n// Mirrors the backend User model with relaxed optional fields\n// Named ApiUserSchema to avoid conflict with local UserSchema (uuid-only)\nexport const ApiUserSchema = z.object({\n id: z.union([z.number().int(), z.string()]).optional(),\n email: z.string().email().optional(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n password: z.string().optional(),\n salt: z.string().optional(),\n role: z.string().optional(),\n Property: z.array(PropertySchema).optional(),\n Unit: z.array(UnitSchema).optional(),\n floorPlans: z.array(z.unknown()).optional(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\n\n// Property-related schemas used by the PropertyStore and UnifiedStore\nexport const ViewedUnitSchema = z.object({\n unitId: z.string(),\n viewedDate: z.string(),\n});\nexport type ViewedUnit = z.infer<typeof ViewedUnitSchema>;\n\nexport const TourContactDataSchema = z.object({\n timezone: z.string().optional(),\n favouriteUnits: z.array(z.coerce.string()).optional(),\n preferences: z.record(z.unknown()).optional(),\n});\nexport type TourContactData = z.infer<typeof TourContactDataSchema>;\n\nexport const UserPropertyStateSchema = z.object({\n id: z.coerce.string(),\n slug: z.string(),\n favoritedUnits: z.array(z.string()),\n tourContactedOn: z.string().nullable(),\n viewedUnits: z.array(ViewedUnitSchema),\n questionnaireResults: z.unknown().nullable().optional(),\n tourContactData: TourContactDataSchema.nullable().optional(),\n // Full property payload persisted alongside per-property state\n data: PropertySchema.optional(),\n});\nexport type UserPropertyState = z.infer<typeof UserPropertyStateSchema>;\n\nexport const PropertyStoreDataSchema = z.object({\n data: z.record(UserPropertyStateSchema),\n propertySlug: z.string().nullable(),\n propertyId: z.string().nullable(),\n hasPreviouslySearched: z.array(z.string()),\n});\nexport type PropertyStoreData = z.infer<typeof PropertyStoreDataSchema>;\n\n// favorites\nexport const UnitFavoriteSchema = z.object({\n id: z.number().int(),\n userId: z.number().int(),\n unitId: z.number().int(),\n createdAt: z.string().datetime(),\n});\nexport type UnitFavorite = z.infer<typeof UnitFavoriteSchema>;\n\nexport const FavoritesSchema = z.object({\n // per-property favorites are stored under a KV key, so propertyId is implicit\n unitIds: z.array(z.string()),\n updatedAt: z.string().datetime(),\n});\nexport type Favorites = z.infer<typeof FavoritesSchema>;\n\n// Unified store schema (combines property + app persistent bits)\nexport const UnifiedStoreDataSchema = z.object({\n // Property-related data\n properties: z.record(UserPropertyStateSchema),\n currentPropertyId: z.string().nullable(),\n currentPropertySlug: z.string().nullable(),\n hasPreviouslySearched: z.array(z.string()),\n\n // App-level data\n unitResults: z.array(UnitSchema),\n filters: FiltersSchema,\n tempFilters: FiltersSchema,\n apiFilters: QueryParamsSchema,\n resultsMode: ResultsModeEnum,\n resolvedQuestionnaireValues: z.record(z.array(z.string())),\n sortBy: SortByEnum,\n});\nexport type UnifiedStoreData = z.infer<typeof UnifiedStoreDataSchema>;\n"],"names":["SCHEMA_VERSION","UserSchema","z.object","z.string","UserUnitDataSchema","z.boolean","UnitDataSchema","FilterOptionValueSchema","z.union","z.number","z.record","z.unknown","FilterCollectionSchema","z.array","FiltersSchema","z.null","ResultsModeEnum","z.enum","SortByEnum","QueryParamsSchema","AppStoreDataSchema","UnitSchema","z.coerce","PropertySchema","ApiUserSchema","ViewedUnitSchema","TourContactDataSchema","UserPropertyStateSchema","PropertyStoreDataSchema","UnitFavoriteSchema","FavoritesSchema","UnifiedStoreDataSchema"],"mappings":"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"}
|