@v-office/website-sdk 2.7.0 → 2.9.0

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.
Files changed (45) hide show
  1. package/README.md +28 -1
  2. package/dist/cli.mjs +25 -4
  3. package/dist/{client-45_ofP_d.mjs → client-CYK_5Vk7.mjs} +385 -187
  4. package/dist/index.d.mts +24 -4
  5. package/dist/index.mjs +3 -3
  6. package/dist/instructions/CHANGELOG.md +4 -1
  7. package/dist/instructions/MIGRATION.md +4 -1
  8. package/dist/instructions/README.md +9 -3
  9. package/dist/instructions/creation.md +82 -66
  10. package/dist/instructions/custom-attributes.md +560 -0
  11. package/dist/instructions/filter.md +62 -23
  12. package/dist/instructions/rentals.md +43 -2
  13. package/dist/instructions/search.md +29 -3
  14. package/dist/instructions/versions/2.5.0/MIGRATION.md +5 -0
  15. package/dist/instructions/versions/2.6.0/CHANGELOG.md +3 -25
  16. package/dist/instructions/versions/2.6.0/MIGRATION.md +4 -72
  17. package/dist/instructions/versions/2.7.0/CHANGELOG.md +44 -0
  18. package/dist/instructions/versions/2.7.0/MIGRATION.md +79 -0
  19. package/dist/instructions/versions/2.8.0/CHANGELOG.md +63 -0
  20. package/dist/instructions/versions/2.8.0/MIGRATION.md +252 -0
  21. package/dist/instructions/versions/2.9.0/CHANGELOG.md +37 -0
  22. package/dist/instructions/versions/2.9.0/MIGRATION.md +153 -0
  23. package/dist/{rentals-Lw1qUKIj.mjs → rentals-CFod9H4m.mjs} +21 -21
  24. package/dist/{search-wcoZw2rt.mjs → search-CO9ID9op.mjs} +16 -133
  25. package/dist/{to-rental-highlights-CxWlq76f.mjs → to-rental-highlights-B6a_fi0j.mjs} +33 -8
  26. package/dist/translations/v10/de-DE/core.json +2 -0
  27. package/dist/translations/v10/en-US/core.json +2 -0
  28. package/instructions/CHANGELOG.md +4 -1
  29. package/instructions/MIGRATION.md +4 -1
  30. package/instructions/README.md +9 -3
  31. package/instructions/creation.md +82 -66
  32. package/instructions/custom-attributes.md +560 -0
  33. package/instructions/filter.md +62 -23
  34. package/instructions/rentals.md +43 -2
  35. package/instructions/search.md +29 -3
  36. package/instructions/versions/2.5.0/MIGRATION.md +5 -0
  37. package/instructions/versions/2.6.0/CHANGELOG.md +3 -25
  38. package/instructions/versions/2.6.0/MIGRATION.md +4 -72
  39. package/instructions/versions/2.7.0/CHANGELOG.md +44 -0
  40. package/instructions/versions/2.7.0/MIGRATION.md +79 -0
  41. package/instructions/versions/2.8.0/CHANGELOG.md +63 -0
  42. package/instructions/versions/2.8.0/MIGRATION.md +252 -0
  43. package/instructions/versions/2.9.0/CHANGELOG.md +37 -0
  44. package/instructions/versions/2.9.0/MIGRATION.md +153 -0
  45. package/package.json +5 -3
