@v-office/website-sdk 2.12.0 → 2.14.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.
- package/README.md +3 -2
- package/dist/capabilities/search.d.mts +2 -0
- package/dist/capabilities/search.mjs +2 -0
- package/dist/cli.mjs +2 -2
- package/dist/{client-Bmxh2SAu.mjs → client-BvQRpzYY.mjs} +807 -305
- package/dist/index.d.mts +3 -56
- package/dist/index.mjs +1 -1
- package/dist/instructions/CHANGELOG.md +2 -0
- package/dist/instructions/MIGRATION.md +2 -0
- package/dist/instructions/README.md +11 -3
- package/dist/instructions/booking.md +56 -40
- package/dist/instructions/quote.md +5 -3
- package/dist/instructions/rentals.md +46 -1
- package/dist/instructions/search.md +22 -0
- package/dist/instructions/versions/2.13.0/CHANGELOG.md +87 -0
- package/dist/instructions/versions/2.13.0/MIGRATION.md +315 -0
- package/dist/instructions/versions/2.14.0/CHANGELOG.md +72 -0
- package/dist/instructions/versions/2.14.0/MIGRATION.md +148 -0
- package/dist/{rentals-BG1diZoo.mjs → rentals-CN01jEkv.mjs} +8 -12
- package/dist/{search-BlL8vSPY.mjs → search-uXcReJdL.mjs} +2 -2
- package/dist/{to-rental-highlights-BVikT4Iz.mjs → to-rental-highlights-D_VRHaaC.mjs} +1355 -7
- package/dist/translations/shared/de-DE/booking.json +7 -0
- package/dist/translations/shared/en-US/booking.json +7 -0
- package/dist/translations/v9/de-DE/filter.json +4 -4
- package/dist/translations/v9/de-DE/rental-attribute-options.json +174 -0
- package/dist/translations/v9/de-DE/rental-attributes.json +95 -45
- package/dist/translations/v9/en-US/core.json +1 -1
- package/dist/translations/v9/en-US/filter.json +2 -2
- package/dist/translations/v9/en-US/rental-attribute-options.json +174 -0
- package/dist/translations/v9/en-US/rental-attributes.json +262 -212
- package/instructions/CHANGELOG.md +2 -0
- package/instructions/MIGRATION.md +2 -0
- package/instructions/README.md +11 -3
- package/instructions/booking.md +56 -40
- package/instructions/quote.md +5 -3
- package/instructions/rentals.md +46 -1
- package/instructions/search.md +22 -0
- package/instructions/versions/2.13.0/CHANGELOG.md +87 -0
- package/instructions/versions/2.13.0/MIGRATION.md +315 -0
- package/instructions/versions/2.14.0/CHANGELOG.md +72 -0
- package/instructions/versions/2.14.0/MIGRATION.md +148 -0
- package/package.json +7 -4
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# Migration: 2.12.0 to 2.13.0
|
|
2
|
+
|
|
3
|
+
2.13.0 introduces a breaking, shared booking-payment output for v9 and v10. The
|
|
4
|
+
new model is intentionally presentation-oriented: labels, amounts, deadlines,
|
|
5
|
+
payment locations, and breakdown lines are already translated and formatted for
|
|
6
|
+
the booking locale.
|
|
7
|
+
|
|
8
|
+
## 1. Replace the Flat Payment Schedule
|
|
9
|
+
|
|
10
|
+
Before 2.13.0:
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
booking.paymentSchedules;
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
From 2.13.0:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
booking.payment.schedule;
|
|
20
|
+
booking.payment.alternatives;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`payment.schedule` contains contractual payment steps. `payment.alternatives`
|
|
24
|
+
contains distinct alternatives such as paying the complete outstanding balance.
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"bookingNumber": "B-2026-0001",
|
|
31
|
+
"payment": {
|
|
32
|
+
"schedule": [
|
|
33
|
+
{
|
|
34
|
+
"kind": "prepayment",
|
|
35
|
+
"label": "Anzahlung",
|
|
36
|
+
"amount": "76,00 €",
|
|
37
|
+
"dueOn": "Zahlbar bis zum 19. August 2026",
|
|
38
|
+
"paymentOptions": [
|
|
39
|
+
{
|
|
40
|
+
"kind": "bank_transfer",
|
|
41
|
+
"label": "Überweisung",
|
|
42
|
+
"holder": "Ferienvermietung Muster GmbH",
|
|
43
|
+
"iban": "DE02 1203 0000 0000 2020 51",
|
|
44
|
+
"remittanceText": "Buchungsnummer: B-2026-0001"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"kind": "remaining_payment",
|
|
50
|
+
"label": "Restzahlung",
|
|
51
|
+
"amount": "304,00 €",
|
|
52
|
+
"dueOn": "Zahlbar bis zum 6. Februar 2027"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"alternatives": [
|
|
56
|
+
{
|
|
57
|
+
"kind": "full_amount",
|
|
58
|
+
"label": "Gesamtzahlung",
|
|
59
|
+
"amount": "380,00 €",
|
|
60
|
+
"paymentOptions": [
|
|
61
|
+
{
|
|
62
|
+
"kind": "bank_transfer",
|
|
63
|
+
"label": "Überweisung",
|
|
64
|
+
"holder": "Ferienvermietung Muster GmbH",
|
|
65
|
+
"iban": "DE02 1203 0000 0000 2020 51",
|
|
66
|
+
"remittanceText": "Buchungsnummer: B-2026-0001"
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 2. Read `amount` Instead of `total`
|
|
76
|
+
|
|
77
|
+
The old schedule-level `total` field has been renamed to `amount`:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
for (const entry of booking.payment.schedule) {
|
|
81
|
+
renderAmount(entry.amount);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The value remains a localized display string. Do not parse it for arithmetic or
|
|
86
|
+
payment initiation.
|
|
87
|
+
|
|
88
|
+
Optional `lines` continue to contain translated labels and formatted amounts:
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
for (const line of entry.lines ?? []) {
|
|
92
|
+
renderBreakdownLine(line.label, line.amount);
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 3. Render Schedule and Alternative Entries
|
|
97
|
+
|
|
98
|
+
To render every payment entry:
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
const paymentEntries = [...booking.payment.schedule, ...booking.payment.alternatives];
|
|
102
|
+
|
|
103
|
+
for (const entry of paymentEntries) {
|
|
104
|
+
renderPaymentEntry(entry);
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Use the stable `kind` only for programmatic behavior. Use `label` for visible
|
|
109
|
+
text.
|
|
110
|
+
|
|
111
|
+
Schedule kinds:
|
|
112
|
+
|
|
113
|
+
- `prepayment`: a named v9 down payment.
|
|
114
|
+
- `remaining_payment`: a named v9 remaining payment.
|
|
115
|
+
- `installment`: a v10 installment step.
|
|
116
|
+
- `deposit`: a v10 deposit step.
|
|
117
|
+
|
|
118
|
+
Alternative kinds:
|
|
119
|
+
|
|
120
|
+
- `full_amount`: settle the complete currently outstanding balance.
|
|
121
|
+
|
|
122
|
+
Do not infer v9 semantics from v10 step order. A v10 installment is not
|
|
123
|
+
automatically a prepayment or remaining payment.
|
|
124
|
+
|
|
125
|
+
## 4. Treat `paymentOptions` as Capability Data
|
|
126
|
+
|
|
127
|
+
`paymentOptions` is optional on scheduled steps. Its absence means the entry is
|
|
128
|
+
informational and is not currently payable through the SDK.
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
for (const option of entry.paymentOptions ?? []) {
|
|
132
|
+
if (option.kind === "bank_transfer") {
|
|
133
|
+
renderBankTransfer(option);
|
|
134
|
+
} else {
|
|
135
|
+
renderSubmitButton(() => sdk.live.booking.submitPaymentOption(option));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Do not attach payment buttons to future, on-site, or external entries merely
|
|
141
|
+
because they appear in `payment.schedule`.
|
|
142
|
+
|
|
143
|
+
`full_amount` alternatives always contain a `paymentOptions` array. The array can
|
|
144
|
+
be empty when the backend supplies no executable method.
|
|
145
|
+
|
|
146
|
+
## 5. Render Dates and Payment Locations Directly
|
|
147
|
+
|
|
148
|
+
Before 2.13.0, `dueOn` was locale-short text even though older documentation
|
|
149
|
+
showed an ISO value. Consumers sometimes attempted to parse it as
|
|
150
|
+
`YYYY-MM-DD`.
|
|
151
|
+
|
|
152
|
+
From 2.13.0, `dueOn` is a complete localized phrase:
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
Zahlbar bis zum 6. Februar 2027
|
|
156
|
+
Payable until February 6, 2027
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Render it directly:
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
if (entry.dueOn) renderSupportingText(entry.dueOn);
|
|
163
|
+
if (entry.paymentAt) renderSupportingText(entry.paymentAt);
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Do not prepend another due-date label and do not parse or reformat these fields.
|
|
167
|
+
`paymentAt` is currently populated by v10 when payment-step location information
|
|
168
|
+
is available.
|
|
169
|
+
|
|
170
|
+
## 6. Account for the Corrected v9 Schedule
|
|
171
|
+
|
|
172
|
+
Legacy v9 now emits both authoritative contractual steps:
|
|
173
|
+
|
|
174
|
+
- `prepayment` with its own amount and deadline.
|
|
175
|
+
- `remaining_payment` with its own amount and deadline.
|
|
176
|
+
|
|
177
|
+
The `full_amount` alternative is separate. When the SDK synthesizes it from
|
|
178
|
+
prepayment plus remaining payment, it has no deadline. The SDK no longer copies
|
|
179
|
+
the prepayment deadline onto that alternative.
|
|
180
|
+
|
|
181
|
+
Consequently, code must not derive a remaining-payment deadline from
|
|
182
|
+
`payment.alternatives`.
|
|
183
|
+
|
|
184
|
+
## 7. Account for the Expanded v10 Schedule
|
|
185
|
+
|
|
186
|
+
v10 now preserves all remaining backend payment steps in
|
|
187
|
+
`payment.schedule`, including:
|
|
188
|
+
|
|
189
|
+
- `ONLINE`
|
|
190
|
+
- `ON_SITE`
|
|
191
|
+
- `EXTERN`
|
|
192
|
+
|
|
193
|
+
Only the next eligible online step receives an initialized Adyen option. Later
|
|
194
|
+
steps remain available as informational entries. The complete outstanding amount
|
|
195
|
+
can appear separately under `payment.alternatives`.
|
|
196
|
+
|
|
197
|
+
The alternative amount is the current outstanding balance, not necessarily the
|
|
198
|
+
original booking total.
|
|
199
|
+
|
|
200
|
+
## 8. Migrate Post-Booking Insurance
|
|
201
|
+
|
|
202
|
+
Before 2.13.0:
|
|
203
|
+
|
|
204
|
+
```ts
|
|
205
|
+
await sdk.live.quote.bookInsurance({
|
|
206
|
+
quote,
|
|
207
|
+
bookingNumber: booking.bookingNumber,
|
|
208
|
+
guestToken: booking.guestToken,
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
From 2.13.0:
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
await sdk.live.quote.bookInsurance({
|
|
216
|
+
quote,
|
|
217
|
+
booking,
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
`guestToken` is no longer public. For v9, it is stored as private state on the
|
|
222
|
+
opaque booking object and consumed internally by the SDK.
|
|
223
|
+
|
|
224
|
+
Keep the same live booking object until insurance booking is complete:
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
const booking = await sdk.live.booking.book(input);
|
|
228
|
+
|
|
229
|
+
// Do not JSON round-trip `booking` before this call.
|
|
230
|
+
const insurance = await sdk.live.quote.bookInsurance({ quote, booking });
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Spreading, serializing, reconstructing, or transferring the booking object loses
|
|
234
|
+
its private backend context. If the application must cross a page reload or
|
|
235
|
+
process boundary, complete insurance before that boundary.
|
|
236
|
+
|
|
237
|
+
## 9. Update Payment-Option Selection
|
|
238
|
+
|
|
239
|
+
Before 2.13.0:
|
|
240
|
+
|
|
241
|
+
```ts
|
|
242
|
+
const option = booking.paymentSchedules[0]?.paymentOptions.find(
|
|
243
|
+
(candidate) => candidate.kind !== "bank_transfer",
|
|
244
|
+
);
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
From 2.13.0:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const option = [...booking.payment.schedule, ...booking.payment.alternatives]
|
|
251
|
+
.flatMap((entry) => entry.paymentOptions ?? [])
|
|
252
|
+
.find((candidate) => candidate.kind !== "bank_transfer");
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Continue passing the selected structured option unchanged to
|
|
256
|
+
`submitPaymentOption`.
|
|
257
|
+
|
|
258
|
+
## 10. Handle Optional Insurance Output
|
|
259
|
+
|
|
260
|
+
`insurancePaymentOptions` is omitted when no post-booking insurance payment is
|
|
261
|
+
available:
|
|
262
|
+
|
|
263
|
+
```ts
|
|
264
|
+
for (const option of booking.insurancePaymentOptions ?? []) {
|
|
265
|
+
renderInsurancePaymentOption(option);
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
This keeps v10 and bookings without selected insurance minimal.
|
|
270
|
+
|
|
271
|
+
## 11. Replace Hardcoded Search Capability Tables
|
|
272
|
+
|
|
273
|
+
This migration is optional and additive. Search UI that needs to decide which
|
|
274
|
+
period controls to render can query backend support without constructing an SDK:
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
import {
|
|
278
|
+
getSupportedPeriodQueryKeys,
|
|
279
|
+
supportsFlexiblePeriodSearch,
|
|
280
|
+
type BackendKind,
|
|
281
|
+
} from "@v-office/website-sdk/capabilities/search";
|
|
282
|
+
|
|
283
|
+
const shouldRenderFlexiblePeriod = (backend: BackendKind) => supportsFlexiblePeriodSearch(backend);
|
|
284
|
+
|
|
285
|
+
const supportedPeriodKeys = getSupportedPeriodQueryKeys("v9");
|
|
286
|
+
supportedPeriodKeys.has("month"); // false
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Remove local v9/v10 period-key tables in favor of these helpers. Both helpers are
|
|
290
|
+
derived from the same core definitions used by SDK search parsing, so backend
|
|
291
|
+
support changes do not require consumers to update a copied matrix.
|
|
292
|
+
|
|
293
|
+
The returned `ReadonlySet` includes supported aliases such as `from`, `till`,
|
|
294
|
+
`nights_min`, and `nights_max`. It describes individual key support; normal
|
|
295
|
+
search validation still determines whether a complete combination of keys and
|
|
296
|
+
values is executable.
|
|
297
|
+
|
|
298
|
+
## Recommended Verification
|
|
299
|
+
|
|
300
|
+
1. Book a v9 reservation with distinct prepayment and remaining-payment dates.
|
|
301
|
+
2. Confirm both entries retain their own translated long-form deadline.
|
|
302
|
+
3. Confirm a synthesized v9 `full_amount` alternative has no deadline.
|
|
303
|
+
4. Confirm future v9 remaining payment has no payment button unless the SDK
|
|
304
|
+
supplies a payment option.
|
|
305
|
+
5. Book a v10 reservation with multiple online and on-site/external payment steps.
|
|
306
|
+
6. Confirm every remaining v10 step is rendered in backend order.
|
|
307
|
+
7. Confirm only the next payable online step has an Adyen option.
|
|
308
|
+
8. Confirm the full-payment alternative displays the outstanding balance without
|
|
309
|
+
an inferred deadline.
|
|
310
|
+
9. Render both supported locales and verify all amounts, dates, locations, labels,
|
|
311
|
+
and breakdown lines are presentation-ready.
|
|
312
|
+
10. Complete v9 insurance with the live booking object and verify the private
|
|
313
|
+
credential is not present in serialized output.
|
|
314
|
+
11. If replacing a local search capability table, confirm flexible-period controls
|
|
315
|
+
remain hidden for v9 and visible for v10.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Changelog: 2.14.0
|
|
2
|
+
|
|
3
|
+
This release makes the vOffice v9 property catalog authoritative for built-in
|
|
4
|
+
rental attribute types and option values. It fixes legacy option rendering,
|
|
5
|
+
preserves numeric room counts of one, and improves the German and English
|
|
6
|
+
attribute translations.
|
|
7
|
+
|
|
8
|
+
## Added
|
|
9
|
+
|
|
10
|
+
- Generated v9 property metadata now retains the source property type and every
|
|
11
|
+
ordered `OPT` value from the vOffice property export.
|
|
12
|
+
- All 31 v9 `OPT` attributes have localized German and English option labels.
|
|
13
|
+
- v9 option translations use stable numeric keys:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
RentalAttributes.<attribute>.option.<zero-based-index>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- Count attributes can use localized singular and plural labels through:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
RentalAttributes.<attribute>.count.one
|
|
23
|
+
RentalAttributes.<attribute>.count.other
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- Property generation validates all 420 catalog fields, all 30 observed-only
|
|
27
|
+
compatibility fields, option-index ranges in the fixture corpus, and complete
|
|
28
|
+
option translation coverage.
|
|
29
|
+
|
|
30
|
+
## Fixed
|
|
31
|
+
|
|
32
|
+
- v9 `OPT` index `0` is no longer mistaken for a disabled Boolean value.
|
|
33
|
+
- v9 `OPT` index `1` is no longer rendered as a bare Boolean-style label.
|
|
34
|
+
- Higher option indexes are no longer rendered as quantities such as
|
|
35
|
+
`2 Jugendgruppen`.
|
|
36
|
+
- `youthgroups` now maps its zero-based values correctly:
|
|
37
|
+
- `0`: `willkommen` / `welcome`
|
|
38
|
+
- `1`: `nicht erlaubt` / `not allowed`
|
|
39
|
+
- `2`: `auf Anfrage` / `on request`
|
|
40
|
+
- Option rendering is consistent across rental attributes, highlights, and
|
|
41
|
+
vicinity output.
|
|
42
|
+
- Numeric v9 `INT` attributes retain a value of `1`. For example, bedroom counts
|
|
43
|
+
now render as `1 Schlafzimmer` or `1 bedroom` instead of only the label.
|
|
44
|
+
- Known count attributes use grammatically correct singular and plural forms.
|
|
45
|
+
- German and English v9 rental, filter, and option copy has corrected grammar,
|
|
46
|
+
spelling, capitalization, punctuation, terminology, and unit formatting.
|
|
47
|
+
- Corrected semantic translation errors, including German sea-view filtering
|
|
48
|
+
previously labeled as `Seeblick`.
|
|
49
|
+
|
|
50
|
+
## Changed
|
|
51
|
+
|
|
52
|
+
- Source-defined v9 property schemas no longer depend on whichever values happen
|
|
53
|
+
to occur in example fixtures. Examples remain inputs only for compatibility
|
|
54
|
+
fields absent from the catalog and for validation.
|
|
55
|
+
- Invalid, fractional, negative, or out-of-range v9 option indexes are omitted
|
|
56
|
+
instead of being exposed as misleading display text.
|
|
57
|
+
- English v9 rental type `FLAT` is now displayed as `Apartment`.
|
|
58
|
+
- Official Spanish Modelo 179 terminology remains Spanish in both locales to
|
|
59
|
+
avoid changing legal and cadastral meanings.
|
|
60
|
+
|
|
61
|
+
## Compatibility
|
|
62
|
+
|
|
63
|
+
- No SDK construction, configuration, service-call, or public TypeScript shape
|
|
64
|
+
changes are required.
|
|
65
|
+
- Existing Boolean behavior is unchanged: disabled values remain omitted and
|
|
66
|
+
enabled values remain label-only.
|
|
67
|
+
- Existing custom attributes and observed-only v9 compatibility fields remain
|
|
68
|
+
supported.
|
|
69
|
+
- Consumer snapshots, string comparisons, or UI tests that depend on the former
|
|
70
|
+
incorrect v9 strings must be updated.
|
|
71
|
+
|
|
72
|
+
See `versions/2.14.0/MIGRATION.md` and `../../rentals.md`.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Migration: 2.13.0 to 2.14.0
|
|
2
|
+
|
|
3
|
+
2.14.0 corrects presentation of built-in v9 rental attributes. The public SDK
|
|
4
|
+
types and service calls are unchanged, but applications that snapshot, compare,
|
|
5
|
+
filter, or parse localized attribute strings must account for corrected output.
|
|
6
|
+
|
|
7
|
+
Consumers that use only v10 are not affected by the v9 parsing changes.
|
|
8
|
+
|
|
9
|
+
## 1. Expect Correct v9 Option Labels
|
|
10
|
+
|
|
11
|
+
Before 2.14.0, numeric v9 option indexes passed through Boolean and quantity
|
|
12
|
+
heuristics. A `youthgroups` value could therefore produce:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
0 → omitted
|
|
16
|
+
1 → Jugendgruppen
|
|
17
|
+
2 → 2 Jugendgruppen
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
From 2.14.0, values resolve through the ordered vOffice option catalog:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
0 → Jugendgruppen: willkommen
|
|
24
|
+
1 → Jugendgruppen: nicht erlaubt
|
|
25
|
+
2 → Jugendgruppen: auf Anfrage
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
English output is equivalent:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
0 → Youth groups: welcome
|
|
32
|
+
1 → Youth groups: not allowed
|
|
33
|
+
2 → Youth groups: on request
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
This applies to all 31 built-in v9 option attributes and to every output surface
|
|
37
|
+
that renders them:
|
|
38
|
+
|
|
39
|
+
- rental `attributes`
|
|
40
|
+
- rental `highlights`
|
|
41
|
+
- rental `vicinity`
|
|
42
|
+
|
|
43
|
+
Do not parse a visible option string back into an index. Treat these values as
|
|
44
|
+
localized display text.
|
|
45
|
+
|
|
46
|
+
## 2. Preserve Numeric Counts of One
|
|
47
|
+
|
|
48
|
+
Before 2.14.0, the shared legacy renderer interpreted numeric `1` as Boolean
|
|
49
|
+
`true`, so a bedroom count could be reduced to only its label.
|
|
50
|
+
|
|
51
|
+
From 2.14.0, source-defined `INT` values remain numeric display values:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
1 Schlafzimmer
|
|
55
|
+
2 Schlafzimmer
|
|
56
|
+
1 bedroom
|
|
57
|
+
2 bedrooms
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Known count attributes use localized singular and plural nouns. Distance and
|
|
61
|
+
square-meter formatting retain their specialized output.
|
|
62
|
+
|
|
63
|
+
Update snapshots or UI assertions that expected a bare label for a count of one.
|
|
64
|
+
|
|
65
|
+
## 3. Expect Corrected Translation Copy
|
|
66
|
+
|
|
67
|
+
The v9 German and English catalogs have been proofread. Visible changes include:
|
|
68
|
+
|
|
69
|
+
- corrected compound words, capitalization, punctuation, and unit notation
|
|
70
|
+
- natural US English instead of generated key-like labels
|
|
71
|
+
- corrected German terminology and post-1996 spelling
|
|
72
|
+
- `Apartment` instead of `Flat` for the English v9 `FLAT` rental type
|
|
73
|
+
- corrected filter labels such as German `Meerblick`
|
|
74
|
+
|
|
75
|
+
Applications should render SDK output directly. Avoid branching on translated
|
|
76
|
+
labels because wording can be corrected without changing an attribute's
|
|
77
|
+
underlying meaning.
|
|
78
|
+
|
|
79
|
+
## 4. Update Translation Overrides if Needed
|
|
80
|
+
|
|
81
|
+
Attribute label overrides continue to use:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
RentalAttributes.<attribute>.label
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
v9 built-in option overrides use their zero-based source index:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
RentalAttributes.youthgroups.option.0
|
|
91
|
+
RentalAttributes.youthgroups.option.1
|
|
92
|
+
RentalAttributes.youthgroups.option.2
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Count noun overrides can distinguish singular and plural:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
RentalAttributes.bedrooms.count.one
|
|
99
|
+
RentalAttributes.bedrooms.count.other
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Example:
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
const options = defineWebsiteSDKOptions({
|
|
106
|
+
translationOverrides: {
|
|
107
|
+
"en-US": {
|
|
108
|
+
"RentalAttributes.youthgroups.option.0": "Youth groups welcome",
|
|
109
|
+
"RentalAttributes.bedrooms.count.one": "sleeping room",
|
|
110
|
+
"RentalAttributes.bedrooms.count.other": "sleeping rooms",
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Do not reuse v10 named enum keys for v9 numeric options unless the application
|
|
117
|
+
deliberately supplies both key forms.
|
|
118
|
+
|
|
119
|
+
## 5. Invalid Option Values
|
|
120
|
+
|
|
121
|
+
The parser accepts the numeric wire format used by v9, then resolves only finite
|
|
122
|
+
integer indexes present in the catalog. Invalid, fractional, negative, and
|
|
123
|
+
out-of-range values are omitted from display output.
|
|
124
|
+
|
|
125
|
+
This preserves non-failing rental parsing while preventing unknown values from
|
|
126
|
+
appearing as fabricated quantities.
|
|
127
|
+
|
|
128
|
+
## Required Consumer Work
|
|
129
|
+
|
|
130
|
+
No configuration or API migration is required. Check the following when the
|
|
131
|
+
application consumes v9:
|
|
132
|
+
|
|
133
|
+
1. Update snapshots and visual tests for corrected option and count strings.
|
|
134
|
+
2. Remove code that compensates for missing option index `0`.
|
|
135
|
+
3. Remove parsing or special casing for strings such as `2 Jugendgruppen`.
|
|
136
|
+
4. Review translation overrides for corrected built-in copy.
|
|
137
|
+
5. Verify room counts of one and two in both supported locales.
|
|
138
|
+
6. Verify any configured option-valued highlight now displays its option label.
|
|
139
|
+
|
|
140
|
+
## Recommended Verification
|
|
141
|
+
|
|
142
|
+
1. Render `youthgroups` with values `0`, `1`, and `2`.
|
|
143
|
+
2. Render `bedrooms` with values `1` and `2`.
|
|
144
|
+
3. Confirm a Boolean value of `0` remains omitted and `1` remains label-only.
|
|
145
|
+
4. Confirm a LOCATION option such as `beachtype` appears correctly in
|
|
146
|
+
`vicinity`.
|
|
147
|
+
5. Confirm invalid option indexes do not appear.
|
|
148
|
+
6. Run consumer snapshots in `de-DE` and `en-US`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@v-office/website-sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.0",
|
|
4
4
|
"description": "Website-facing SDK facade backed by @v-office/sdk-core",
|
|
5
5
|
"bin": {
|
|
6
6
|
"website-sdk": "./dist/cli.mjs"
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"exports": {
|
|
35
35
|
".": "./dist/index.mjs",
|
|
36
|
+
"./capabilities/*": "./dist/capabilities/*.mjs",
|
|
36
37
|
"./cli": "./dist/cli.mjs",
|
|
37
38
|
"./package.json": "./package.json"
|
|
38
39
|
},
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
},
|
|
42
43
|
"dependencies": {
|
|
43
44
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
44
|
-
"@v-office/sdk-core": "^1.
|
|
45
|
+
"@v-office/sdk-core": "^1.14.0",
|
|
45
46
|
"effect": "4.0.0-beta.85",
|
|
46
47
|
"graphql": "17.0.2",
|
|
47
48
|
"yaml": "^2.9.0"
|
|
@@ -66,8 +67,9 @@
|
|
|
66
67
|
"playground:parser": "node playground/query-parser.ts",
|
|
67
68
|
"cli": "node --env-file=.env dist/cli.mjs",
|
|
68
69
|
"build": "tsdown",
|
|
70
|
+
"codegen:v9:properties": "node codegen/v9/heuristic-generation/generate/index.ts && oxfmt codegen/v9/heuristic-generation/v9-data.ts",
|
|
69
71
|
"codegen:v9:graphql": "graphql-codegen --config codegen/v9/graphql-codegen/codegen.ts",
|
|
70
|
-
"codegen": "pnpm run codegen:v9:graphql",
|
|
72
|
+
"codegen": "pnpm run codegen:v9:properties && pnpm run codegen:v9:graphql",
|
|
71
73
|
"dev": "tsdown --watch",
|
|
72
74
|
"typecheck": "tsc --noEmit",
|
|
73
75
|
"lint": "oxlint .",
|
|
@@ -75,7 +77,8 @@
|
|
|
75
77
|
"fmt": "oxfmt",
|
|
76
78
|
"fmt:check": "oxfmt --check",
|
|
77
79
|
"check": "pnpm run typecheck && pnpm run lint && pnpm run fmt:check",
|
|
78
|
-
"test": "pnpm run build && node --test test/*.test.mjs",
|
|
80
|
+
"test": "pnpm run test:v9:properties && pnpm run build && node --test test/*.test.mjs",
|
|
81
|
+
"test:v9:properties": "node --test codegen/v9/heuristic-generation/generate/property.test.ts src/legacy-v9/parser/rentals/render-property-attribute.test.ts",
|
|
79
82
|
"playground:custom-attributes": "pnpm run build && node --env-file=.env playground/custom-attributes.ts"
|
|
80
83
|
}
|
|
81
84
|
}
|