riverbankcms 0.20.0 → 0.22.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.
@@ -603,13 +603,17 @@ const CURRENCY_LOCALE_BY_CODE = {
603
603
  function resolveCurrencyLocale(currencyCode, override) {
604
604
  return override ?? CURRENCY_LOCALE_BY_CODE[currencyCode] ?? "en";
605
605
  }
606
- function fractionDigitsFor(decimals, exactFormatter) {
606
+ function fractionDigitsFor(decimals, exactFormatter, amount) {
607
607
  switch (decimals) {
608
608
  case "exact": return {};
609
- case "auto": return {
610
- minimumFractionDigits: 0,
611
- maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
612
- };
609
+ case "auto": {
610
+ const fraction = exactFormatter.formatToParts(amount).find((part) => part.type === "fraction")?.value;
611
+ const zeroFraction = exactFormatter.formatToParts(0).find((part) => part.type === "fraction")?.value;
612
+ return fraction === zeroFraction ? {
613
+ minimumFractionDigits: 0,
614
+ maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
615
+ } : {};
616
+ }
613
617
  case "whole": return {
614
618
  minimumFractionDigits: 0,
615
619
  maximumFractionDigits: 0
@@ -643,12 +647,19 @@ function formatCurrencyMajorUnits(amount, currency, options) {
643
647
  return new Intl.NumberFormat(locale, {
644
648
  style: "currency",
645
649
  currency: currencyCode,
646
- ...fractionDigitsFor(options?.decimals ?? "exact", exactFormatter)
650
+ ...fractionDigitsFor(options?.decimals ?? "exact", exactFormatter, amount)
647
651
  }).format(amount);
648
652
  } catch {
649
653
  return `${amount.toFixed(2)} ${currencyCode}`;
650
654
  }
651
655
  }
656
+ /** Gift-card copy retains pence only when the amount has a fractional part. */
657
+ function formatGiftCardAmountLabel(amountCents, currency = "GBP") {
658
+ return formatCurrencyAmount(amountCents, currency, {
659
+ locale: "en-GB",
660
+ decimals: amountCents % 100 === 0 ? "whole" : "exact"
661
+ });
662
+ }
652
663
 
653
664
  //#endregion
654
665
  //#region ../core/src/money-input.ts
@@ -1994,6 +2005,10 @@ function resolveBookingTimeZoneId(...candidates) {
1994
2005
  }
1995
2006
  /** Canonical business-zone admission, shared by server and public wire boundaries. */
1996
2007
  const DEFAULT_BOOKING_BUSINESS_TIME_ZONE = "Europe/London";
2008
+ /** Effect boundary for browser-authored local inputs; formats no displayed date. */
2009
+ function getRuntimeBookingTimeZone() {
2010
+ return resolveBookingTimeZoneId(new Intl.DateTimeFormat("en-GB").resolvedOptions().timeZone);
2011
+ }
1997
2012
  function resolveBookingBusinessTimeZone(value) {
1998
2013
  return resolveBookingTimeZoneId(value, DEFAULT_BOOKING_BUSINESS_TIME_ZONE);
1999
2014
  }
@@ -2127,7 +2142,7 @@ function formatBookingTime(input, format = {
2127
2142
  * omission instead of depending on locale-specific spacing or punctuation.
2128
2143
  * Callers must only use it for an English presentation contract.
2129
2144
  */
2130
- function formatBookingCompactEnglishTime(input) {
2145
+ function formatBookingCompactEnglishTime(input, options = {}) {
2131
2146
  const date = new Date(input.startsAt);
2132
2147
  if (Number.isNaN(date.getTime())) {
2133
2148
  return input.startsAt;
@@ -2135,16 +2150,22 @@ function formatBookingCompactEnglishTime(input) {
2135
2150
  const parts = formatToPartsLookup(date, input.locale ?? "en-GB", input.timeZone, {
2136
2151
  hour: "numeric",
2137
2152
  minute: "2-digit",
2138
- hourCycle: "h12"
2153
+ hourCycle: "h12",
2154
+ ...options.seconds === "include" ? { second: "2-digit" } : {}
2139
2155
  });
2156
+ return compactEnglishClock(parts, options.seconds) ?? input.startsAt;
2157
+ }
2158
+ /** Precision and zero-minute omission are one decision for all compact clocks. */
2159
+ function compactEnglishClock(parts, seconds) {
2140
2160
  const hour = parts.get("hour");
2141
2161
  const minute = parts.get("minute");
2142
2162
  const dayPeriod = parts.get("dayPeriod");
2143
- if (hour === undefined || minute === undefined || dayPeriod === undefined) {
2144
- return input.startsAt;
2145
- }
2163
+ const second = parts.get("second");
2164
+ if (hour === undefined || minute === undefined || dayPeriod === undefined) return null;
2165
+ const token = dayPeriod.toLowerCase();
2166
+ if (seconds === "include") return second === undefined ? null : `${hour}:${minute}:${second}${token}`;
2146
2167
  const clock = minute === "00" ? hour : `${hour}:${minute}`;
2147
- return `${clock}${dayPeriod.toLowerCase()}`;
2168
+ return `${clock}${token}`;
2148
2169
  }
2149
2170
  function formatBookingDateTime(input, format = DEFAULT_BOOKING_DATE_TIME_FORMAT) {
2150
2171
  if (format === DEFAULT_BOOKING_DATE_TIME_FORMAT) {
@@ -2388,7 +2409,7 @@ function resolveBookingDisplayContext(input) {
2388
2409
  locale: input.locale,
2389
2410
  timeZone: input.sessionTimeZone
2390
2411
  },
2391
- zone: input.surface === "email" && input.isOnline || input.sessionTimeZone !== input.siteTimeZone ? "always" : "omit"
2412
+ zone: input.surface !== "dashboard" && input.isOnline || input.sessionTimeZone !== input.siteTimeZone ? "always" : "omit"
2392
2413
  };
2393
2414
  }
2394
2415
  const SDK_STANDARD_TIME_FORMAT = {
@@ -2432,19 +2453,19 @@ function formatDateRange(start, endInclusive, context, options = {}) {
2432
2453
  return preserveOrder ? `${presentDate(first, context, profile)} – ${presentDate(last, context, profile)}` : presentDateRange(first, last, context, profile);
2433
2454
  }
2434
2455
  function formatDateTime(value, context, options) {
2435
- return presentDateTime(value, context, displayProfile(options, options.zone));
2456
+ return presentDateTime(value, context, displayProfile(options, options.zone, options.clock, options.seconds));
2436
2457
  }
2437
2458
  function formatDateTimeRange(span, context, options) {
2438
- return presentDateTimeRange(span, context, displayProfile(options, options.zone));
2459
+ return presentDateTimeRange(span, context, displayProfile(options, options.zone, options.clock, options.seconds));
2439
2460
  }
2440
2461
  function formatTime(value, context, options) {
2441
- return presentTime(value, context, displayProfile({}, options.zone));
2462
+ return presentTime(value, context, displayProfile({}, options.zone, options.clock, options.seconds));
2442
2463
  }
2443
2464
  function formatTimeRange(start, end, context, options) {
2444
2465
  return presentTimeRange({
2445
2466
  start,
2446
2467
  end
2447
- }, context, displayProfile({}, options.zone));
2468
+ }, context, displayProfile({}, options.zone, options.clock, options.seconds));
2448
2469
  }
2449
2470
  /** Sole date projection/typography owner, used by display and scheduled adapters. */
2450
2471
  function presentDate(value, context, profile) {
@@ -2551,13 +2572,22 @@ function combinedFormat(date, clock) {
2551
2572
  ...clock.format
2552
2573
  };
2553
2574
  }
2554
- function displayProfile(options, zone) {
2575
+ function displayProfile(options, zone, clock, seconds) {
2555
2576
  return {
2556
2577
  kind: "display",
2557
2578
  dateFormat: dateFormat(options),
2558
- clock: {
2579
+ clock: clock === "24-hour" ? {
2580
+ kind: "intl",
2581
+ format: {
2582
+ hour: "2-digit",
2583
+ minute: "2-digit",
2584
+ ...seconds === "include" ? { second: "2-digit" } : {},
2585
+ hourCycle: "h23"
2586
+ }
2587
+ } : {
2559
2588
  kind: "compact",
2560
- localeSource: "product"
2589
+ localeSource: "product",
2590
+ seconds
2561
2591
  },
2562
2592
  zone
2563
2593
  };
@@ -2570,7 +2600,7 @@ function presentClock(value, context, clock) {
2570
2600
  startsAt: value,
2571
2601
  timeZone: context.timeZone,
2572
2602
  locale: clock.localeSource === "product" ? "en-GB" : context.locale
2573
- }) : getDateTimeFormatter(context.locale, context.timeZone, clock.format).format(new Date(value));
2603
+ }, { seconds: clock.seconds }) : getDateTimeFormatter(context.locale, context.timeZone, clock.format).format(new Date(value));
2574
2604
  }
2575
2605
  function offsetToken(value, context) {
2576
2606
  return getDateTimeFormatter("en-GB", context.timeZone, { timeZoneName: "longOffset" }).formatToParts(new Date(value)).find((part) => part.type === "timeZoneName")?.value ?? "";
@@ -2581,11 +2611,29 @@ function formatTimeAgo(value, now, context) {
2581
2611
  function formatTimeUntil(value, now, context) {
2582
2612
  return formatRelative(value, now, context, "future");
2583
2613
  }
2614
+ const DATE_STYLE_PARTS = {
2615
+ numeric: {
2616
+ day: "2-digit",
2617
+ month: "2-digit"
2618
+ },
2619
+ short: {
2620
+ day: "numeric",
2621
+ month: "short"
2622
+ },
2623
+ long: {
2624
+ day: "numeric",
2625
+ month: "long"
2626
+ },
2627
+ omit: {
2628
+ day: undefined,
2629
+ month: undefined
2630
+ }
2631
+ };
2584
2632
  function dateFormat(options) {
2585
- const style = options.date ?? "long";
2586
2633
  return {
2587
- day: style === "omit" ? undefined : style === "numeric" ? "2-digit" : "numeric",
2588
- month: style === "omit" ? undefined : style === "numeric" ? "2-digit" : style,
2634
+ ...DATE_STYLE_PARTS[options.date ?? "long"],
2635
+ ...options.day ? { day: options.day === "omit" ? undefined : options.day } : {},
2636
+ ...options.month === "omit" ? { month: undefined } : {},
2589
2637
  ...options.year === "omit" ? {} : { year: "numeric" },
2590
2638
  ...options.weekday ? { weekday: options.weekday } : {}
2591
2639
  };
@@ -2624,7 +2672,7 @@ function formatRelative(value, now, context, direction) {
2624
2672
  if (Math.abs(days) > 7) return formatDate({
2625
2673
  kind: "instant",
2626
2674
  value
2627
- }, context);
2675
+ }, context, { date: "short" });
2628
2676
  const formatter = new Intl.RelativeTimeFormat(context.locale, { numeric: "auto" });
2629
2677
  if (days !== 0) return formatter.format(days, "day");
2630
2678
  const unit = magnitude < 3600 ? "minute" : "hour";
@@ -8142,7 +8190,7 @@ function parseSiteNavigationLocations(rows) {
8142
8190
  */
8143
8191
  const PORTAL_NAV_DEFAULT_LABELS = {
8144
8192
  loggedOut: "Login",
8145
- loggedIn: "My Account"
8193
+ loggedIn: "My account"
8146
8194
  };
8147
8195
 
8148
8196
  //#endregion
@@ -8271,4 +8319,104 @@ function mergeBag(stored, patch, options) {
8271
8319
  }
8272
8320
 
8273
8321
  //#endregion
8274
- export { getBookingLocalDateKey as $, parsePageId as $t, assessMailingListTargeting as A, unsafeAsStoragePath as An, resolveExactOrFreePriceDisplay as At, parsePublicContactDetails as B, unsafeAsNonNegativeCents as Bt, stableJsonStringify as C, unsafeAsProductId as Cn, formatBookingPriceDisplay as Ct, parseMailingListContentVersionId as D, unsafeAsSiteScopedStoragePath as Dn, publicEventPricingDisplay as Dt, parseMailingListBlockId as E, unsafeAsSiteId as En, publicEventPricingCurrency as Et, parseMailingListPlacementTargeting as F, isNonNegativeWholeCents as Ft, selectCategoryView as G, formatDurationUnitLabel as Gt, isPresent as H, formatCurrencyAmount as Ht, DEFAULT_MAILING_LIST_TARGETING as I, parseNonNegativeCents as It, formatBookingDate as J, parseDatedOfferingCapacityHoldAuditRef as Jt, inferSiteDateLocale as K, parseApiKeyId as Kt, planMailingListChoicePresentation as L, parsePositiveCents as Lt, parseMailingListProviderScope as M, unsafeAsUserId as Mn, fromArray as Mt, parseFooterCompositionV1 as N, err as Nn, mapNonEmptyArray as Nt, parseMailingListSignedSourceToken as O, unsafeAsStaffMemberId as On, publicEventPricingOptions as Ot, footerNavigationLayouts as P, ok as Pn, mapReadonlyNonEmptyArray as Pt, formatLocalScheduleTime as Q, parseMembershipId as Qt, sameMailingListPlacementTargeting as R, toCents as Rt, parseManagementKey as S, unsafeAsPricingOptionId as Sn, parseEventPageSurfaceSubject as St, buildMailingListSignupBlockSourceRef as T, unsafeAsSiteFontId as Tn, isPublicEventPricingOptionDisplayable as Tt, normalizeLocationAddressText as U, parseCurrencyCode as Ut, assertAllowedPublicUrl as V, unsafeAsPositiveCents as Vt, toLocationCoordinates as W, assertNever as Wt, formatBookingTime as X, parseEventSeriesId as Xt, formatBookingDateParts as Y, parseDatedOfferingCapacityHoldId as Yt, formatLocalScheduleDate as Z, parseMediaAssetId as Zt, orderedLiveRunSessions as _, unsafeAsOccurrenceId as _n, omitZeroAmountFutureRows as _t, canonicalizeConfiguredBookingVerticalConfig as a, unsafeAsBookingRequirementId as an, toScheduledBookingDateRange as at, createSecret as b, unsafeAsPositiveByteCount as bn, resolveFlexibleBalanceInitialPaymentCents as bt, resolveSiteVerticalBookingConfig as c, unsafeAsDeclaredMimeType as cn, validateBookingPaymentOptionKinds as ct, ORDINARY_EVENT_PRESET_VALUES as d, unsafeAsEntitlementId as dn, isSettleableOrderInstalmentPlanStatus as dt, parseRetiredCourseId as en, getLocalScheduleDate as et, SURFACE_EVENT_PRESET_VALUES as f, unsafeAsEventInstanceId as fn, addIntervalPreservingMonthAnchor as ft, nextLiveRunSessionStartMs as g, unsafeAsMediaAssetId as gn, getBookingInstalmentProtectedDepositAmountCents as gt, CANCELLED_SESSION_STATUS as h, unsafeAsFileChecksumSha256 as hn, getBookingInstalmentPlanIntervalCount as ht, areConfiguredBookingVerticalConfigsEqual as i, unsafeAsAppointmentResourceId as in, toBookingTimeZone as it, DEFAULT_MAILING_LIST_SUCCESS_MESSAGE as j, unsafeAsUploadSessionId as jn, resolvePricingOptionsPriceDisplay as jt, parseMailingListRuntimeContext as k, unsafeAsStorageBucketName as kn, publicEventPricingType as kt, DEFAULT_EVENT_TYPE_PRESETS as l, unsafeAsDemoCapability as ln, isLiveOrderInstalmentPlanStatus as lt, publicReadFreshnessSeconds as m, unsafeAsEventSeriesId as mn, getBookingInstalmentDepositRefundability as mt, EVENT_PRESET_VOCABULARY as n, parseSiteTermsVersionId as nn, localScheduleTimePattern as nt, parseVerticalId as o, unsafeAsBookingSessionId as on, toScheduledBookingDateTime as ot, WHOLE_SERIES_EVENT_PRESET_VALUES as p, unsafeAsEventOfferingId as pn, clampConfiguredAmount as pt, buildBookingUtcDateWindow as q, parseCustomerId as qt, NAVIGATION_LOCATIONS as r, parseUserId as rn, parseUtcIsoDateTimeString as rt, parseVerticalPresetId as s, unsafeAsCheckoutLineId as sn, parseBookingTimeZone as st, resolveEventCatalogue as t, parseSiteId as tn, getLocalScheduleTime as tt, EVENT_PRESET_VALUES as u, unsafeAsDetectedMimeType as un, isSettleableFlexibleBalanceContractStatus as ut, resolveWholeSeriesBookingPhase as v, unsafeAsOriginalFilename as vn, splitAmountWithRemainderInFirst as vt, slugify as w, unsafeAsSafeDownloadFilename as wn, formatEventPricing as wt, exposeSecret as x, unsafeAsPositiveSeconds as xn, deriveTotalTicketQuantity as xt, resolveWholeSeriesRunLifecycle as y, unsafeAsPassId as yn, resolveFlexibleBalanceDueAt as yt, isCanonicalRichTextDoc as z, toNonNegativeCents as zt };
8322
+ //#region ../core/src/appointment-lifecycle.ts
8323
+ const APPOINTMENT_STATUS_VALUES = [
8324
+ "requested",
8325
+ "pending",
8326
+ "confirmed",
8327
+ "cancelled",
8328
+ "no_show"
8329
+ ];
8330
+ const APPOINTMENT_REQUEST_OUTCOME_VALUES = [
8331
+ "approved",
8332
+ "declined",
8333
+ "lapsed",
8334
+ "withdrawn"
8335
+ ];
8336
+ const APPOINTMENT_REQUEST_NOTICE_KIND_VALUES = [
8337
+ "received",
8338
+ "confirmed",
8339
+ "declined"
8340
+ ];
8341
+ function parseAppointmentStatus(value) {
8342
+ const status = APPOINTMENT_STATUS_VALUES.find((status$1) => status$1 === value);
8343
+ if (status === undefined) throw new Error("Unexpected appointment status");
8344
+ return status;
8345
+ }
8346
+ function parseAppointmentRequestOutcome(value) {
8347
+ if (value === null) return null;
8348
+ const outcome = APPOINTMENT_REQUEST_OUTCOME_VALUES.find((outcome$1) => outcome$1 === value);
8349
+ if (outcome === undefined) throw new Error("Unexpected appointment request outcome");
8350
+ return outcome;
8351
+ }
8352
+ function parseAppointmentRequestNoticeKind(value) {
8353
+ const kind = APPOINTMENT_REQUEST_NOTICE_KIND_VALUES.find((kind$1) => kind$1 === value);
8354
+ if (kind === undefined) throw new Error("Unexpected appointment request notice kind");
8355
+ return kind;
8356
+ }
8357
+ const APPOINTMENT_HISTORY_STATUS_VALUES = [
8358
+ "requested",
8359
+ "no_show",
8360
+ "scheduled",
8361
+ "pending",
8362
+ "confirmed",
8363
+ "cancelled"
8364
+ ];
8365
+ function parseAppointmentHistoryStatus(value) {
8366
+ const status = APPOINTMENT_HISTORY_STATUS_VALUES.find((status$1) => status$1 === value);
8367
+ if (status === undefined) throw new Error("Unexpected appointment history status");
8368
+ return status;
8369
+ }
8370
+ const appointmentStatusLabels = {
8371
+ requested: "Waiting for approval",
8372
+ pending: "Awaiting payment",
8373
+ confirmed: "Confirmed",
8374
+ cancelled: "Cancelled",
8375
+ no_show: "No show"
8376
+ };
8377
+ /** Current appointment wording shared by dashboard and customer surfaces. */
8378
+ function appointmentStatusLabel(status) {
8379
+ return appointmentStatusLabels[status];
8380
+ }
8381
+
8382
+ //#endregion
8383
+ //#region ../core/src/gift-expiry.ts
8384
+ /** Gifts expire at an exclusive boundary; vouchers include their end instant. */
8385
+ function formatGiftExpiryDate(expiresAt, context, kind = "gift_card") {
8386
+ const instant = toUtcIsoDateTimeString(expiresAt);
8387
+ const lastValidInstant = kind === "gift_card" ? toUtcIsoDateTimeString(new Date(Date.parse(instant) - 1).toISOString()) : instant;
8388
+ return formatDate({
8389
+ kind: "instant",
8390
+ value: lastValidInstant
8391
+ }, {
8392
+ timeZone: resolveBookingTimeZoneId(context.siteTimezone),
8393
+ locale: context.locale
8394
+ }, { date: "long" });
8395
+ }
8396
+
8397
+ //#endregion
8398
+ //#region ../core/src/site-visibility.ts
8399
+ function isSitePubliclyAvailable(billingPausedAt) {
8400
+ return billingPausedAt == null || billingPausedAt.length === 0;
8401
+ }
8402
+ function isSiteLaunched(launchedAt) {
8403
+ return typeof launchedAt === "string" && launchedAt.length > 0;
8404
+ }
8405
+ function resolvePublicSiteVisibility(input) {
8406
+ if (input.isPreviewAttempt) {
8407
+ return "live";
8408
+ }
8409
+ if (!isSiteLaunched(input.launchedAt) && input.allowUnlaunchedDevAccess !== true) {
8410
+ return "prelaunch";
8411
+ }
8412
+ if (input.publiclyAvailable === false) {
8413
+ return "maintenance";
8414
+ }
8415
+ if (input.maintenanceModeEnabled) {
8416
+ return "maintenance";
8417
+ }
8418
+ return "live";
8419
+ }
8420
+
8421
+ //#endregion
8422
+ export { compareLocalScheduleDates as $, parseCustomerId as $t, DEFAULT_MAILING_LIST_SUCCESS_MESSAGE as A, unsafeAsSafeDownloadFilename as An, formatEventPricing as At, isPresent as B, ok as Bn, mapReadonlyNonEmptyArray as Bt, stableJsonStringify as C, unsafeAsOccurrenceId as Cn, omitZeroAmountFutureRows as Ct, parseMailingListSignedSourceToken as D, unsafeAsPositiveSeconds as Dn, deriveTotalTicketQuantity as Dt, parseMailingListContentVersionId as E, unsafeAsPositiveByteCount as En, resolveFlexibleBalanceInitialPaymentCents as Et, DEFAULT_MAILING_LIST_TARGETING as F, unsafeAsStorageBucketName as Fn, publicEventPricingType as Ft, formatDateRange as G, toNonNegativeCents as Gt, toLocationCoordinates as H, parseNonNegativeCents as Ht, planMailingListChoicePresentation as I, unsafeAsStoragePath as In, resolveExactOrFreePriceDisplay as It, formatTime as J, formatCurrencyAmount as Jt, formatDateTime as K, unsafeAsNonNegativeCents as Kt, isCanonicalRichTextDoc as L, unsafeAsUploadSessionId as Ln, resolvePricingOptionsPriceDisplay as Lt, parseFooterCompositionV1 as M, unsafeAsSiteId as Mn, publicEventPricingCurrency as Mt, footerNavigationLayouts as N, unsafeAsSiteScopedStoragePath as Nn, publicEventPricingDisplay as Nt, parseMailingListRuntimeContext as O, unsafeAsPricingOptionId as On, parseEventPageSurfaceSubject as Ot, parseMailingListPlacementTargeting as P, unsafeAsStaffMemberId as Pn, publicEventPricingOptions as Pt, buildBookingUtcDateWindow as Q, parseApiKeyId as Qt, parsePublicContactDetails as R, unsafeAsUserId as Rn, fromArray as Rt, parseManagementKey as S, unsafeAsMediaAssetId as Sn, getBookingInstalmentProtectedDepositAmountCents as St, parseMailingListBlockId as T, unsafeAsPassId as Tn, resolveFlexibleBalanceDueAt as Tt, selectCategoryView as U, parsePositiveCents as Ut, normalizeLocationAddressText as V, isNonNegativeWholeCents as Vt, formatDate as W, toCents as Wt, inferSiteDateLocale as X, assertNever as Xt, formatTimeRange as Y, parseCurrencyCode as Yt, resolveBookingDisplayContext as Z, formatDurationUnitLabel as Zt, orderedLiveRunSessions as _, unsafeAsEntitlementId as _n, isSettleableOrderInstalmentPlanStatus as _t, canonicalizeConfiguredBookingVerticalConfig as a, parsePageId as an, localScheduleTimePattern as at, createSecret as b, unsafeAsEventSeriesId as bn, getBookingInstalmentDepositRefundability as bt, resolveSiteVerticalBookingConfig as c, parseSiteTermsVersionId as cn, resolveBookingBusinessTimeZone as ct, ORDINARY_EVENT_PRESET_VALUES as d, unsafeAsBookingRequirementId as dn, toScheduledBookingDateTime as dt, parseDatedOfferingCapacityHoldAuditRef as en, formatLocalScheduleDate as et, SURFACE_EVENT_PRESET_VALUES as f, unsafeAsBookingSessionId as fn, toUtcIsoDateTimeString as ft, nextLiveRunSessionStartMs as g, unsafeAsDetectedMimeType as gn, isSettleableFlexibleBalanceContractStatus as gt, CANCELLED_SESSION_STATUS as h, unsafeAsDemoCapability as hn, isLiveOrderInstalmentPlanStatus as ht, areConfiguredBookingVerticalConfigsEqual as i, parseMembershipId as in, getLocalScheduleTime as it, parseMailingListProviderScope as j, unsafeAsSiteFontId as jn, isPublicEventPricingOptionDisplayable as jt, assessMailingListTargeting as k, unsafeAsProductId as kn, formatBookingPriceDisplay as kt, DEFAULT_EVENT_TYPE_PRESETS as l, parseUserId as ln, resolveBookingTimeZoneId as lt, publicReadFreshnessSeconds as m, unsafeAsDeclaredMimeType as mn, validateBookingPaymentOptionKinds as mt, EVENT_PRESET_VOCABULARY as n, parseEventSeriesId as nn, getBookingLocalDateKey as nt, parseVerticalId as o, parseRetiredCourseId as on, parseBookingLocalDate as ot, WHOLE_SERIES_EVENT_PRESET_VALUES as p, unsafeAsCheckoutLineId as pn, parseBookingTimeZone as pt, formatDateTimeRange as q, unsafeAsPositiveCents as qt, NAVIGATION_LOCATIONS as r, parseMediaAssetId as rn, getLocalScheduleDate as rt, parseVerticalPresetId as s, parseSiteId as sn, parseUtcIsoDateTimeString as st, resolveEventCatalogue as t, parseDatedOfferingCapacityHoldId as tn, formatLocalScheduleTime as tt, EVENT_PRESET_VALUES as u, unsafeAsAppointmentResourceId as un, toBookingTimeZone as ut, resolveWholeSeriesBookingPhase as v, unsafeAsEventInstanceId as vn, addIntervalPreservingMonthAnchor as vt, slugify as w, unsafeAsOriginalFilename as wn, splitAmountWithRemainderInFirst as wt, exposeSecret as x, unsafeAsFileChecksumSha256 as xn, getBookingInstalmentPlanIntervalCount as xt, resolveWholeSeriesRunLifecycle as y, unsafeAsEventOfferingId as yn, clampConfiguredAmount as yt, assertAllowedPublicUrl as z, err as zn, mapNonEmptyArray as zt };
package/dist/testing.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import "./richTextSchema-DTvrDDF5.mjs";
3
- import "./src-Dixcv4PB.mjs";
4
- import { $t as preparePushConfigTarget, H as syncLocalMediaForPush, L as calculateEntryDiffs, U as syncLocalMediaForPull, Vn as createOutput, Xt as applyPushConfigPlan, o as executeEntryCommandPlanAsSyncResult, pt as writeMediaManifest, rt as readEntries, t as compileEntryPushCommands } from "./entryCommands-8kDjOex0.mjs";
5
- import "./load-config-gqUEjIyB.mjs";
2
+ import "./sdk-event-upsert-BqjzK2zT.mjs";
3
+ import "./src-zzwJUef5.mjs";
4
+ import { An as createOutput, Ft as applyPushConfigPlan, H as syncLocalMediaForPush, L as calculateEntryDiffs, Rt as preparePushConfigTarget, U as syncLocalMediaForPull, o as executeEntryCommandPlanAsSyncResult, pt as writeMediaManifest, rt as readEntries, t as compileEntryPushCommands } from "./entryCommands-CoGu0G2R.mjs";
5
+ import "./load-config-j58KSqxl.mjs";
6
6
 
7
7
  export { applyPushConfigPlan, calculateEntryDiffs, compileEntryPushCommands, createOutput, executeEntryCommandPlanAsSyncResult, preparePushConfigTarget, readEntries, syncLocalMediaForPull, syncLocalMediaForPush, writeMediaManifest };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "riverbankcms",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "Riverbank CMS command-line tools for SDK site developers",
5
5
  "bin": {
6
6
  "riverbankcms": "dist/cli/index.mjs"
@@ -43,7 +43,7 @@
43
43
  "zod": "^4.3.6"
44
44
  },
45
45
  "peerDependencies": {
46
- "@riverbankcms/sdk": ">=0.139.0 <1.0.0"
46
+ "@riverbankcms/sdk": ">=0.157.0 <1.0.0"
47
47
  },
48
48
  "optionalDependencies": {
49
49
  "@napi-rs/keyring": "1.3.0"