@@ -0,0 +1,252 @@
1
+ # Migration: 2.7.0 to 2.8.0
2
+
3
+ 2.8.0 replaces `customAttributeDefinitionManifest` and
4
+ `source: "customAttribute"` filter definitions with one validated custom-attribute
5
+ registry. SDK construction and service method names are unchanged.
6
+
7
+ Consumers without custom attributes can upgrade without configuration changes.
8
+
9
+ ## 1. Replace the Definition Manifest
10
+
11
+ Before:
12
+
13
+ ```ts
14
+ const options = defineWebsiteSDKOptions({
15
+ customAttributeDefinitionManifest: {
16
+ byKey: {
17
+ region: {
18
+ id: "GQYKYgMVh28X7VLGursbkt",
19
+ key: "region",
20
+ type: "OPTION",
21
+ visibility: "PUBLIC",
22
+ },
23
+ },
24
+ byId: {
25
+ GQYKYgMVh28X7VLGursbkt: {
26
+ id: "GQYKYgMVh28X7VLGursbkt",
27
+ key: "region",
28
+ type: "OPTION",
29
+ visibility: "PUBLIC",
30
+ },
31
+ },
32
+ },
33
+ });
34
+ ```
35
+
36
+ After:
37
+
38
+ ```ts
39
+ import {
40
+ defineCustomAttributes,
41
+ defineWebsiteSDKOptions,
42
+ fetchCustomAttributeCatalog,
43
+ } from "@v-office/website-sdk";
44
+
45
+ const catalog = await fetchCustomAttributeCatalog({ config: v10Config });
46
+
47
+ const customAttributes = defineCustomAttributes({
48
+ catalog,
49
+ select: {
50
+ region: {
51
+ label: { "de-DE": "Region", "en-US": "Region" },
52
+ category: "OTHER",
53
+ filter: true,
54
+ optionLabels: {
55
+ north: { "de-DE": "Norden", "en-US": "North" },
56
+ south: { "de-DE": "Süden", "en-US": "South" },
57
+ },
58
+ },
59
+ },
60
+ });
61
+
62
+ const options = defineWebsiteSDKOptions({ customAttributes });
63
+ ```
64
+
65
+ `fetchCustomAttributeCatalog` is v10-only, requires a token authorized for the
66
+ public-definition operation, and returns no localized labels. Fetch it in an
67
+ authorized build environment or pin an equivalent literal catalog.
68
+ `defineCustomAttributes` validates the complete catalog/selection join and reports
69
+ all configuration errors together.
70
+
71
+ ## 2. Move Custom-Attribute Filter Policy
72
+
73
+ Remove every `source: "customAttribute"` entry from
74
+ `customAttributeFilterDefinitions`. Put its behavior in the matching `select`
75
+ entry:
76
+
77
+ ```ts
78
+ select: {
79
+ occupancyScore: {
80
+ label: { "de-DE": "Belegung", "en-US": "Occupancy" },
81
+ category: "ESSENTIALS",
82
+ filter: {
83
+ exposure: "public",
84
+ numericBounds: { min: 1, max: 12 },
85
+ },
86
+ },
87
+ }
88
+ ```
89
+
90
+ Use `filter: "internal"` or `filter: { exposure: "internal" }` for a queryable filter
91
+ that must not appear in `getFilters`. Omit `filter` for display only.
92
+
93
+ `customAttributeFilterDefinitions` remains the home of:
94
+
95
+ - `backendFilter`: v9 backend-native filters;
96
+ - `composition`: virtual Boolean filters composed from executable leaves.
97
+
98
+ ## 3. Configure Display and v9 Bindings
99
+
100
+ Display is independent of filter exposure and defaults to `true`. A selected
101
+ catalog attribute can add a v9 rental-data binding:
102
+
103
+ ```ts
104
+ select: {
105
+ privateSauna: {
106
+ label: { "de-DE": "Sauna", "en-US": "Sauna" },
107
+ display: true,
108
+ filter: true,
109
+ v9: "p_14418",
110
+ },
111
+ }
112
+ ```
113
+
114
+ Use `v9Only` for attributes that have no v10 catalog definition:
115
+
116
+ ```ts
117
+ v9Only: {
118
+ thatchedRoof: {
119
+ v9: "p_14420",
120
+ type: "boolean",
121
+ label: { "de-DE": "Reetdach", "en-US": "Thatched roof" },
122
+ },
123
+ }
124
+ ```
125
+
126
+ v9 renders bound values but does not advertise or execute catalog custom-attribute
127
+ filters. v10 filtering requires an enabled filter and a catalog ID.
128
+
129
+ ## 4. Update Composition Expressions
130
+
131
+ Expressions now support equality leaves joined by `all`:
132
+
133
+ ```ts
134
+ expression: {
135
+ all: [
136
+ { filter: "privateSauna", value: true },
137
+ { filter: "maxPersons", value: 4 },
138
+ ],
139
+ }
140
+ ```
141
+
142
+ Remove `operator`, `gte`, `lte`, and `any`; they never had correct runtime
143
+ semantics. Nested composition references are rejected.
144
+
145
+ A composition is advertised only if every leaf can execute on the active backend.
146
+ Execution is atomic: if one configured leaf is unknown, unsupported, malformed, or
147
+ conflicts with a direct value, no generated composition leaf enters the backend
148
+ payload and only the composition key is unused.
149
+
150
+ Successful compositions return the parent and expanded leaves in `appliedFilters`.
151
+
152
+ ## 5. Rename Colliding Query Keys
153
+
154
+ Every query key must have one owner. Configuration rejects:
155
+
156
+ - period/occupancy keys such as `start`, `adults`, and `pets`;
157
+ - filterable custom attributes or compositions that reuse v10 built-in filter keys;
158
+ - configured v9 filters that reuse v9 stable filter keys;
159
+ - a custom attribute and custom filter definition with the same key.
160
+ - repeated keys within `customAttributeFilterDefinitions`.
161
+
162
+ Use the selection's `key` override when a workspace definition collides:
163
+
164
+ ```ts
165
+ select: {
166
+ sauna: {
167
+ key: "privateSauna",
168
+ label: { "de-DE": "Sauna", "en-US": "Sauna" },
169
+ filter: true,
170
+ },
171
+ }
172
+ ```
173
+
174
+ Update query URLs and `rentalHighlightPrioritization` to the resolved key.
175
+
176
+ ## 6. Treat Categories as Display Labels
177
+
178
+ Configuration keeps stable keys such as `OUTDOORS`. `getFilters` and rental
179
+ attribute groups return localized labels such as `Außenbereich` or `Outdoor Area`.
180
+ Do not compare output categories to stable keys. Customize wording with
181
+ locale-nested overrides:
182
+
183
+ ```ts
184
+ translationOverrides: {
185
+ "de-DE": {
186
+ "RentalAttributesCategory.OUTDOORS.label": "Draußen",
187
+ },
188
+ }
189
+ ```
190
+
191
+ ## 7. Update Highlight Configuration
192
+
193
+ Custom attributes appear in rental/search `highlights` only when their resolved key
194
+ is listed in `rentalHighlightPrioritization`:
195
+
196
+ ```ts
197
+ rentalHighlightPrioritization: ["bedrooms", customAttributes.keys.region, "bathrooms"];
198
+ ```
199
+
200
+ The list remains authoritative for order. Registry contents do not reorder
201
+ built-ins, duplicate keys render once, and a built-in metadata key shadows a
202
+ same-named display-only custom attribute.
203
+
204
+ ## 8. Update Applied-Filter Handling
205
+
206
+ Value-bearing applied filters now include canonical `value`:
207
+
208
+ ```ts
209
+ { key: "region", label: "Region: North", value: "north" }
210
+ ```
211
+
212
+ Use `key` plus `value` to remove an exact filter. Labels remain localized
213
+ presentation and are not identifiers. A scalar key may appear in both
214
+ `appliedFilters` and `unusedFilterKeys` when one value applied and another was
215
+ rejected.
216
+
217
+ ## 9. CLI and Untyped Options
218
+
219
+ CLI JSON supplies catalog and selection **inputs**, not a finished registry:
220
+
221
+ ```json
222
+ {
223
+ "customAttributes": {
224
+ "catalog": {
225
+ "privateSauna": {
226
+ "id": "GQYKYgMVh28X7VLGursbkt",
227
+ "type": "BOOLEAN"
228
+ }
229
+ },
230
+ "select": {
231
+ "privateSauna": {
232
+ "label": { "de-DE": "Sauna", "en-US": "Sauna" },
233
+ "filter": true
234
+ }
235
+ }
236
+ }
237
+ }
238
+ ```
239
+
240
+ The CLI uses `defineCustomAttributesFromUnknown` and applies the same runtime
241
+ validation as typed configuration.
242
+
243
+ ## Recommended Verification
244
+
245
+ 1. Run `getFilters` for v9 and v10 in both locales.
246
+ 2. Confirm internal filters are absent while public compositions using them remain
247
+ executable.
248
+ 3. Inspect v9 GraphQL and v10 REST variables for one successful and one failed
249
+ composition.
250
+ 4. Verify renamed custom attributes render in rentals, search highlights, URLs, and
251
+ applied-filter chips.
252
+ 5. Verify `rentalHighlightPrioritization` order with and without custom attributes.
@@ -0,0 +1,37 @@
1
+ # Changelog: 2.9.0
2
+
3
+ This release makes highlight selection explicit, improves the default rental and
4
+ property rankings across coastal, lake, and mountain portfolios, and removes
5
+ duplicate rental views.
6
+
7
+ ## Changed
8
+
9
+ - `rentalHighlightPrioritization` and
10
+ `rentalPropertyHighlightPrioritization` are documented as ordered allowlists,
11
+ not sorts over every available fact. A key that is not listed is not emitted as
12
+ a highlight even when the source contains a value.
13
+ - The default rental allowlist now starts with capacity and size, moves distinctive
14
+ views and facilities ahead of common fittings, places `youthgroups` last, and
15
+ includes previously omitted terrain-specific and practical facts.
16
+ - `outdoorPool`, `indoorPool`, lake, mountain, countryside, river, and secondary
17
+ views can now appear through the default rental highlights, alongside facilities
18
+ such as `spa`, `terrace`, `lift`, `garage`, `dryer`, and `skiBootWarmer`.
19
+ - The default v10 property allowlist now prioritizes beach location and shared
20
+ facilities ahead of utilities. It also includes `locLake`, `lakedistance`,
21
+ `locMountain`, and `skidistance`.
22
+ - Rental highlights now emit only the first configured view fact that has a value.
23
+ The configured order defines which view is strongest. View-type descriptors such
24
+ as `seaviewType` remain independent qualifiers.
25
+ - Strongest-view selection applies consistently to v10 and legacy v9 rental
26
+ highlights. Keys unsupported by the active backend remain ignored.
27
+
28
+ ## Migration Impact
29
+
30
+ - Sites using the SDK defaults may receive a different highlight order and more
31
+ highlight values.
32
+ - Sites that displayed several simultaneous rental views now receive at most one
33
+ view highlight.
34
+ - Explicit custom allowlists retain their configured order and membership, apart
35
+ from the new strongest-view rule.
36
+ - No SDK construction, service-call, or output-type changes are required. Review
37
+ `versions/2.9.0/MIGRATION.md` before upgrading.
@@ -0,0 +1,153 @@
1
+ # Migration: 2.8.0 to 2.9.0
2
+
3
+ 2.9.0 changes default highlight membership and order and emits at most one rental
4
+ view highlight. Configuration and output types are unchanged.
5
+
6
+ ## 1. Treat Highlight Configuration as an Ordered Allowlist
7
+
8
+ `rentalHighlightPrioritization` and
9
+ `rentalPropertyHighlightPrioritization` select which facts become highlights and
10
+ set their order. They do not sort a complete list generated elsewhere.
11
+
12
+ - An omitted key is not emitted even when the source contains a value.
13
+ - `undefined` uses the SDK default.
14
+ - `[]` emits no highlights.
15
+ - Duplicate keys are evaluated once.
16
+ - Unknown, unresolved, or backend-unsupported keys are ignored.
17
+ - These options affect `highlights`, not `attributes` or `vicinity`.
18
+
19
+ Audit custom lists that were shortened only to express a preferred order. Add every
20
+ fact that must remain eligible for highlight output.
21
+
22
+ ## 2. Review the New Rental Default
23
+
24
+ The default rental allowlist is now:
25
+
26
+ ```ts
27
+ [
28
+ "maxPersons",
29
+ "bedrooms",
30
+ "squareMeters",
31
+ "bathrooms",
32
+ "seaview",
33
+ "lakeview",
34
+ "mountainview",
35
+ "valleyView",
36
+ "countrysideView",
37
+ "riverView",
38
+ "outdoorPool",
39
+ "indoorPool",
40
+ "sauna",
41
+ "spa",
42
+ "whirlpool",
43
+ "balcony",
44
+ "terrace",
45
+ "garden",
46
+ "beachChair",
47
+ "landingStage",
48
+ "boatBerth",
49
+ "skiBootWarmer",
50
+ "detached",
51
+ "fireplace",
52
+ "bbq",
53
+ "gym",
54
+ "closedPlot",
55
+ "beachview",
56
+ "gardenView",
57
+ "poolView",
58
+ "cityView",
59
+ "quietStreetView",
60
+ "innerCourtView",
61
+ "washer",
62
+ "dryer",
63
+ "privateparking",
64
+ "garage",
65
+ "carport",
66
+ "wifi",
67
+ "lift",
68
+ "childrenWelcome",
69
+ "nonsmoking",
70
+ "kitchen",
71
+ "dishwasher",
72
+ "tv",
73
+ "ac",
74
+ "heating",
75
+ "fridge",
76
+ "microwave",
77
+ "oven",
78
+ "stove",
79
+ "coffeemaker",
80
+ "freezer",
81
+ "electricKettle",
82
+ "youthgroups",
83
+ ];
84
+ ```
85
+
86
+ Capacity and size come first, followed by distinctive views, facilities, outdoor
87
+ space, terrain-specific draws, practical confirmers, common fittings, and finally
88
+ the minority booking rule `youthgroups`.
89
+
90
+ ## 3. Review the New Property Default
91
+
92
+ Property highlights apply only to v10 property data. Their default allowlist is:
93
+
94
+ ```ts
95
+ [
96
+ "beachfront",
97
+ "beachaccess",
98
+ "beachdistance",
99
+ "seadistance",
100
+ "locBeach",
101
+ "locLake",
102
+ "lakedistance",
103
+ "locMountain",
104
+ "skidistance",
105
+ "outdoorPool",
106
+ "indoorPool",
107
+ "garden",
108
+ "terrace",
109
+ "bbqFacilities",
110
+ "playground",
111
+ "pool4kids",
112
+ "familyRoomsAvailable",
113
+ "parking",
114
+ "wifi",
115
+ "washer",
116
+ "dryer",
117
+ "ac",
118
+ "heating",
119
+ "locGroceries",
120
+ "restaurantdistance",
121
+ "publictransportdistance",
122
+ ];
123
+ ```
124
+
125
+ Location and terrain now precede shared facilities, family signals, utilities, and
126
+ secondary map facts.
127
+
128
+ ## 4. Expect One Rental View Highlight
129
+
130
+ When several configured view facts have values, only the first one in
131
+ `rentalHighlightPrioritization` is emitted:
132
+
133
+ ```ts
134
+ rentalHighlightPrioritization: ["mountainview", "lakeview", "seaview", "gardenView", "wifi"];
135
+ ```
136
+
137
+ For this configuration, a rental with both mountain and lake views emits only the
138
+ mountain view. If `mountainview` has no value, the lake view can emit instead.
139
+ View-type descriptors such as `mountainviewType` and `seaviewType` qualify a view
140
+ and do not compete for the single view slot.
141
+
142
+ The rule applies to v10 and legacy v9. An unsupported v9 view key does not prevent
143
+ a later supported view from being emitted.
144
+
145
+ ## Recommended Verification
146
+
147
+ 1. Check search cards and rental pages that truncate highlights.
148
+ 2. Compare coastal, lake, and mountain workspaces against the new defaults.
149
+ 3. Confirm capacity and size remain available to consumers that read them from
150
+ search highlights.
151
+ 4. Verify rentals with cumulative view facts emit the expected first configured
152
+ view.
153
+ 5. Review explicit custom allowlists for facts that were unintentionally omitted.
@@ -1,5 +1,5 @@
1
- import { c as VofficeUnitDataFieldSchemas, d as VofficeUnitDataPropertyMetadata, f as parseVofficeFacilityData, i as toLocalizedString, l as VofficeUnitDataPropertyCategoryLabelKeys, m as parseVofficeUnitData, n as toImages, o as rentalsAllFeedbacksQuery, p as parseVofficeFeedbackData, r as toAddress, s as rentalsAllWithoutFeedbacksQuery, t as toRentalHighlights, u as VofficeUnitDataPropertyCategoryValues } from "./to-rental-highlights-CxWlq76f.mjs";
2
- import { makeTranslate, renderCustomAttributeHighlight, renderLabeledAttributeValue } from "@v-office/sdk-core";
1
+ import { c as VofficeUnitDataFieldSchemas, d as VofficeUnitDataPropertyMetadata, f as parseVofficeFacilityData, i as toLocalizedString, l as VofficeUnitDataPropertyCategoryLabelKeys, m as parseVofficeUnitData, n as toImages, o as rentalsAllFeedbacksQuery, p as parseVofficeFeedbackData, r as toAddress, s as rentalsAllWithoutFeedbacksQuery, t as toRentalHighlights, u as VofficeUnitDataPropertyCategoryValues } from "./to-rental-highlights-B6a_fi0j.mjs";
2
+ import { makeTranslate, renderLabeledAttributeValue, renderResolvedCustomAttribute, toCustomAttributeList, toResolvedCustomAttributeCategoryTranslationKey } from "@v-office/sdk-core";
3
3
  import { Effect } from "effect";
