@v-office/website-sdk 1.1.0 → 1.2.1
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/cli.mjs +1 -1
- package/dist/{client-CDJn8kOh.mjs → client-DeEUMMOh.mjs} +14 -6
- package/dist/index.d.mts +10 -2
- package/dist/index.mjs +1 -1
- package/dist/{operations-Bxhb0jmN.mjs → operations-DcU1qt7g.mjs} +85 -12
- package/dist/{quote-Duya7n8v.mjs → quote-BVx3TAHE.mjs} +1 -1
- package/dist/{quote-xpSX3Z58.mjs → quote-DQGps4dy.mjs} +1 -1
- package/dist/{rentals-DM-qBlym.mjs → rentals-H3RYtMqT.mjs} +1 -1
- package/dist/{rentals-CSp5vdZh.mjs → rentals-plxPVx83.mjs} +2 -124
- package/dist/{search-D-OKND5S.mjs → search-BuR5apFw.mjs} +9 -3
- package/dist/{to-rental-highlights-CYcylkuN.mjs → to-rental-highlights-CAATPqan.mjs} +128 -6
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as defineCMSSDKOptions, t as createCMSSDKFromParsedConfig } from "./client-
|
|
2
|
+
import { n as defineCMSSDKOptions, t as createCMSSDKFromParsedConfig } from "./client-DeEUMMOh.mjs";
|
|
3
3
|
import { Console, Effect, FileSystem, Layer, Option, Path, Stdio, Terminal } from "effect";
|
|
4
4
|
import { Command, Flag } from "effect/unstable/cli";
|
|
5
5
|
import { inspect } from "node:util";
|
|
@@ -19373,7 +19373,7 @@ const bookV9Insurance = ({ quote, bookingNumber, guestToken, v1Client }) => Effe
|
|
|
19373
19373
|
//#region src/adapters/v9/live/quote.ts
|
|
19374
19374
|
const loadQuoteRuntime$1 = Effect.tryPromise({
|
|
19375
19375
|
try: async () => {
|
|
19376
|
-
return { toGuestQuote: (await import("./quote-
|
|
19376
|
+
return { toGuestQuote: (await import("./quote-DQGps4dy.mjs")).toGuestQuote };
|
|
19377
19377
|
},
|
|
19378
19378
|
catch: (cause) => new CMSError({
|
|
19379
19379
|
backend: "v9",
|
|
@@ -23133,7 +23133,7 @@ const parseV9SearchCursor = (cursor) => Effect.gen(function* () {
|
|
|
23133
23133
|
});
|
|
23134
23134
|
const loadLiveSearchRuntime$1 = Effect.tryPromise({
|
|
23135
23135
|
try: async () => {
|
|
23136
|
-
const [operations, parser] = await Promise.all([import("./operations-
|
|
23136
|
+
const [operations, parser] = await Promise.all([import("./operations-DcU1qt7g.mjs"), import("./search-BuR5apFw.mjs")]);
|
|
23137
23137
|
return {
|
|
23138
23138
|
searchQuery: operations.searchQuery,
|
|
23139
23139
|
toQueryInput: parser.toQueryInput,
|
|
@@ -23188,6 +23188,7 @@ const makeV9LiveSearchLive = (config, options) => Layer.effect(LiveSearchService
|
|
|
23188
23188
|
const isExactPeriodMatch = alternatives === null;
|
|
23189
23189
|
const item = yield* toSearchOutputItem({
|
|
23190
23190
|
locale: input.locale,
|
|
23191
|
+
imageProxyBaseUrl: config.imageProxyBaseUrl,
|
|
23191
23192
|
rentalHighlightPrioritization,
|
|
23192
23193
|
customAttributeFilterDefinitions: customAttributeDefinitions,
|
|
23193
23194
|
rental,
|
|
@@ -23393,6 +23394,7 @@ const toOutputType = (definition) => {
|
|
|
23393
23394
|
switch (definition.type) {
|
|
23394
23395
|
case "boolean": return "BooleanFilter";
|
|
23395
23396
|
case "int": return "IntFilter";
|
|
23397
|
+
case "string": return "StringFilter";
|
|
23396
23398
|
case "option": return "OptionFilter";
|
|
23397
23399
|
case "complex": return "BooleanFilter";
|
|
23398
23400
|
}
|
|
@@ -23429,6 +23431,10 @@ const toCustomAttributeFilterOutputItem = ({ definition, locale }) => {
|
|
|
23429
23431
|
...numericBounds ? { numericBounds } : {}
|
|
23430
23432
|
};
|
|
23431
23433
|
}
|
|
23434
|
+
if (type === "StringFilter") return {
|
|
23435
|
+
...baseFilter,
|
|
23436
|
+
type
|
|
23437
|
+
};
|
|
23432
23438
|
return {
|
|
23433
23439
|
...baseFilter,
|
|
23434
23440
|
type
|
|
@@ -23529,7 +23535,7 @@ const DEFAULT_RENTAL_FEEDBACK_DATA_ATTRIBUTES = [
|
|
|
23529
23535
|
];
|
|
23530
23536
|
const loadStaticRentalsRuntime$1 = Effect.tryPromise({
|
|
23531
23537
|
try: async () => {
|
|
23532
|
-
const [operations, parser] = await Promise.all([import("./operations-
|
|
23538
|
+
const [operations, parser] = await Promise.all([import("./operations-DcU1qt7g.mjs"), import("./rentals-plxPVx83.mjs")]);
|
|
23533
23539
|
return {
|
|
23534
23540
|
rentalsAllQuery: operations.rentalsAllQuery,
|
|
23535
23541
|
toRentalRentalsOutput: parser.toRentalRentalsOutput
|
|
@@ -24051,7 +24057,7 @@ const V10LiveContactLive = Layer.effect(LiveContactService, Effect.gen(function*
|
|
|
24051
24057
|
//#region src/adapters/v10/live/quote.ts
|
|
24052
24058
|
const loadQuoteRuntime = Effect.tryPromise({
|
|
24053
24059
|
try: async () => {
|
|
24054
|
-
const [operations, parser] = await Promise.all([import("./operations-B4IgNB3E.mjs"), import("./quote-
|
|
24060
|
+
const [operations, parser] = await Promise.all([import("./operations-B4IgNB3E.mjs"), import("./quote-BVx3TAHE.mjs")]);
|
|
24055
24061
|
return {
|
|
24056
24062
|
bookingsGuestQuoteQuery: operations.bookingsGuestQuoteQuery,
|
|
24057
24063
|
bookingsMultiRateContextQuery: operations.bookingsMultiRateContextQuery,
|
|
@@ -24192,7 +24198,8 @@ const isEnabledBooleanFilter = (value) => {
|
|
|
24192
24198
|
return normalizedValue === "" || normalizedValue === "true" || normalizedValue === "1";
|
|
24193
24199
|
};
|
|
24194
24200
|
const toCustomAttributeFilterLabel = ({ definition, locale, value }) => {
|
|
24195
|
-
if (definition.type !== "option" || value == null) return definition.label[locale];
|
|
24201
|
+
if (definition.type !== "option" && definition.type !== "string" || value == null) return definition.label[locale];
|
|
24202
|
+
if (definition.type === "string") return `${definition.label[locale]}: ${value}`;
|
|
24196
24203
|
const option = definition.options.find((entry) => entry.value === value);
|
|
24197
24204
|
return option == null ? definition.label[locale] : `${definition.label[locale]}: ${option.label[locale]}`;
|
|
24198
24205
|
};
|
|
@@ -24696,6 +24703,7 @@ const parseCustomAttributeValue = ({ definition, value }) => {
|
|
|
24696
24703
|
switch (definition.type) {
|
|
24697
24704
|
case "boolean": return parseBooleanValue(value);
|
|
24698
24705
|
case "int": return Number.isInteger(Number(value)) ? value : void 0;
|
|
24706
|
+
case "string": return value.length > 0 ? value : void 0;
|
|
24699
24707
|
case "option": return definition.options.some((option) => option.value === value) ? value : void 0;
|
|
24700
24708
|
}
|
|
24701
24709
|
};
|
|
@@ -33039,7 +33047,7 @@ const makeV10StaticFilterLive = ({ options }) => Layer.effect(StaticFilterServic
|
|
|
33039
33047
|
const ONLINE_RENTALS_FILTER = { status: { _eq: "ONLINE" } };
|
|
33040
33048
|
const loadStaticRentalsRuntime = Effect.tryPromise({
|
|
33041
33049
|
try: async () => {
|
|
33042
|
-
const [operations, parser] = await Promise.all([import("./operations-B4IgNB3E.mjs"), import("./rentals-
|
|
33050
|
+
const [operations, parser] = await Promise.all([import("./operations-B4IgNB3E.mjs"), import("./rentals-H3RYtMqT.mjs")]);
|
|
33043
33051
|
return {
|
|
33044
33052
|
customAttributesListCustomAttributesQuery: operations.customAttributesListCustomAttributesQuery,
|
|
33045
33053
|
rentalsListRentalSummaryQuery: operations.rentalsListRentalSummaryQuery,
|
package/dist/index.d.mts
CHANGED
|
@@ -720,6 +720,11 @@ declare const FilterGetFiltersOutputSchema: Schema.$Array<Schema.Union<readonly
|
|
|
720
720
|
readonly min: Schema.Number;
|
|
721
721
|
readonly max: Schema.Number;
|
|
722
722
|
}>>;
|
|
723
|
+
}>, Schema.Struct<{
|
|
724
|
+
readonly searchParameterQueryKey: Schema.String;
|
|
725
|
+
readonly label: Schema.String;
|
|
726
|
+
readonly category: Schema.String;
|
|
727
|
+
readonly type: Schema.Literal<"StringFilter">;
|
|
723
728
|
}>, Schema.Struct<{
|
|
724
729
|
readonly searchParameterQueryKey: Schema.String;
|
|
725
730
|
readonly label: Schema.String;
|
|
@@ -10870,14 +10875,17 @@ type IntFilterDefinition = CustomAttributeFilterDefinitionBase & {
|
|
|
10870
10875
|
readonly type: "int";
|
|
10871
10876
|
readonly numericBounds: CustomAttributeFilterNumericBounds;
|
|
10872
10877
|
};
|
|
10878
|
+
type StringFilterDefinition = CustomAttributeFilterDefinitionBase & {
|
|
10879
|
+
readonly type: "string";
|
|
10880
|
+
};
|
|
10873
10881
|
type OptionFilterDefinition = CustomAttributeFilterDefinitionBase & {
|
|
10874
10882
|
readonly type: "option";
|
|
10875
10883
|
readonly options: NonEmptyReadonlyArray<CustomAttributeFilterOption>;
|
|
10876
10884
|
};
|
|
10877
|
-
type CustomAttributeSourceFilterDefinition = (BooleanFilterDefinition | IntFilterDefinition | OptionFilterDefinition) & {
|
|
10885
|
+
type CustomAttributeSourceFilterDefinition = (BooleanFilterDefinition | IntFilterDefinition | StringFilterDefinition | OptionFilterDefinition) & {
|
|
10878
10886
|
/** Backed by v10 custom attributes and v9 rental data attributes. */readonly source: "customAttribute";
|
|
10879
10887
|
} & SearchableFilterVisibility;
|
|
10880
|
-
type BackendSearchFilterDefinition = (BooleanFilterDefinition | IntFilterDefinition | OptionFilterDefinition) & {
|
|
10888
|
+
type BackendSearchFilterDefinition = (BooleanFilterDefinition | IntFilterDefinition | StringFilterDefinition | OptionFilterDefinition) & {
|
|
10881
10889
|
/** Backed by backend-defined filter keys, mainly v9 hub filters. */readonly source: "backendFilter";
|
|
10882
10890
|
} & PublicFilterVisibility;
|
|
10883
10891
|
/** Filter that expands to other filters instead of being sent directly. */
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as DocumentResourceSchema, $t as toStableSearchInputParameterValues, At as ServiceImageSchema, B as makeV0OpenApiClientFetchLive, Bt as UnitIdsResponseSchema, Ct as QuoteServiceSchema, Dt as RoomImageSchema, Et as RegionListResponseSchema, Ft as TileCollectionResponseSchema, G as makeV1OpenApiClientLive, Gt as UnitServicePriceSchema, H as V1OpenApiClient, Ht as UnitListResponseSchema, It as TileSchema, J as CalendarResponseSchema, Jt as VideoResponseSchema, K as ApiEnvelopeBaseSchema, Kt as V1_BASE_URL, Lt as TileTagSchema, Mt as ServiceListResponseSchema, Nt as SetupDataSchema, Ot as SearchPropertiesResponseSchema, Pt as SetupResponseSchema, Q as DocumentResourceResponseSchema, R as V0OpenApiClient, Rt as TravelInsuranceBookingSchema, St as QuoteSchema, Tt as RawVofficeObjectSchema, U as V1OpenApiClientError, Ut as UnitOfferSchema, V as makeV0OpenApiClientLive, Vt as UnitListItemSchema, W as makeV1OpenApiClientFetchLive, Wt as UnitResponseSchema, X as CustomerUnitSummarySchema, Y as CurrentMemberResponseSchema, Yt as decodeV1OperationResponse, Z as DocumentCollectionResponseSchema, Zt as defineStableSearchInputGroup, _t as PaymentScheduleItemSchema, a as defineVofficeFacilityDataAttributes, at as ErgoBankSchema, bt as QuotePricesPayloadSchema, c as defineVofficeOfferDataAttributes, ct as ErgoCreatePreContractRequestSchema, d as defineVofficeServiceDataAttributes, dt as ErgoPolicyNumberRequestSchema, en as toStableSearchInputQueryKeys, et as DocumentStatusSchema, f as defineVofficeTotalRatingDataAttributes, ft as ErgoReadPreContractRequestSchema, gt as OnOfficeUnitSchema, ht as OnOfficeUnitCollectionResponseSchema, i as defineDataAttributes, it as ErgoAddressSchema, jt as ServiceLimitSchema, kt as ServiceBeonDataSchema, l as defineVofficePriceDataAttributes, lt as ErgoPersonSchema, mt as FacilityListResponseSchema, n as defineCMSSDKOptions, nt as DocumentSummarySchema, o as defineVofficeFeedbackDataAttributes, ot as ErgoBookRequestSchema, p as defineVofficeUnitDataAttributes, pt as ErgoTripAndCustomerRequestSchema, q as CalendarDaySchema, qt as V1_OPERATIONS, r as customDataAttribute, rt as DocumentTypeSchema, s as defineVofficeImageDataAttributes, st as ErgoCommonFieldsSchema, t as createCMSSDKFromParsedConfig, tt as DocumentStatusUpdateRequestSchema, u as defineVofficeRatingDataAttributes, ut as ErgoPlanSearchRequestSchema, vt as PaymentScheduleSchema, wt as RawObjectResponseSchema, xt as QuotePricesResponseSchema, yt as QuoteLineSchema, z as V0OpenApiClientError, zt as TravelInsuranceBookingStoreRequestSchema } from "./client-
|
|
1
|
+
import { $ as DocumentResourceSchema, $t as toStableSearchInputParameterValues, At as ServiceImageSchema, B as makeV0OpenApiClientFetchLive, Bt as UnitIdsResponseSchema, Ct as QuoteServiceSchema, Dt as RoomImageSchema, Et as RegionListResponseSchema, Ft as TileCollectionResponseSchema, G as makeV1OpenApiClientLive, Gt as UnitServicePriceSchema, H as V1OpenApiClient, Ht as UnitListResponseSchema, It as TileSchema, J as CalendarResponseSchema, Jt as VideoResponseSchema, K as ApiEnvelopeBaseSchema, Kt as V1_BASE_URL, Lt as TileTagSchema, Mt as ServiceListResponseSchema, Nt as SetupDataSchema, Ot as SearchPropertiesResponseSchema, Pt as SetupResponseSchema, Q as DocumentResourceResponseSchema, R as V0OpenApiClient, Rt as TravelInsuranceBookingSchema, St as QuoteSchema, Tt as RawVofficeObjectSchema, U as V1OpenApiClientError, Ut as UnitOfferSchema, V as makeV0OpenApiClientLive, Vt as UnitListItemSchema, W as makeV1OpenApiClientFetchLive, Wt as UnitResponseSchema, X as CustomerUnitSummarySchema, Y as CurrentMemberResponseSchema, Yt as decodeV1OperationResponse, Z as DocumentCollectionResponseSchema, Zt as defineStableSearchInputGroup, _t as PaymentScheduleItemSchema, a as defineVofficeFacilityDataAttributes, at as ErgoBankSchema, bt as QuotePricesPayloadSchema, c as defineVofficeOfferDataAttributes, ct as ErgoCreatePreContractRequestSchema, d as defineVofficeServiceDataAttributes, dt as ErgoPolicyNumberRequestSchema, en as toStableSearchInputQueryKeys, et as DocumentStatusSchema, f as defineVofficeTotalRatingDataAttributes, ft as ErgoReadPreContractRequestSchema, gt as OnOfficeUnitSchema, ht as OnOfficeUnitCollectionResponseSchema, i as defineDataAttributes, it as ErgoAddressSchema, jt as ServiceLimitSchema, kt as ServiceBeonDataSchema, l as defineVofficePriceDataAttributes, lt as ErgoPersonSchema, mt as FacilityListResponseSchema, n as defineCMSSDKOptions, nt as DocumentSummarySchema, o as defineVofficeFeedbackDataAttributes, ot as ErgoBookRequestSchema, p as defineVofficeUnitDataAttributes, pt as ErgoTripAndCustomerRequestSchema, q as CalendarDaySchema, qt as V1_OPERATIONS, r as customDataAttribute, rt as DocumentTypeSchema, s as defineVofficeImageDataAttributes, st as ErgoCommonFieldsSchema, t as createCMSSDKFromParsedConfig, tt as DocumentStatusUpdateRequestSchema, u as defineVofficeRatingDataAttributes, ut as ErgoPlanSearchRequestSchema, vt as PaymentScheduleSchema, wt as RawObjectResponseSchema, xt as QuotePricesResponseSchema, yt as QuoteLineSchema, z as V0OpenApiClientError, zt as TravelInsuranceBookingStoreRequestSchema } from "./client-DeEUMMOh.mjs";
|
|
2
2
|
import { t as CMSError } from "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { D as UnknownAdditionalService, E as InvalidAdditionalServiceQuantity, w as AdditionalServiceLimitExceeded } from "./quote-CRjV_lf-.mjs";
|
|
4
4
|
export { AdditionalServiceLimitExceeded, ApiEnvelopeBaseSchema, CMSError, CalendarDaySchema, CalendarResponseSchema, CurrentMemberResponseSchema, CustomerUnitSummarySchema, DocumentCollectionResponseSchema, DocumentResourceResponseSchema, DocumentResourceSchema, DocumentStatusSchema, DocumentStatusUpdateRequestSchema, DocumentSummarySchema, DocumentTypeSchema, ErgoAddressSchema, ErgoBankSchema, ErgoBookRequestSchema, ErgoCommonFieldsSchema, ErgoCreatePreContractRequestSchema, ErgoPersonSchema, ErgoPlanSearchRequestSchema, ErgoPolicyNumberRequestSchema, ErgoReadPreContractRequestSchema, ErgoTripAndCustomerRequestSchema, FacilityListResponseSchema, InvalidAdditionalServiceQuantity, OnOfficeUnitCollectionResponseSchema, OnOfficeUnitSchema, PaymentScheduleItemSchema, PaymentScheduleSchema, QuoteLineSchema, QuotePricesPayloadSchema, QuotePricesResponseSchema, QuoteSchema, QuoteServiceSchema, RawObjectResponseSchema, RawVofficeObjectSchema, RegionListResponseSchema, RoomImageSchema, SearchPropertiesResponseSchema, ServiceBeonDataSchema, ServiceImageSchema, ServiceLimitSchema, ServiceListResponseSchema, SetupDataSchema, SetupResponseSchema, TileCollectionResponseSchema, TileSchema, TileTagSchema, TravelInsuranceBookingSchema, TravelInsuranceBookingStoreRequestSchema, UnitIdsResponseSchema, UnitListItemSchema, UnitListResponseSchema, UnitOfferSchema, UnitResponseSchema, UnitServicePriceSchema, UnknownAdditionalService, V0OpenApiClient, V0OpenApiClientError, V1OpenApiClient, V1OpenApiClientError, V1_BASE_URL, V1_OPERATIONS, VideoResponseSchema, createCMSSDKFromParsedConfig, customDataAttribute, decodeV1OperationResponse, defineCMSSDKOptions, defineDataAttributes, defineStableSearchInputGroup, defineVofficeFacilityDataAttributes, defineVofficeFeedbackDataAttributes, defineVofficeImageDataAttributes, defineVofficeOfferDataAttributes, defineVofficePriceDataAttributes, defineVofficeRatingDataAttributes, defineVofficeServiceDataAttributes, defineVofficeTotalRatingDataAttributes, defineVofficeUnitDataAttributes, makeV0OpenApiClientFetchLive, makeV0OpenApiClientLive, makeV1OpenApiClientFetchLive, makeV1OpenApiClientLive, toStableSearchInputParameterValues, toStableSearchInputQueryKeys };
|
|
@@ -505,7 +505,7 @@ const documents = {
|
|
|
505
505
|
}
|
|
506
506
|
}]
|
|
507
507
|
},
|
|
508
|
-
"\n query CMSSDK_Search(\n $first: Int!\n $page: Int\n $language: String\n $vofficeData: VofficeData\n $basicQueryInputs: [BasicQueryInput!]\n $dataAttributes: [String!]! = []\n ) {\n search(\n first: $first\n page: $page\n language: $language\n voffice: $vofficeData\n data: $basicQueryInputs\n ) {\n paginatorInfo {\n hasMorePages\n currentPage\n }\n data {\n voffice_id\n voffice_images {\n path\n title\n }\n additional_voffice_data {\n alternatives {\n fromdate\n tilldate\n calc {\n total\n rent\n summary\n oTotal\n oRent\n oSummary\n discountName\n }\n }\n calc {\n total\n rent\n summary\n oTotal\n oRent\n oSummary\n discountName\n }\n }\n data(attributes: $dataAttributes)\n }\n }\n }\n": {
|
|
508
|
+
"\n query CMSSDK_Search(\n $first: Int!\n $page: Int\n $language: String\n $vofficeData: VofficeData\n $basicQueryInputs: [BasicQueryInput!]\n $dataAttributes: [String!]! = []\n ) {\n search(\n first: $first\n page: $page\n language: $language\n voffice: $vofficeData\n data: $basicQueryInputs\n ) {\n paginatorInfo {\n hasMorePages\n currentPage\n }\n data {\n voffice_id\n voffice_images {\n id\n path\n title\n description\n }\n voffice_room_images {\n id\n path\n name\n title\n description\n }\n additional_voffice_data {\n alternatives {\n fromdate\n tilldate\n calc {\n total\n rent\n summary\n oTotal\n oRent\n oSummary\n discountName\n }\n }\n calc {\n total\n rent\n summary\n oTotal\n oRent\n oSummary\n discountName\n }\n }\n data(attributes: $dataAttributes)\n }\n }\n }\n": {
|
|
509
509
|
kind: "Document",
|
|
510
510
|
definitions: [{
|
|
511
511
|
kind: "OperationDefinition",
|
|
@@ -768,19 +768,83 @@ const documents = {
|
|
|
768
768
|
},
|
|
769
769
|
selectionSet: {
|
|
770
770
|
kind: "SelectionSet",
|
|
771
|
-
selections: [
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
771
|
+
selections: [
|
|
772
|
+
{
|
|
773
|
+
kind: "Field",
|
|
774
|
+
name: {
|
|
775
|
+
kind: "Name",
|
|
776
|
+
value: "id"
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
kind: "Field",
|
|
781
|
+
name: {
|
|
782
|
+
kind: "Name",
|
|
783
|
+
value: "path"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
kind: "Field",
|
|
788
|
+
name: {
|
|
789
|
+
kind: "Name",
|
|
790
|
+
value: "title"
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
{
|
|
794
|
+
kind: "Field",
|
|
795
|
+
name: {
|
|
796
|
+
kind: "Name",
|
|
797
|
+
value: "description"
|
|
798
|
+
}
|
|
776
799
|
}
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
800
|
+
]
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
{
|
|
804
|
+
kind: "Field",
|
|
805
|
+
name: {
|
|
806
|
+
kind: "Name",
|
|
807
|
+
value: "voffice_room_images"
|
|
808
|
+
},
|
|
809
|
+
selectionSet: {
|
|
810
|
+
kind: "SelectionSet",
|
|
811
|
+
selections: [
|
|
812
|
+
{
|
|
813
|
+
kind: "Field",
|
|
814
|
+
name: {
|
|
815
|
+
kind: "Name",
|
|
816
|
+
value: "id"
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
kind: "Field",
|
|
821
|
+
name: {
|
|
822
|
+
kind: "Name",
|
|
823
|
+
value: "path"
|
|
824
|
+
}
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
kind: "Field",
|
|
828
|
+
name: {
|
|
829
|
+
kind: "Name",
|
|
830
|
+
value: "name"
|
|
831
|
+
}
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
kind: "Field",
|
|
835
|
+
name: {
|
|
836
|
+
kind: "Name",
|
|
837
|
+
value: "title"
|
|
838
|
+
}
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
kind: "Field",
|
|
842
|
+
name: {
|
|
843
|
+
kind: "Name",
|
|
844
|
+
value: "description"
|
|
845
|
+
}
|
|
782
846
|
}
|
|
783
|
-
|
|
847
|
+
]
|
|
784
848
|
}
|
|
785
849
|
},
|
|
786
850
|
{
|
|
@@ -1049,8 +1113,17 @@ const searchQuery = graphql(`
|
|
|
1049
1113
|
data {
|
|
1050
1114
|
voffice_id
|
|
1051
1115
|
voffice_images {
|
|
1116
|
+
id
|
|
1117
|
+
path
|
|
1118
|
+
title
|
|
1119
|
+
description
|
|
1120
|
+
}
|
|
1121
|
+
voffice_room_images {
|
|
1122
|
+
id
|
|
1052
1123
|
path
|
|
1124
|
+
name
|
|
1053
1125
|
title
|
|
1126
|
+
description
|
|
1054
1127
|
}
|
|
1055
1128
|
additional_voffice_data {
|
|
1056
1129
|
alternatives {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./client-
|
|
1
|
+
import "./client-DeEUMMOh.mjs";
|
|
2
2
|
import "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { b as localeToLanguage, d as formatCurrency, g as toNightCount, n as addGuestQuoteAdditionalServiceSelection, t as GuestQuote } from "./quote-CRjV_lf-.mjs";
|
|
4
4
|
import { DateTime, Effect } from "effect";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./client-
|
|
1
|
+
import "./client-DeEUMMOh.mjs";
|
|
2
2
|
import { d as formatCurrency, g as toNightCount, n as addGuestQuoteAdditionalServiceSelection, t as GuestQuote } from "./quote-CRjV_lf-.mjs";
|
|
3
3
|
import { DateTime, Effect } from "effect";
|
|
4
4
|
//#region src/adapters/v9/parser/quote/to-additional-service-calculation.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as toAddress, _ as GENERATED_RENTAL_METADATA_CATALOG, b as toLocation, g as toRentalHighlights, h as toRentalType, m as toScope, v as toProperty, x as toImages, y as toDescription } from "./client-
|
|
1
|
+
import { S as toAddress, _ as GENERATED_RENTAL_METADATA_CATALOG, b as toLocation, g as toRentalHighlights, h as toRentalType, m as toScope, v as toProperty, x as toImages, y as toDescription } from "./client-DeEUMMOh.mjs";
|
|
2
2
|
import "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { b as localeToLanguage, y as makeTranslate } from "./quote-CRjV_lf-.mjs";
|
|
4
4
|
import { t as renderCustomAttributeHighlight } from "./custom-attribute-D5Kb1YHA.mjs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { F as parseVofficeFacilityData, I as parseVofficeFeedbackData, L as parseVofficeUnitData, M as VofficeUnitDataPropertyCategoryLabelKeys, N as VofficeUnitDataPropertyCategoryValues, P as VofficeUnitDataPropertyMetadata } from "./client-
|
|
1
|
+
import { F as parseVofficeFacilityData, I as parseVofficeFeedbackData, L as parseVofficeUnitData, M as VofficeUnitDataPropertyCategoryLabelKeys, N as VofficeUnitDataPropertyCategoryValues, P as VofficeUnitDataPropertyMetadata } from "./client-DeEUMMOh.mjs";
|
|
2
2
|
import "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { b as localeToLanguage, y as makeTranslate } from "./quote-CRjV_lf-.mjs";
|
|
4
4
|
import { i as renderLabeledAttributeValue, t as renderCustomAttributeHighlight } from "./custom-attribute-D5Kb1YHA.mjs";
|
|
5
|
-
import { n as
|
|
5
|
+
import { i as toLocalizedString, n as toImages, r as toAddress, t as toRentalHighlights } from "./to-rental-highlights-CAATPqan.mjs";
|
|
6
6
|
import { Effect } from "effect";
|
|
7
7
|
//#region src/adapters/v9/parser/rentals/to-description.ts
|
|
8
8
|
const toDescription = (data, locale) => {
|
|
@@ -26,128 +26,6 @@ const toDescription = (data, locale) => {
|
|
|
26
26
|
return description;
|
|
27
27
|
};
|
|
28
28
|
//#endregion
|
|
29
|
-
//#region src/adapters/v9/parser/rentals/to-image.ts
|
|
30
|
-
const IMAGE_ASPECT_RATIO = 3 / 2;
|
|
31
|
-
const IMAGE_SRCSET_WIDTHS = [
|
|
32
|
-
320,
|
|
33
|
-
480,
|
|
34
|
-
640,
|
|
35
|
-
960,
|
|
36
|
-
1280,
|
|
37
|
-
1920,
|
|
38
|
-
2560
|
|
39
|
-
];
|
|
40
|
-
const IMAGE_DEFAULT_WIDTH = 960;
|
|
41
|
-
const buildImageUrl = (imageProxyBaseUrl, path, width) => {
|
|
42
|
-
const base = imageProxyBaseUrl.replace(/\/$/, "");
|
|
43
|
-
const normalizedPath = path.replace(/^\/+/, "");
|
|
44
|
-
return `${base}/_/rs:fill:${width}:${Math.round(width / IMAGE_ASPECT_RATIO)}:0/plain/${normalizedPath}`;
|
|
45
|
-
};
|
|
46
|
-
const buildSrcset = (imageProxyBaseUrl, path) => IMAGE_SRCSET_WIDTHS.map((width) => `${buildImageUrl(imageProxyBaseUrl, path, width)} ${width}w`).join(", ");
|
|
47
|
-
const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
|
|
48
|
-
const toDataImageId = (dataImage) => dataImage?.id?.toString();
|
|
49
|
-
const getImagePath = (entry) => entry.image?.path ?? entry.normalizedPath;
|
|
50
|
-
const getFileName = (path) => path?.split("/").at(-1);
|
|
51
|
-
const getDirectoryName = (path) => {
|
|
52
|
-
const lastSlashIndex = path.lastIndexOf("/");
|
|
53
|
-
return lastSlashIndex === -1 ? void 0 : path.slice(0, lastSlashIndex);
|
|
54
|
-
};
|
|
55
|
-
const stripDataImageFilePrefix = (fileName) => fileName.replace(/^mf(?=\d)/i, "");
|
|
56
|
-
const getDataImageFileName = (dataImage) => {
|
|
57
|
-
const name = dataImage.name != null ? stripDataImageFilePrefix(dataImage.name) : void 0;
|
|
58
|
-
if (name != null) return name;
|
|
59
|
-
return dataImage.id != null ? `${dataImage.id}.jpg` : void 0;
|
|
60
|
-
};
|
|
61
|
-
const normalizeDataImagePath = (dataImage, vofficeImages) => {
|
|
62
|
-
const fileName = getDataImageFileName(dataImage);
|
|
63
|
-
if (fileName == null) return void 0;
|
|
64
|
-
const matchingPath = vofficeImages.find((image) => getFileName(image.path ?? void 0) === fileName)?.path;
|
|
65
|
-
if (matchingPath != null) return matchingPath;
|
|
66
|
-
const directoryName = vofficeImages.map((image) => image.path != null ? getDirectoryName(image.path) : void 0).find((path) => path != null);
|
|
67
|
-
return directoryName != null ? `${directoryName}/${fileName}` : void 0;
|
|
68
|
-
};
|
|
69
|
-
const pathMatchesName = (path, name) => path != null && name != null && (path === name || path.endsWith(`/${name}`));
|
|
70
|
-
const entriesShareId = (left, right) => {
|
|
71
|
-
const leftIds = [left.image?.id, toDataImageId(left.dataImage)].filter(isNonEmptyString);
|
|
72
|
-
const rightIds = [right.image?.id, toDataImageId(right.dataImage)].filter(isNonEmptyString);
|
|
73
|
-
return leftIds.some((leftId) => rightIds.includes(leftId));
|
|
74
|
-
};
|
|
75
|
-
const entriesSharePathOrName = (left, right) => {
|
|
76
|
-
const leftPath = getImagePath(left);
|
|
77
|
-
const rightPath = getImagePath(right);
|
|
78
|
-
const leftName = left.dataImage != null ? getDataImageFileName(left.dataImage) : getFileName(left.image?.path ?? void 0);
|
|
79
|
-
const rightName = right.dataImage != null ? getDataImageFileName(right.dataImage) : getFileName(right.image?.path ?? void 0);
|
|
80
|
-
return leftPath != null && rightPath != null && leftPath === rightPath || pathMatchesName(leftPath, rightName) || pathMatchesName(rightPath, leftName);
|
|
81
|
-
};
|
|
82
|
-
const entriesMatch = (left, right) => entriesShareId(left, right) || entriesSharePathOrName(left, right);
|
|
83
|
-
const mergeEntry = (existing, next) => {
|
|
84
|
-
const image = existing.image ?? next.image;
|
|
85
|
-
const dataImage = existing.dataImage ?? next.dataImage;
|
|
86
|
-
const normalizedPath = existing.normalizedPath ?? next.normalizedPath;
|
|
87
|
-
const entry = { source: existing.source };
|
|
88
|
-
if (image != null) entry.image = image;
|
|
89
|
-
if (dataImage != null) entry.dataImage = dataImage;
|
|
90
|
-
if (normalizedPath != null) entry.normalizedPath = normalizedPath;
|
|
91
|
-
return entry;
|
|
92
|
-
};
|
|
93
|
-
const mergeImageEntries = (entries) => {
|
|
94
|
-
const merged = [];
|
|
95
|
-
for (const entry of entries) {
|
|
96
|
-
const index = merged.findIndex((existing) => entriesMatch(existing, entry));
|
|
97
|
-
if (index === -1) {
|
|
98
|
-
merged.push(entry);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
merged[index] = mergeEntry(merged[index], entry);
|
|
102
|
-
}
|
|
103
|
-
return merged;
|
|
104
|
-
};
|
|
105
|
-
const getImageEntries = (rental, data) => {
|
|
106
|
-
const vofficeImages = rental.voffice_images ?? [];
|
|
107
|
-
return [
|
|
108
|
-
...vofficeImages.map((image) => ({
|
|
109
|
-
source: "voffice_images",
|
|
110
|
-
image
|
|
111
|
-
})),
|
|
112
|
-
...(rental.voffice_room_images ?? []).map((image) => ({
|
|
113
|
-
source: "voffice_room_images",
|
|
114
|
-
image
|
|
115
|
-
})),
|
|
116
|
-
...(data.known.images ?? []).flatMap((dataImage) => {
|
|
117
|
-
const normalizedPath = normalizeDataImagePath(dataImage, vofficeImages);
|
|
118
|
-
if (normalizedPath == null) return [];
|
|
119
|
-
return [{
|
|
120
|
-
source: "data_images",
|
|
121
|
-
dataImage,
|
|
122
|
-
normalizedPath
|
|
123
|
-
}];
|
|
124
|
-
})
|
|
125
|
-
];
|
|
126
|
-
};
|
|
127
|
-
const toImage = (imageProxyBaseUrl, entry, locale) => {
|
|
128
|
-
const path = getImagePath(entry);
|
|
129
|
-
const src = path != null ? buildImageUrl(imageProxyBaseUrl, path, IMAGE_DEFAULT_WIDTH) : "";
|
|
130
|
-
const srcset = path != null ? buildSrcset(imageProxyBaseUrl, path) : "";
|
|
131
|
-
const title = toLocalizedString(entry.dataImage?.titles, locale) ?? entry.image?.title;
|
|
132
|
-
const alt = title ?? entry.image?.description ?? "";
|
|
133
|
-
const metadata = { source: entry.source };
|
|
134
|
-
if (entry.dataImage != null) metadata.dataImage = entry.dataImage;
|
|
135
|
-
const image = {
|
|
136
|
-
idOrPath: path ?? toDataImageId(entry.dataImage) ?? entry.dataImage?.name ?? "",
|
|
137
|
-
src,
|
|
138
|
-
srcset,
|
|
139
|
-
alt,
|
|
140
|
-
metadata
|
|
141
|
-
};
|
|
142
|
-
if (title != null) image.title = title;
|
|
143
|
-
if (entry.dataImage?.tag != null) image.category = entry.dataImage.tag;
|
|
144
|
-
return image;
|
|
145
|
-
};
|
|
146
|
-
const toImages = (imageProxyBaseUrl, rental, locale, data) => {
|
|
147
|
-
if (rental.voffice_images == null || rental.voffice_images.length === 0) return [];
|
|
148
|
-
return mergeImageEntries(getImageEntries(rental, data)).map((entry) => toImage(imageProxyBaseUrl, entry, locale));
|
|
149
|
-
};
|
|
150
|
-
//#endregion
|
|
151
29
|
//#region src/adapters/v9/parser/rentals/to-location.ts
|
|
152
30
|
const toLocation = (location) => {
|
|
153
31
|
if (location == null) return void 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $t as toStableSearchInputParameterValues, A as toUnusedFilterKeys, C as parseChildrenAges, D as parseQueryParameters, E as collectQueryParameters, L as parseVofficeUnitData, O as expandCustomAttributeFilterCompositions, Qt as toStableSearchInputBackendQueryKeys, T as toQueryString, Xt as STABLE_SEARCH_INPUTS, en as toStableSearchInputQueryKeys, j as stable_filters_default, k as toCustomAttributeFilterLabel, w as parseOccupancyCount } from "./client-
|
|
1
|
+
import { $t as toStableSearchInputParameterValues, A as toUnusedFilterKeys, C as parseChildrenAges, D as parseQueryParameters, E as collectQueryParameters, L as parseVofficeUnitData, O as expandCustomAttributeFilterCompositions, Qt as toStableSearchInputBackendQueryKeys, T as toQueryString, Xt as STABLE_SEARCH_INPUTS, en as toStableSearchInputQueryKeys, j as stable_filters_default, k as toCustomAttributeFilterLabel, w as parseOccupancyCount } from "./client-DeEUMMOh.mjs";
|
|
2
2
|
import { t as CMSError } from "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { C as daysBetweenLocalDates, _ as toFormattedSearchPrice, x as toIsoDateFromPeriodQueryDate } from "./quote-CRjV_lf-.mjs";
|
|
4
|
-
import { n as toAddress, t as toRentalHighlights } from "./to-rental-highlights-
|
|
4
|
+
import { n as toImages, r as toAddress, t as toRentalHighlights } from "./to-rental-highlights-CAATPqan.mjs";
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
//#region src/adapters/v9/parser/search/input/filter/apply-voffice-filter-derived-basic-query-inputs.ts
|
|
7
7
|
const hasBasicQueryInput = ({ basicQueryInputs, key }) => basicQueryInputs.some((input) => input.key === key);
|
|
@@ -67,6 +67,10 @@ const toCustomBackendFilterInput = ({ queryKey, value, filter }) => {
|
|
|
67
67
|
value: numberValue
|
|
68
68
|
} : void 0;
|
|
69
69
|
}
|
|
70
|
+
case "string": return value.length > 0 ? {
|
|
71
|
+
key: queryKey,
|
|
72
|
+
value
|
|
73
|
+
} : void 0;
|
|
70
74
|
case "option": return filter.options.some((option) => option.value === value) ? {
|
|
71
75
|
key: queryKey,
|
|
72
76
|
value
|
|
@@ -333,7 +337,7 @@ const toFormattedPrice = ({ locale, calc }) => {
|
|
|
333
337
|
};
|
|
334
338
|
//#endregion
|
|
335
339
|
//#region src/adapters/v9/parser/search/to-search-output-item.ts
|
|
336
|
-
const toSearchOutputItem = ({ locale, rentalHighlightPrioritization, customAttributeFilterDefinitions, rental, translations, includeFormattedTotal }) => Effect.gen(function* () {
|
|
340
|
+
const toSearchOutputItem = ({ locale, imageProxyBaseUrl, rentalHighlightPrioritization, customAttributeFilterDefinitions, rental, translations, includeFormattedTotal }) => Effect.gen(function* () {
|
|
337
341
|
const data = parseVofficeUnitData(rental.data);
|
|
338
342
|
const item = {
|
|
339
343
|
id: rental.voffice_id.toString(),
|
|
@@ -342,6 +346,8 @@ const toSearchOutputItem = ({ locale, rentalHighlightPrioritization, customAttri
|
|
|
342
346
|
};
|
|
343
347
|
const address = toAddress(data, locale);
|
|
344
348
|
if (Object.keys(address).length > 0) item.address = address;
|
|
349
|
+
const images = toImages(imageProxyBaseUrl, rental, locale, data);
|
|
350
|
+
if (images.length > 0) item.images = images;
|
|
345
351
|
const highlights = yield* toRentalHighlights({
|
|
346
352
|
locale,
|
|
347
353
|
translations,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { P as VofficeUnitDataPropertyMetadata } from "./client-
|
|
1
|
+
import { P as VofficeUnitDataPropertyMetadata } from "./client-DeEUMMOh.mjs";
|
|
2
2
|
import "./errors-2cuUGSvi.mjs";
|
|
3
3
|
import { b as localeToLanguage, v as toCountry, y as makeTranslate } from "./quote-CRjV_lf-.mjs";
|
|
4
4
|
import { i as renderLabeledAttributeValue, t as renderCustomAttributeHighlight } from "./custom-attribute-D5Kb1YHA.mjs";
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
//#region src/adapters/v9/parser/rentals/to-localized-string.ts
|
|
7
|
-
const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
|
|
7
|
+
const isNonEmptyString$1 = (value) => typeof value === "string" && value.length > 0;
|
|
8
8
|
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
9
9
|
const toLocalizedString = (value, locale) => {
|
|
10
|
-
if (isNonEmptyString(value)) return value;
|
|
10
|
+
if (isNonEmptyString$1(value)) return value;
|
|
11
11
|
if (!isRecord(value)) return void 0;
|
|
12
12
|
const preferredKeys = [
|
|
13
13
|
locale,
|
|
@@ -16,9 +16,9 @@ const toLocalizedString = (value, locale) => {
|
|
|
16
16
|
];
|
|
17
17
|
for (const key of preferredKeys) {
|
|
18
18
|
const localizedValue = value[key];
|
|
19
|
-
if (isNonEmptyString(localizedValue)) return localizedValue;
|
|
19
|
+
if (isNonEmptyString$1(localizedValue)) return localizedValue;
|
|
20
20
|
}
|
|
21
|
-
return Object.values(value).find(isNonEmptyString);
|
|
21
|
+
return Object.values(value).find(isNonEmptyString$1);
|
|
22
22
|
};
|
|
23
23
|
//#endregion
|
|
24
24
|
//#region src/adapters/v9/parser/rentals/to-address.ts
|
|
@@ -38,6 +38,128 @@ const toAddress = (data, locale) => {
|
|
|
38
38
|
return address;
|
|
39
39
|
};
|
|
40
40
|
//#endregion
|
|
41
|
+
//#region src/adapters/v9/parser/rentals/to-image.ts
|
|
42
|
+
const IMAGE_ASPECT_RATIO = 3 / 2;
|
|
43
|
+
const IMAGE_SRCSET_WIDTHS = [
|
|
44
|
+
320,
|
|
45
|
+
480,
|
|
46
|
+
640,
|
|
47
|
+
960,
|
|
48
|
+
1280,
|
|
49
|
+
1920,
|
|
50
|
+
2560
|
|
51
|
+
];
|
|
52
|
+
const IMAGE_DEFAULT_WIDTH = 960;
|
|
53
|
+
const buildImageUrl = (imageProxyBaseUrl, path, width) => {
|
|
54
|
+
const base = imageProxyBaseUrl.replace(/\/$/, "");
|
|
55
|
+
const normalizedPath = path.replace(/^\/+/, "");
|
|
56
|
+
return `${base}/_/rs:fill:${width}:${Math.round(width / IMAGE_ASPECT_RATIO)}:0/plain/${normalizedPath}`;
|
|
57
|
+
};
|
|
58
|
+
const buildSrcset = (imageProxyBaseUrl, path) => IMAGE_SRCSET_WIDTHS.map((width) => `${buildImageUrl(imageProxyBaseUrl, path, width)} ${width}w`).join(", ");
|
|
59
|
+
const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
|
|
60
|
+
const toDataImageId = (dataImage) => dataImage?.id?.toString();
|
|
61
|
+
const getImagePath = (entry) => entry.image?.path ?? entry.normalizedPath;
|
|
62
|
+
const getFileName = (path) => path?.split("/").at(-1);
|
|
63
|
+
const getDirectoryName = (path) => {
|
|
64
|
+
const lastSlashIndex = path.lastIndexOf("/");
|
|
65
|
+
return lastSlashIndex === -1 ? void 0 : path.slice(0, lastSlashIndex);
|
|
66
|
+
};
|
|
67
|
+
const stripDataImageFilePrefix = (fileName) => fileName.replace(/^mf(?=\d)/i, "");
|
|
68
|
+
const getDataImageFileName = (dataImage) => {
|
|
69
|
+
const name = dataImage.name != null ? stripDataImageFilePrefix(dataImage.name) : void 0;
|
|
70
|
+
if (name != null) return name;
|
|
71
|
+
return dataImage.id != null ? `${dataImage.id}.jpg` : void 0;
|
|
72
|
+
};
|
|
73
|
+
const normalizeDataImagePath = (dataImage, vofficeImages) => {
|
|
74
|
+
const fileName = getDataImageFileName(dataImage);
|
|
75
|
+
if (fileName == null) return void 0;
|
|
76
|
+
const matchingPath = vofficeImages.find((image) => getFileName(image.path ?? void 0) === fileName)?.path;
|
|
77
|
+
if (matchingPath != null) return matchingPath;
|
|
78
|
+
const directoryName = vofficeImages.map((image) => image.path != null ? getDirectoryName(image.path) : void 0).find((path) => path != null);
|
|
79
|
+
return directoryName != null ? `${directoryName}/${fileName}` : void 0;
|
|
80
|
+
};
|
|
81
|
+
const pathMatchesName = (path, name) => path != null && name != null && (path === name || path.endsWith(`/${name}`));
|
|
82
|
+
const entriesShareId = (left, right) => {
|
|
83
|
+
const leftIds = [left.image?.id, toDataImageId(left.dataImage)].filter(isNonEmptyString);
|
|
84
|
+
const rightIds = [right.image?.id, toDataImageId(right.dataImage)].filter(isNonEmptyString);
|
|
85
|
+
return leftIds.some((leftId) => rightIds.includes(leftId));
|
|
86
|
+
};
|
|
87
|
+
const entriesSharePathOrName = (left, right) => {
|
|
88
|
+
const leftPath = getImagePath(left);
|
|
89
|
+
const rightPath = getImagePath(right);
|
|
90
|
+
const leftName = left.dataImage != null ? getDataImageFileName(left.dataImage) : getFileName(left.image?.path ?? void 0);
|
|
91
|
+
const rightName = right.dataImage != null ? getDataImageFileName(right.dataImage) : getFileName(right.image?.path ?? void 0);
|
|
92
|
+
return leftPath != null && rightPath != null && leftPath === rightPath || pathMatchesName(leftPath, rightName) || pathMatchesName(rightPath, leftName);
|
|
93
|
+
};
|
|
94
|
+
const entriesMatch = (left, right) => entriesShareId(left, right) || entriesSharePathOrName(left, right);
|
|
95
|
+
const mergeEntry = (existing, next) => {
|
|
96
|
+
const image = existing.image ?? next.image;
|
|
97
|
+
const dataImage = existing.dataImage ?? next.dataImage;
|
|
98
|
+
const normalizedPath = existing.normalizedPath ?? next.normalizedPath;
|
|
99
|
+
const entry = { source: existing.source };
|
|
100
|
+
if (image != null) entry.image = image;
|
|
101
|
+
if (dataImage != null) entry.dataImage = dataImage;
|
|
102
|
+
if (normalizedPath != null) entry.normalizedPath = normalizedPath;
|
|
103
|
+
return entry;
|
|
104
|
+
};
|
|
105
|
+
const mergeImageEntries = (entries) => {
|
|
106
|
+
const merged = [];
|
|
107
|
+
for (const entry of entries) {
|
|
108
|
+
const index = merged.findIndex((existing) => entriesMatch(existing, entry));
|
|
109
|
+
if (index === -1) {
|
|
110
|
+
merged.push(entry);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
merged[index] = mergeEntry(merged[index], entry);
|
|
114
|
+
}
|
|
115
|
+
return merged;
|
|
116
|
+
};
|
|
117
|
+
const getImageEntries = (rental, data) => {
|
|
118
|
+
const vofficeImages = rental.voffice_images ?? [];
|
|
119
|
+
return [
|
|
120
|
+
...vofficeImages.map((image) => ({
|
|
121
|
+
source: "voffice_images",
|
|
122
|
+
image
|
|
123
|
+
})),
|
|
124
|
+
...(rental.voffice_room_images ?? []).map((image) => ({
|
|
125
|
+
source: "voffice_room_images",
|
|
126
|
+
image
|
|
127
|
+
})),
|
|
128
|
+
...(data.known.images ?? []).flatMap((dataImage) => {
|
|
129
|
+
const normalizedPath = normalizeDataImagePath(dataImage, vofficeImages);
|
|
130
|
+
if (normalizedPath == null) return [];
|
|
131
|
+
return [{
|
|
132
|
+
source: "data_images",
|
|
133
|
+
dataImage,
|
|
134
|
+
normalizedPath
|
|
135
|
+
}];
|
|
136
|
+
})
|
|
137
|
+
];
|
|
138
|
+
};
|
|
139
|
+
const toImage = (imageProxyBaseUrl, entry, locale) => {
|
|
140
|
+
const path = getImagePath(entry);
|
|
141
|
+
const src = path != null ? buildImageUrl(imageProxyBaseUrl, path, IMAGE_DEFAULT_WIDTH) : "";
|
|
142
|
+
const srcset = path != null ? buildSrcset(imageProxyBaseUrl, path) : "";
|
|
143
|
+
const title = toLocalizedString(entry.dataImage?.titles, locale) ?? entry.image?.title;
|
|
144
|
+
const alt = title ?? entry.image?.description ?? "";
|
|
145
|
+
const metadata = { source: entry.source };
|
|
146
|
+
if (entry.dataImage != null) metadata.dataImage = entry.dataImage;
|
|
147
|
+
const image = {
|
|
148
|
+
idOrPath: path ?? toDataImageId(entry.dataImage) ?? entry.dataImage?.name ?? "",
|
|
149
|
+
src,
|
|
150
|
+
srcset,
|
|
151
|
+
alt,
|
|
152
|
+
metadata
|
|
153
|
+
};
|
|
154
|
+
if (title != null) image.title = title;
|
|
155
|
+
if (entry.dataImage?.tag != null) image.category = entry.dataImage.tag;
|
|
156
|
+
return image;
|
|
157
|
+
};
|
|
158
|
+
const toImages = (imageProxyBaseUrl, rental, locale, data) => {
|
|
159
|
+
if (rental.voffice_images == null || rental.voffice_images.length === 0) return [];
|
|
160
|
+
return mergeImageEntries(getImageEntries(rental, data)).map((entry) => toImage(imageProxyBaseUrl, entry, locale));
|
|
161
|
+
};
|
|
162
|
+
//#endregion
|
|
41
163
|
//#region scripts/v9/heuristic-generation/rental-highlight-key-map.ts
|
|
42
164
|
const V9_RENTAL_HIGHLIGHT_KEYS = new Set(Object.keys(VofficeUnitDataPropertyMetadata));
|
|
43
165
|
const V9_RENTAL_HIGHLIGHT_KEY_LOOKUP = {
|
|
@@ -399,4 +521,4 @@ const toRentalHighlights = ({ locale, translations, highlightPrioritization, cus
|
|
|
399
521
|
return highlights;
|
|
400
522
|
});
|
|
401
523
|
//#endregion
|
|
402
|
-
export {
|
|
524
|
+
export { toLocalizedString as i, toImages as n, toAddress as r, toRentalHighlights as t };
|