diff --git a/src/schemas/SemanticTagType.ts b/src/schemas/SemanticTagType.ts index 60050a2..6616c64 100644 --- a/src/schemas/SemanticTagType.ts +++ b/src/schemas/SemanticTagType.ts @@ -28,17 +28,74 @@ export const CurrencyAmount = Joi.object().keys({ * @see \ */ -export interface EventDateInfo { - date: string; - ignoreTimeComponents?: boolean; - timeZone?: string; -} +export type EventDateInfo = + | { + date: string; + ignoreTimeComponents?: boolean; + timeZone?: string; -export const EventDateInfo = Joi.object().keys({ - date: Joi.string().isoDate().required(), - ignoreTimeComponents: Joi.boolean(), - timeZone: Joi.string(), -}); + /** + * @iOSVersion 18.1 + * + * Indicates that the time was not announced yet. + * Leads to showing "TBA" in the UI when `date` is set. + * Setting `ignoreTimeComponents` to true, has higher priority + * over this property. + */ + unannounced?: boolean; + } + | { + date?: string; + + /** + * @iOSVersion 18.1 + * + * Indicates that the time of the event has not been determined yet. + * Leads to showing "TBD" in the UI when `date` is set. + * Setting `ignoreTimeComponents` to true, has higher priority + * over this property. + * + * This property has higher priority over `unannounced`. + * + * --- Implementation note --- + * + * This is the reason it was splitted from unannounced above. + * Furthermore, it apparently can live without specifying `date`. + */ + undetermined: boolean; + }; + +export const EventDateInfo = Joi.alternatives( + Joi.object().keys({ + date: Joi.string().isoDate().required(), + ignoreTimeComponents: Joi.boolean(), + timeZone: Joi.string(), + + /** + * @iOSVersion 18.1 + * + * Indicates that the date was not announced yet. + * Leads to showing "TBA" in the UI when `date` is set. + * Setting `ignoreTimeComponents` to true, has higher priority + * over this property. + */ + unannounced: Joi.boolean(), + }), + Joi.object().keys({ + date: Joi.string().isoDate(), + /** + * @iOSVersion 18.1 + * + * Indicates that the time of the event has not been determined yet. + * Leads to showing "TBD" in the UI when `date` is set. + * Setting `ignoreTimeComponents` to true, has higher priority + * over this property. + * + * This property has higher priority over `unannounced`. + */ + undetermined: Joi.boolean().required(), + }), +); /** * @see https://developer.apple.com/documentation/walletpasses/semantictagtype/location-data.dictionary