4
4
  //#region src/legacy-v9/parser/rentals/to-description.ts
5
5
  const toDescription = (data, locale) => {
@@ -60,29 +60,30 @@ const PROPERTY_METADATA_ENTRIES = Object.entries(VofficeUnitDataPropertyMetadata
60
60
  return (CATEGORY_ORDER.get(left.metadata.category.key) ?? Number.MAX_SAFE_INTEGER) - (CATEGORY_ORDER.get(right.metadata.category.key) ?? Number.MAX_SAFE_INTEGER) || left.index - right.index;
61
61
  });
62
62
  const canRenderLabeledAttributeValue$1 = (value) => value !== false && value !== 0 && value !== "false" && value !== "0" && value != null && value !== "";
63
- const toRentalAttributes = ({ locale, translations, attributes, customAttributeFilterDefinitions }) => Effect.gen(function* () {
63
+ const toRentalAttributes = ({ locale, translations, attributes, customAttributes }) => Effect.gen(function* () {
64
64
  const result = [];
65
65
  const categoriesByKey = /* @__PURE__ */ new Map();
66
66
  const subCategoriesByKey = /* @__PURE__ */ new Map();
67
67
  const knownAttributes = attributes.known;
68
68
  const translate = makeTranslate(translations, locale);
69
- const getGeneralSubCategory = () => Effect.gen(function* () {
70
- let category = categoriesByKey.get(GENERAL_CATEGORY$1.key);
69
+ const getCustomAttributeSubCategory = (categoryKey) => Effect.gen(function* () {
70
+ const labelKey = toResolvedCustomAttributeCategoryTranslationKey(categoryKey);
71
+ let category = categoriesByKey.get(categoryKey);
71
72
  if (category == null) {
72
73
  category = {
73
- label: yield* translate(GENERAL_CATEGORY$1.labelKey, GENERAL_CATEGORY$1.key),
74
+ label: yield* translate(labelKey, categoryKey),
74
75
  subCategories: []
75
76
  };
76
- categoriesByKey.set(GENERAL_CATEGORY$1.key, category);
77
+ categoriesByKey.set(categoryKey, category);
77
78
  result.push(category);
78
79
  }
79
- let subCategory = subCategoriesByKey.get(GENERAL_CATEGORY$1.key);
80
+ let subCategory = subCategoriesByKey.get(categoryKey);
80
81
  if (subCategory == null) {
81
82
  subCategory = {
82
83
  label: category.label,
83
84
  items: []
84
85
  };
85
- subCategoriesByKey.set(GENERAL_CATEGORY$1.key, subCategory);
86
+ subCategoriesByKey.set(categoryKey, subCategory);
86
87
  category.subCategories.push(subCategory);
87
88
  }
88
89
  return subCategory;
@@ -118,18 +119,17 @@ const toRentalAttributes = ({ locale, translations, attributes, customAttributeF
118
119
  }
119
120
  subCategory.items.push(attribute);
120
121
  }
121
- const customAttributeItems = [];
122
- for (const definition of customAttributeFilterDefinitions) {
123
- const value = knownAttributes[definition.key] ?? attributes.unknown[definition.key];
124
- const attribute = renderCustomAttributeHighlight({
125
- definitions: customAttributeFilterDefinitions,
126
- key: definition.key,
122
+ for (const attribute of toCustomAttributeList(customAttributes)) {
123
+ const binding = attribute.v9;
124
+ if (binding === void 0) continue;
125
+ const rendered = renderResolvedCustomAttribute({
126
+ attribute,
127
127
  locale,
128
- value
128
+ value: knownAttributes[binding] ?? attributes.unknown[binding]
129
129
  });
130
- if (attribute != null) customAttributeItems.push(attribute);
130
+ if (rendered == null) continue;
131
+ (yield* getCustomAttributeSubCategory(attribute.category)).items.push(rendered);
131
132
  }
132
- if (customAttributeItems.length > 0) (yield* getGeneralSubCategory()).items.push(...customAttributeItems);
133
133
  return result;
134
134
  });
135
135
  //#endregion
@@ -228,7 +228,7 @@ const toReviews = ({ locale, translations, rental }) => Effect.gen(function* ()
228
228
  });
229
229
  //#endregion
230
230
  //#region src/legacy-v9/parser/rentals/to-rental-list-item.ts
231
- const toRentalRentalsOutput = ({ rental, locale, translations, imageProxyBaseUrl, rentalHighlightPrioritization, customAttributeFilterDefinitions }) => Effect.gen(function* () {
231
+ const toRentalRentalsOutput = ({ rental, locale, translations, imageProxyBaseUrl, rentalHighlightPrioritization, customAttributes }) => Effect.gen(function* () {
232
232
  const data = parseVofficeUnitData(rental.data);
233
233
  const rawRentalType = data.known.type?.trim();
234
234
  const translatedRentalType = rawRentalType != null && rawRentalType.length > 0 ? yield* toRentalType({
@@ -244,7 +244,7 @@ const toRentalRentalsOutput = ({ rental, locale, translations, imageProxyBaseUrl
244
244
  locale,
245
245
  translations,
246
246
  attributes: data,
247
- customAttributeFilterDefinitions
247
+ customAttributes
248
248
  });
249
249
  const vicinity = yield* toRentalVicinity({
250
250
  locale,
@@ -255,7 +255,7 @@ const toRentalRentalsOutput = ({ rental, locale, translations, imageProxyBaseUrl
255
255
  locale,
256
256
  translations,
257
257
  highlightPrioritization: rentalHighlightPrioritization,
258
- customAttributeFilterDefinitions,
258
+ customAttributes,
259
259
  attributes: data
260
260
  });
261
261
  const reviews = yield* toReviews({