riverbankcms 0.28.1 → 0.29.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/dist/acceptance/matrix.mjs +3 -3
- package/dist/cli/index.mjs +1139 -1700
- package/dist/{entryCommands-CrfobcW7.mjs → entryCommands-5kz7nIFG.mjs} +139 -29
- package/dist/{eventUpsertInputSchema-R2GbOsj2.mjs → eventUpsertInputSchema-DEN6k1oM.mjs} +2 -3
- package/dist/load-config-DkoaFO1t.mjs +4 -0
- package/dist/{load-config-DTbiJyCf.mjs → load-config-JcidEUjc.mjs} +2 -2
- package/dist/{plan-DJfyedxU.mjs → plan-BppGb0gS.mjs} +1 -1
- package/dist/scaffold/index.mjs +2 -2
- package/dist/{sdk-event-upsert-4Dn75Ui9.mjs → sdk-event-upsert-CXc13KPT.mjs} +6832 -597
- package/dist/{src-nzVzuMR1.mjs → src-4CBCWovR.mjs} +119 -127
- package/dist/testing.mjs +4 -4
- package/package.json +1 -1
- package/dist/load-config-BB5L2u1y.mjs +0 -4
|
@@ -3462,6 +3462,16 @@ const locationAddressSchema = z.strictObject({
|
|
|
3462
3462
|
postalCode: addressPart,
|
|
3463
3463
|
country: addressPart.transform((value) => value?.length === 2 ? value.toUpperCase() : value)
|
|
3464
3464
|
}).readonly().transform((address) => Object.values(address).some((part) => part !== null) ? address : null);
|
|
3465
|
+
/** Town, then county, then a complete UK postcode's outward half. Never geocodes. */
|
|
3466
|
+
function deriveLocationArea(address) {
|
|
3467
|
+
if (address === null) return null;
|
|
3468
|
+
const namedArea = [address.locality, address.region].map(trimmedStringOrNull).find((part) => part !== null);
|
|
3469
|
+
if (namedArea !== undefined) return namedArea;
|
|
3470
|
+
if (address.country !== null && !sameLocationCountry(address.country, "GB")) return null;
|
|
3471
|
+
const postcode = address.postalCode?.trim().toUpperCase() ?? "";
|
|
3472
|
+
const match = /^((?:[A-PR-UWYZ][0-9][0-9A-HJKPSTUW]?|[A-PR-UWYZ][A-HK-Y][0-9][0-9ABEHMNPRVWXY]?)|GIR)\s*[0-9][ABD-HJLNP-UW-Z]{2}$/.exec(postcode);
|
|
3473
|
+
return match?.[1] ?? null;
|
|
3474
|
+
}
|
|
3465
3475
|
const locationAddressMatchSchema = z.strictObject({
|
|
3466
3476
|
point: locationPinSchema,
|
|
3467
3477
|
precision: z.enum([
|
|
@@ -3601,6 +3611,52 @@ function resolvePermittedLocation(permission, location, siteCountry) {
|
|
|
3601
3611
|
};
|
|
3602
3612
|
}
|
|
3603
3613
|
|
|
3614
|
+
//#endregion
|
|
3615
|
+
//#region ../core/src/venue-location.ts
|
|
3616
|
+
/**
|
|
3617
|
+
* Release 1 gate: anon can still read the legacy address columns until release 2's migration,
|
|
3618
|
+
* so "Only people who've booked" isn't offered or accepted yet. Release 2 deletes this.
|
|
3619
|
+
*/
|
|
3620
|
+
const BOOKED_ONLY_VENUE_ADDRESS_AVAILABLE = false;
|
|
3621
|
+
const venueLocationAudience = Symbol("venue-location-audience");
|
|
3622
|
+
/** Eligibility to read the venue is decided by the resource owner before disclosure. */
|
|
3623
|
+
function decidePublicVenueLocation(venue, siteCountry) {
|
|
3624
|
+
const audience = { [venueLocationAudience]: "public" };
|
|
3625
|
+
if (venue.location === null) return {
|
|
3626
|
+
...audience,
|
|
3627
|
+
kind: "none",
|
|
3628
|
+
name: venue.name
|
|
3629
|
+
};
|
|
3630
|
+
if (venue.addressVisibility === "booked") {
|
|
3631
|
+
return {
|
|
3632
|
+
...audience,
|
|
3633
|
+
kind: "area",
|
|
3634
|
+
name: venue.name,
|
|
3635
|
+
area: deriveLocationArea(venue.location.address)
|
|
3636
|
+
};
|
|
3637
|
+
}
|
|
3638
|
+
return {
|
|
3639
|
+
...audience,
|
|
3640
|
+
kind: "full",
|
|
3641
|
+
name: venue.name,
|
|
3642
|
+
...projectPublicLocation(venue.location, siteCountry)
|
|
3643
|
+
};
|
|
3644
|
+
}
|
|
3645
|
+
/** Caller must already hold confirmed-booking or staff authorisation. */
|
|
3646
|
+
function decideArrivalVenueLocation(venue, siteCountry) {
|
|
3647
|
+
const audience = { [venueLocationAudience]: "arrival" };
|
|
3648
|
+
return venue.location === null ? {
|
|
3649
|
+
...audience,
|
|
3650
|
+
kind: "none",
|
|
3651
|
+
name: venue.name
|
|
3652
|
+
} : {
|
|
3653
|
+
...audience,
|
|
3654
|
+
kind: "full",
|
|
3655
|
+
name: venue.name,
|
|
3656
|
+
...projectPublicLocation(venue.location, siteCountry)
|
|
3657
|
+
};
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3604
3660
|
//#endregion
|
|
3605
3661
|
//#region ../core/src/locationLinks.ts
|
|
3606
3662
|
/** Both outbound actions use the arrival pin, never match evidence. */
|
|
@@ -3767,65 +3823,21 @@ function planLocationOpeningEvidence(previous, evidence) {
|
|
|
3767
3823
|
}
|
|
3768
3824
|
|
|
3769
3825
|
//#endregion
|
|
3770
|
-
//#region ../core/src/location-
|
|
3771
|
-
/**
|
|
3772
|
-
const
|
|
3773
|
-
const
|
|
3826
|
+
//#region ../core/src/location-conversion.ts
|
|
3827
|
+
/** Shared by the business address input and the offline location data migration. */
|
|
3828
|
+
const conversionText = z.string().nullable().optional();
|
|
3829
|
+
const conversionCoordinatesSchema = z.strictObject({
|
|
3774
3830
|
lat: z.number().min(-90).max(90).nullable().optional(),
|
|
3775
3831
|
lng: z.number().min(-180).max(180).nullable().optional()
|
|
3776
3832
|
}).superRefine((value, context) => {
|
|
3777
3833
|
if (value.lat == null !== (value.lng == null)) {
|
|
3778
3834
|
context.addIssue({
|
|
3779
3835
|
code: "custom",
|
|
3780
|
-
message: "
|
|
3836
|
+
message: "The pin is incomplete."
|
|
3781
3837
|
});
|
|
3782
3838
|
}
|
|
3783
3839
|
});
|
|
3784
|
-
|
|
3785
|
-
street: legacyText,
|
|
3786
|
-
line1: legacyText,
|
|
3787
|
-
line2: legacyText,
|
|
3788
|
-
city: legacyText,
|
|
3789
|
-
state: legacyText,
|
|
3790
|
-
region: legacyText,
|
|
3791
|
-
postalCode: legacyText,
|
|
3792
|
-
postal_code: legacyText,
|
|
3793
|
-
postcode: legacyText,
|
|
3794
|
-
country: legacyText,
|
|
3795
|
-
formatted: legacyText,
|
|
3796
|
-
summary: legacyText
|
|
3797
|
-
}).superRefine((value, context) => {
|
|
3798
|
-
const aliases = [
|
|
3799
|
-
[value.street, value.line1],
|
|
3800
|
-
[value.state, value.region],
|
|
3801
|
-
[
|
|
3802
|
-
value.postalCode,
|
|
3803
|
-
value.postal_code,
|
|
3804
|
-
value.postcode
|
|
3805
|
-
],
|
|
3806
|
-
[value.formatted, value.summary]
|
|
3807
|
-
];
|
|
3808
|
-
aliases.forEach((parts) => {
|
|
3809
|
-
const meaningful = parts.filter((part) => displayComparison(part) !== "");
|
|
3810
|
-
if (meaningful.some((part) => displayComparison(part) !== displayComparison(meaningful[0]))) {
|
|
3811
|
-
context.addIssue({
|
|
3812
|
-
code: "custom",
|
|
3813
|
-
message: "Legacy address aliases disagree."
|
|
3814
|
-
});
|
|
3815
|
-
}
|
|
3816
|
-
});
|
|
3817
|
-
}).nullable();
|
|
3818
|
-
const businessAddressSchema = legacyCoordinatesSchema.safeExtend({
|
|
3819
|
-
addressLine1: legacyText,
|
|
3820
|
-
addressLine2: legacyText,
|
|
3821
|
-
locality: legacyText,
|
|
3822
|
-
region: legacyText,
|
|
3823
|
-
postalCode: legacyText,
|
|
3824
|
-
countryCode: legacyText,
|
|
3825
|
-
displayAddress: legacyText
|
|
3826
|
-
});
|
|
3827
|
-
const customLocationSchema = legacyCoordinatesSchema.safeExtend({ addressText: legacyText });
|
|
3828
|
-
function finishConversion(address, coordinates) {
|
|
3840
|
+
function finishLocationConversion(address, coordinates) {
|
|
3829
3841
|
const parsedAddress = locationAddressSchema.nullable().safeParse(address);
|
|
3830
3842
|
if (!parsedAddress.success) return err({
|
|
3831
3843
|
kind: "invalid_legacy_location",
|
|
@@ -3847,34 +3859,6 @@ function finishConversion(address, coordinates) {
|
|
|
3847
3859
|
issues: result.error.issues
|
|
3848
3860
|
});
|
|
3849
3861
|
}
|
|
3850
|
-
function convertVenue(input) {
|
|
3851
|
-
const address = venueAddressSchema.safeParse(input.addressJson ?? null);
|
|
3852
|
-
const coordinates = legacyCoordinatesSchema.safeParse(input.locationJson ?? {});
|
|
3853
|
-
if (!address.success) return err({
|
|
3854
|
-
kind: "invalid_legacy_location",
|
|
3855
|
-
issues: address.error.issues
|
|
3856
|
-
});
|
|
3857
|
-
if (!coordinates.success) return err({
|
|
3858
|
-
kind: "invalid_legacy_location",
|
|
3859
|
-
issues: coordinates.error.issues
|
|
3860
|
-
});
|
|
3861
|
-
const result = finishConversion(mapVenueAddress(address.data), coordinates.data);
|
|
3862
|
-
return checkDisplayText(result, firstText(address.data?.formatted, address.data?.summary));
|
|
3863
|
-
}
|
|
3864
|
-
const displayComparison = (text) => (text ?? "").trim().replace(/\s+/g, " ").toLowerCase();
|
|
3865
|
-
const firstText = (...parts) => parts.find((part) => part != null && part.trim().length > 0)?.trim() ?? null;
|
|
3866
|
-
function mapVenueAddress(address) {
|
|
3867
|
-
if (address === null) return null;
|
|
3868
|
-
const structured = {
|
|
3869
|
-
street: firstText(address.street, address.line1),
|
|
3870
|
-
unit: address.line2,
|
|
3871
|
-
locality: address.city,
|
|
3872
|
-
region: firstText(address.state, address.region),
|
|
3873
|
-
postalCode: firstText(address.postalCode, address.postal_code, address.postcode),
|
|
3874
|
-
country: address.country
|
|
3875
|
-
};
|
|
3876
|
-
return Object.values(structured).some((part) => displayComparison(part) !== "") ? structured : { street: firstText(address.formatted, address.summary) };
|
|
3877
|
-
}
|
|
3878
3862
|
const displayTokens = (text) => (text ?? "").toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? [];
|
|
3879
3863
|
/** Only redundant trailing country text is disposable; ordered address words must all survive. */
|
|
3880
3864
|
function comparableDisplay(text, countries) {
|
|
@@ -3882,7 +3866,8 @@ function comparableDisplay(text, countries) {
|
|
|
3882
3866
|
const suffixIndex = tokens.findIndex((_token, index) => countries.some((country) => sameLocationCountry(tokens.slice(index).join(" "), country)));
|
|
3883
3867
|
return (suffixIndex < 0 ? tokens : tokens.slice(0, suffixIndex)).join(" ");
|
|
3884
3868
|
}
|
|
3885
|
-
|
|
3869
|
+
/** Refuses a conversion whose formatted address loses words from the stored display text. */
|
|
3870
|
+
function checkConvertedDisplayText(result, text, siteCountry) {
|
|
3886
3871
|
if (!result.ok) return result;
|
|
3887
3872
|
const original = text?.trim() ?? "";
|
|
3888
3873
|
const derived = formatLocationAddress(result.value?.address ?? null);
|
|
@@ -3893,39 +3878,6 @@ function checkDisplayText(result, text, siteCountry) {
|
|
|
3893
3878
|
derived
|
|
3894
3879
|
}) : result;
|
|
3895
3880
|
}
|
|
3896
|
-
function convertBusiness(value, siteCountry) {
|
|
3897
|
-
if (value == null) return ok(null);
|
|
3898
|
-
const parsed = businessAddressSchema.safeParse(value);
|
|
3899
|
-
if (!parsed.success) return err({
|
|
3900
|
-
kind: "invalid_legacy_location",
|
|
3901
|
-
issues: parsed.error.issues
|
|
3902
|
-
});
|
|
3903
|
-
const result = finishConversion({
|
|
3904
|
-
street: parsed.data.addressLine1,
|
|
3905
|
-
unit: parsed.data.addressLine2,
|
|
3906
|
-
locality: parsed.data.locality,
|
|
3907
|
-
region: parsed.data.region,
|
|
3908
|
-
postalCode: parsed.data.postalCode,
|
|
3909
|
-
country: parsed.data.countryCode
|
|
3910
|
-
}, parsed.data);
|
|
3911
|
-
return checkDisplayText(result, parsed.data.displayAddress, siteCountry);
|
|
3912
|
-
}
|
|
3913
|
-
function convertCustom(value) {
|
|
3914
|
-
if (value == null) return ok(null);
|
|
3915
|
-
const parsed = customLocationSchema.safeParse(value);
|
|
3916
|
-
return parsed.success ? finishConversion({ street: parsed.data.addressText }, parsed.data) : err({
|
|
3917
|
-
kind: "invalid_legacy_location",
|
|
3918
|
-
issues: parsed.error.issues
|
|
3919
|
-
});
|
|
3920
|
-
}
|
|
3921
|
-
/** Preserve pins exactly; never split free text or fabricate match evidence. */
|
|
3922
|
-
function convertLegacyLocation(input) {
|
|
3923
|
-
switch (input.kind) {
|
|
3924
|
-
case "venue": return convertVenue(input);
|
|
3925
|
-
case "business": return convertBusiness(input.value, input.siteCountry);
|
|
3926
|
-
case "custom": return convertCustom(input.value);
|
|
3927
|
-
}
|
|
3928
|
-
}
|
|
3929
3881
|
|
|
3930
3882
|
//#endregion
|
|
3931
3883
|
//#region ../core/src/business-address.ts
|
|
@@ -4054,10 +4006,7 @@ function editBusinessPin(previous, address) {
|
|
|
4054
4006
|
}) : err({ kind: "invalid_location" });
|
|
4055
4007
|
}
|
|
4056
4008
|
function convertLegacyBusinessEdit(previous, address) {
|
|
4057
|
-
const converted =
|
|
4058
|
-
kind: "business",
|
|
4059
|
-
value: address
|
|
4060
|
-
});
|
|
4009
|
+
const converted = businessAddressToLocation(address);
|
|
4061
4010
|
if (!converted.ok || converted.value === null) return converted;
|
|
4062
4011
|
return editLocationValue(previous, {
|
|
4063
4012
|
address: converted.value.address,
|
|
@@ -4092,6 +4041,32 @@ function businessPinErrors(lat, lng) {
|
|
|
4092
4041
|
const longitude = lng === null ? ["missing_longitude"] : !isLongitude(lng) ? ["invalid_longitude"] : [];
|
|
4093
4042
|
return [...latitude, ...longitude];
|
|
4094
4043
|
}
|
|
4044
|
+
const businessAddressSchema = conversionCoordinatesSchema.safeExtend({
|
|
4045
|
+
addressLine1: conversionText,
|
|
4046
|
+
addressLine2: conversionText,
|
|
4047
|
+
locality: conversionText,
|
|
4048
|
+
region: conversionText,
|
|
4049
|
+
postalCode: conversionText,
|
|
4050
|
+
countryCode: conversionText,
|
|
4051
|
+
displayAddress: conversionText
|
|
4052
|
+
});
|
|
4053
|
+
function businessAddressToLocation(value, siteCountry) {
|
|
4054
|
+
if (value == null) return ok(null);
|
|
4055
|
+
const parsed = businessAddressSchema.safeParse(value);
|
|
4056
|
+
if (!parsed.success) return err({
|
|
4057
|
+
kind: "invalid_legacy_location",
|
|
4058
|
+
issues: parsed.error.issues
|
|
4059
|
+
});
|
|
4060
|
+
const result = finishLocationConversion({
|
|
4061
|
+
street: parsed.data.addressLine1,
|
|
4062
|
+
unit: parsed.data.addressLine2,
|
|
4063
|
+
locality: parsed.data.locality,
|
|
4064
|
+
region: parsed.data.region,
|
|
4065
|
+
postalCode: parsed.data.postalCode,
|
|
4066
|
+
country: parsed.data.countryCode
|
|
4067
|
+
}, parsed.data);
|
|
4068
|
+
return checkConvertedDisplayText(result, parsed.data.displayAddress, siteCountry);
|
|
4069
|
+
}
|
|
4095
4070
|
|
|
4096
4071
|
//#endregion
|
|
4097
4072
|
//#region ../core/src/try-async.ts
|
|
@@ -6010,30 +5985,34 @@ const centredSectionKinds = [
|
|
|
6010
5985
|
"opening-hours",
|
|
6011
5986
|
"social-links",
|
|
6012
5987
|
"engagement",
|
|
6013
|
-
"legal",
|
|
6014
|
-
"legal
|
|
5988
|
+
"legal-navigation",
|
|
5989
|
+
"legal"
|
|
6015
5990
|
];
|
|
6016
5991
|
/** Section ownership is exhaustive for both arrangements; content never changes placement. */
|
|
6017
5992
|
const rowSectionGroups = {
|
|
6018
5993
|
brand: "identity",
|
|
6019
5994
|
"supporting-text": "identity",
|
|
6020
|
-
"social-links": "
|
|
5995
|
+
"social-links": "contact",
|
|
6021
5996
|
navigation: "main-navigation",
|
|
6022
5997
|
"business-address": "visit",
|
|
6023
|
-
contact: "
|
|
6024
|
-
"opening-hours": "
|
|
5998
|
+
contact: "contact",
|
|
5999
|
+
"opening-hours": "hours",
|
|
6025
6000
|
engagement: "engagement",
|
|
6026
6001
|
"legal-navigation": "legal-ending",
|
|
6027
6002
|
legal: "legal-ending"
|
|
6028
6003
|
};
|
|
6029
6004
|
const centredSectionGroups = {
|
|
6030
6005
|
...rowSectionGroups,
|
|
6006
|
+
contact: "visit",
|
|
6007
|
+
"opening-hours": "visit",
|
|
6031
6008
|
"social-links": "social"
|
|
6032
6009
|
};
|
|
6033
6010
|
const rowGroupOrder = [
|
|
6034
6011
|
"identity",
|
|
6035
6012
|
"main-navigation",
|
|
6036
6013
|
"visit",
|
|
6014
|
+
"hours",
|
|
6015
|
+
"contact",
|
|
6037
6016
|
"engagement",
|
|
6038
6017
|
"legal-ending"
|
|
6039
6018
|
];
|
|
@@ -6049,6 +6028,8 @@ const groupSlots = {
|
|
|
6049
6028
|
identity: "head",
|
|
6050
6029
|
"main-navigation": "navigation",
|
|
6051
6030
|
visit: "contact",
|
|
6031
|
+
hours: "contact",
|
|
6032
|
+
contact: "contact",
|
|
6052
6033
|
social: "social",
|
|
6053
6034
|
engagement: "panel",
|
|
6054
6035
|
"legal-ending": "base"
|
|
@@ -6063,20 +6044,25 @@ function footerArrangementPolicy(input) {
|
|
|
6063
6044
|
const arrangement = input.arrangement ?? "simple";
|
|
6064
6045
|
return {
|
|
6065
6046
|
arrangement,
|
|
6066
|
-
kind: arrangement === "centred" || input.legalRegion === "separate" ? "separate-legal-region" : "integrated-legal",
|
|
6067
6047
|
navigationLayout: effectiveFooterNavigationLayout(arrangement, normalizeFooterNavigationLayout(input.storedNavigationLayout))
|
|
6068
6048
|
};
|
|
6069
6049
|
}
|
|
6050
|
+
/** Address and hours pair up only in row arrangements, and only when both have content. */
|
|
6051
|
+
function placementFor(kind, sections, policy) {
|
|
6052
|
+
if (kind === "engagement" || kind === "main-navigation" && policy.navigationLayout === "inline-wrap") return "full-row";
|
|
6053
|
+
const paired = policy.arrangement !== "centred" && (kind === "visit" || kind === "hours") && sections.some((section) => section.kind === "business-address") && sections.some((section) => section.kind === "opening-hours");
|
|
6054
|
+
return paired ? "paired-column" : "column";
|
|
6055
|
+
}
|
|
6070
6056
|
function buildGroups(sections, policy) {
|
|
6071
6057
|
const centred = policy.arrangement === "centred";
|
|
6072
6058
|
const order = centred ? centredGroupOrder : rowGroupOrder;
|
|
6073
6059
|
const owners = centred ? centredSectionGroups : rowSectionGroups;
|
|
6074
|
-
const sectionOrder = centred ? centredSectionKinds : sectionKinds;
|
|
6060
|
+
const sectionOrder = centred ? centredSectionKinds : [...sectionKinds.filter((kind) => kind !== "social-links"), "social-links"];
|
|
6075
6061
|
return order.flatMap((kind) => {
|
|
6076
6062
|
const groupSections = sections.filter((section) => owners[section.kind] === kind).sort((left, right) => sectionOrder.indexOf(left.kind) - sectionOrder.indexOf(right.kind));
|
|
6077
6063
|
return groupSections.length === 0 ? [] : [{
|
|
6078
6064
|
kind,
|
|
6079
|
-
|
|
6065
|
+
placement: placementFor(kind, sections, policy),
|
|
6080
6066
|
sections: groupSections,
|
|
6081
6067
|
...centred ? { slot: groupSlots[kind] } : {}
|
|
6082
6068
|
}];
|
|
@@ -6091,7 +6077,7 @@ function footerMembershipKey(sections) {
|
|
|
6091
6077
|
}
|
|
6092
6078
|
function renderRegion(kind, groups, policy) {
|
|
6093
6079
|
if (groups.length === 0) return [];
|
|
6094
|
-
const columns = kind !== "main" || policy.arrangement === "centred" ? 1 : Math.max(1, Math.min(groups.filter((group) => group.
|
|
6080
|
+
const columns = kind !== "main" || policy.arrangement === "centred" ? 1 : Math.max(1, Math.min(groups.filter((group) => group.placement !== "full-row").length, 5));
|
|
6095
6081
|
return [{
|
|
6096
6082
|
kind,
|
|
6097
6083
|
columns,
|
|
@@ -6104,9 +6090,9 @@ function planFooterArrangement(renderableSections, policy) {
|
|
|
6104
6090
|
const groups = buildGroups(selectedSections, policy);
|
|
6105
6091
|
const separateEngagement = groups.filter((group) => group.kind === "engagement" && group.sections.some((section) => section.kind === "engagement" && section.treatment === "separate-row"));
|
|
6106
6092
|
const layoutGroups = groups.filter((group) => !separateEngagement.includes(group));
|
|
6107
|
-
const legalGroups =
|
|
6093
|
+
const legalGroups = layoutGroups.filter((group) => group.kind === "legal-ending");
|
|
6108
6094
|
const unsortedMainGroups = layoutGroups.filter((group) => !legalGroups.includes(group));
|
|
6109
|
-
const mainGroups = policy.arrangement === "centred" ? unsortedMainGroups : [...unsortedMainGroups.filter((group) => group.
|
|
6095
|
+
const mainGroups = policy.arrangement === "centred" ? unsortedMainGroups : [...unsortedMainGroups.filter((group) => group.placement !== "full-row"), ...unsortedMainGroups.filter((group) => group.placement === "full-row")];
|
|
6110
6096
|
return {
|
|
6111
6097
|
membershipKey: footerMembershipKey(selectedSections),
|
|
6112
6098
|
regions: [
|
|
@@ -10547,6 +10533,12 @@ const OFFLINE_PAYMENT_METHODS = [
|
|
|
10547
10533
|
"card_machine",
|
|
10548
10534
|
"other"
|
|
10549
10535
|
];
|
|
10536
|
+
const OFFLINE_PAYMENT_METHOD_LABELS = {
|
|
10537
|
+
cash: "Cash",
|
|
10538
|
+
bank_transfer: "Bank transfer",
|
|
10539
|
+
card_machine: "Card machine",
|
|
10540
|
+
other: "Other"
|
|
10541
|
+
};
|
|
10550
10542
|
|
|
10551
10543
|
//#endregion
|
|
10552
10544
|
export { locationValueSchema as $, parseEventSeriesId as $n, publicEventPricingDisplay as $t, parseMailingListContentVersionId as A, parseMediaAssetId as An, parseBookingTimeZone as At, footerNavigationLayouts as B, unsafeAsStorageBucketName as Bn, getBookingInstalmentDepositRefundability as Bt, resolveWholeSeriesBookingPhase as C, parseSiteTermsVersionId as Cn, getLocalScheduleTime as Ct, parseManagementKey as D, parseDatedOfferingCapacityHoldAuditRef as Dn, resolveBookingBusinessTimeZone as Dt, exposeSecret as E, unsafeAsPassId as En, parseLocalScheduleTime as Et, parseMailingListGlobalForm as F, unsafeAsOriginalFilename as Fn, isLiveOrderInstalmentPlanStatus as Ft, formatOpeningHoursRows as G, parseEditorSessionGeneration as Gn, resolveFlexibleBalanceDueAt as Gt, DEFAULT_MAILING_LIST_TARGETING as H, unsafeAsUploadSessionId as Hn, getBookingInstalmentProtectedDepositAmountCents as Ht, DEFAULT_MAILING_LIST_PRIVACY_NOTE as I, unsafeAsPositiveByteCount as In, isSettleableFlexibleBalanceContractStatus as It, assertAllowedPublicUrl as J, parseApiKeyId as Jn, parseEventPageSurfaceSubject as Jt, parsePublicContactDetails as K, parsePageId as Kn, resolveFlexibleBalanceInitialPaymentCents as Kt, DEFAULT_MAILING_LIST_SUCCESS_MESSAGE as L, unsafeAsPositiveSeconds as Ln, isSettleableOrderInstalmentPlanStatus as Lt, parseMailingListRuntimeContext as M, unsafeAsDetectedMimeType as Mn, toUtcIsoDateTimeString as Mt, assessMailingListTargeting as N, unsafeAsFileChecksumSha256 as Nn, BOOKING_COURSE_INSTALMENT_DEADLINES as Nt, slugify as O, parseDatedOfferingCapacityHoldId as On, resolveBookingTimeZoneId as Ot, parseConfiguredMailingListProvider as P, unsafeAsMediaAssetId as Pn, validateBookingPaymentOptionKinds as Pt, locationMapLinks as Q, unsafeAsUserId as Qn, publicEventPricingCurrency as Qt, parseMailingListProviderScope as R, unsafeAsSafeDownloadFilename as Rn, addIntervalPreservingMonthAnchor as Rt, orderedLiveRunSessions as S, parseCustomerId as Sn, getLocalScheduleDate as St, createSecret as T, unsafeAsEntitlementId as Tn, parseBookingLocalDate as Tt, planMailingListChoicePresentation as U, unsafeAsProductId as Un, omitZeroAmountFutureRows as Ut, parseMailingListPlacementTargeting as V, unsafeAsStoragePath as Vn, getBookingInstalmentPlanIntervalCount as Vt, isCanonicalRichTextDoc as W, unsafeAsCheckoutLineId as Wn, splitAmountWithRemainderInFirst as Wt, decideLocationSave as X, parseUserId as Xn, formatEventPricing as Xt, SENSITIVE_COLLECTION_MODES as Y, parseSiteId as Yn, formatBookingPriceDisplay as Yt, stableJsonStringify as Z, unsafeAsSiteId as Zn, isPublicEventPricingOptionDisplayable as Zt, WHOLE_SERIES_EVENT_PRESET_VALUES as _, formatDurationUnitLabel as _n, buildBookingUtcDateWindow as _t, resolveEventCatalogue as a, mapNonEmptyArray as an, unsafeAsPricingOptionId as ar, isPresent as at, CANCELLED_SESSION_STATUS as b, unsafeAsAppointmentResourceId as bn, formatLocalScheduleTime as bt, areConfiguredBookingVerticalConfigsEqual as c, parseNonNegativeCents as cn, blockInteractionContextSchema as cr, formatDate as ct, parseVerticalPresetId as d, toNonNegativeCents as dn, formatDateTimeRange as dt, publicEventPricingOptions as en, parseRetiredCourseId as er, normalizeLocationAddressText as et, resolveSiteVerticalBookingConfig as f, unsafeAsNonNegativeCents as fn, formatTime as ft, SURFACE_EVENT_PRESET_VALUES as g, assertNever as gn, toScheduledBookingDateTime as gt, ORDINARY_EVENT_PRESET_VALUES as h, parseCurrencyCode as hn, resolveBookingDisplayContext as ht, authoredValuesEqual as i, fromArray as in, unsafeAsOccurrenceId as ir, toLocationCoordinates as it, parseMailingListSignedSourceToken as j, unsafeAsDeclaredMimeType as jn, parseUtcIsoDateTimeString as jt, parseMailingListBlockId as k, unsafeAsBookingSessionId as kn, toBookingTimeZone as kt, canonicalizeConfiguredBookingVerticalConfig as l, parsePositiveCents as ln, formatDateRange as lt, EVENT_PRESET_VALUES as m, formatCurrencyAmount as mn, inferSiteDateLocale as mt, committedWriteProofSchema as n, resolveExactOrFreePriceDisplay as nn, unsafeAsEventOfferingId as nr, projectPublicLocation as nt, EVENT_PRESET_VOCABULARY as o, mapReadonlyNonEmptyArray as on, err as or, mapDrawingSchema as ot, DEFAULT_EVENT_TYPE_PRESETS as p, unsafeAsPositiveCents as pn, formatTimeRange as pt, parseWeeklyOpeningHours as q, unsafeAsSiteFontId as qn, deriveTotalTicketQuantity as qt, isRecord as r, resolvePricingOptionsPriceDisplay as rn, unsafeAsEventSeriesId as rr, publicLocationSchema as rt, NAVIGATION_LOCATIONS as s, isNonNegativeWholeCents as sn, ok as sr, selectCategoryView as st, OFFLINE_PAYMENT_METHODS as t, publicEventPricingType as tn, unsafeAsEventInstanceId as tr, parseLocationValue as tt, parseVerticalId as u, toCents as un, formatDateTime as ut, getPublicReadCachePolicy as v, unsafeAsBookingRequirementId as vn, compareLocalScheduleDates as vt, resolveWholeSeriesRunLifecycle as w, parseMembershipId as wn, localScheduleTimePattern as wt, nextLiveRunSessionStartMs as x, unsafeAsStaffMemberId as xn, getBookingLocalDateKey as xt, publicReadFreshnessSeconds as y, unsafeAsDemoCapability as yn, formatLocalScheduleDate as yt, parseFooterCompositionV1 as z, unsafeAsSiteScopedStoragePath as zn, clampConfiguredAmount as zt };
|
package/dist/testing.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./sdk-event-upsert-
|
|
3
|
-
import "./src-
|
|
4
|
-
import { Bt as preparePushConfigTarget, G as syncLocalMediaForPull, Lt as applyPushConfigPlan, W as syncLocalMediaForPush, at as readEntries, ht as writeMediaManifest, o as executeEntryCommandPlanAsSyncResult, t as compileEntryPushCommands, wn as createOutput, z as calculateEntryDiffs } from "./entryCommands-
|
|
5
|
-
import "./load-config-
|
|
2
|
+
import "./sdk-event-upsert-CXc13KPT.mjs";
|
|
3
|
+
import "./src-4CBCWovR.mjs";
|
|
4
|
+
import { Bt as preparePushConfigTarget, G as syncLocalMediaForPull, Lt as applyPushConfigPlan, W as syncLocalMediaForPush, at as readEntries, ht as writeMediaManifest, o as executeEntryCommandPlanAsSyncResult, t as compileEntryPushCommands, wn as createOutput, z as calculateEntryDiffs } from "./entryCommands-5kz7nIFG.mjs";
|
|
5
|
+
import "./load-config-JcidEUjc.mjs";
|
|
6
6
|
|
|
7
7
|
export { applyPushConfigPlan, calculateEntryDiffs, compileEntryPushCommands, createOutput, executeEntryCommandPlanAsSyncResult, preparePushConfigTarget, readEntries, syncLocalMediaForPull, syncLocalMediaForPush, writeMediaManifest };
|
package/package.json
CHANGED