@openactive/models-ts
Version:
JavaScript/TypeScript implementation of OpenActive's data model
205 lines (204 loc) • 6.48 kB
TypeScript
import * as Joi from 'joi';
import { OaValidationError } from '../oaValidationError';
import * as oa from '../oa';
import * as schema from '../schema';
/**
* Schedule
*
* This type is derived from https://pending.schema.org/Schedule.
*/
export declare type Schedule = {
'@type': 'Schedule';
'@context'?: string | string[];
/**
* A unique url based identifier for the record
*/
'@id'?: string;
/**
* Defines the day of the week upon which the Event takes place.
* When using string values, this MUST conform to iCal BYDAY rule.
*
* ```json
* "byDay": [
* "https://schema.org/Monday"
* ]
* ```
*/
byDay?: string[] | schema.DayOfWeek[];
/**
* Defines the months of the year on which the Event takes place. Specified as an integer between 1 and 12, with 1 representing January.
*
* ```json
* "byMonth": [
* 2
* ]
* ```
*/
byMonth?: number[];
/**
* Defines the days of the month on which the Event takes place. Specified as an integer between 1 and 31
*
* ```json
* "byMonthDay": [
* 28
* ]
* ```
*/
byMonthDay?: number[];
/**
* The duration of the event given in [ISO8601] format.
*
* ```json
* "duration": "PT1H"
* ```
*/
duration?: string;
/**
* The end time of the event.
*
* ```json
* "endTime": "12:00:00"
* ```
*/
endTime?: string;
/**
* Exception dates where the schedule should not generate an event.
*
* ```json
* "exceptDate": [
* "2016-04-13T17:10:00Z",
* "2016-09-14T17:10:00Z",
* "2016-12-14T18:10:00Z",
* "2016-12-21T18:10:00Z",
* "2016-12-28T18:10:00Z",
* "2017-01-04T18:10:00Z"
* ]
* ```
*/
exceptDate?: string[];
/**
* An RFC6570 compliant URI template that can be used to generate a unique identifier (`@id`) for every event described by the schedule. This property is required if the data provider is supporting third-party booking via the Open Booking API, or providing complimentary individual `subEvent`s.
*
* ```json
* "idTemplate": "https://api.example.org/session-series/123/{startDate}"
* ```
*/
idTemplate?: string;
/**
* Defines the number of times a recurring Event will take place.
*
* ```json
* "repeatCount": 3
* ```
*/
repeatCount?: number;
/**
* Defines the frequency at which Events will occur according to a Schedule. The intervals between events should be defined as a Duration of time.
*
* ```json
* "repeatFrequency": "P1D"
* ```
*/
repeatFrequency?: string;
/**
* The type of event this schedule related to.
*
* ```json
* "scheduledEventType": "Event"
* ```
*/
scheduledEventType?: string;
/**
* Indicates the timezone for which the time(s) indicated in the Schedule are given. The value provided should be among those listed in the IANA Time Zone Database.
*
* ```json
* "scheduleTimezone": "Europe/London"
* ```
*/
scheduleTimezone?: string;
/**
* The start date of the event.
*
* ```json
* "startDate": "2018-01-27"
* ```
*/
startDate?: string;
/**
* The end date of the schedule.
*
* ```json
* "endDate": "2018-01-27"
* ```
*/
endDate?: string;
/**
* The start time of the event.
*
* ```json
* "startTime": "12:00:00"
* ```
*/
startTime?: string;
/**
* An RFC6570 compliant URI template that can be used to generate a unique `url` for every event described by the schedule. This property is required if the data provider wants to provide participants with a unique URL to book to attend an event.
*
* ```json
* "urlTemplate": "https://example.org/session-series/123/{startDate}"
* ```
*/
urlTemplate?: string;
/**
* [DEPRECATED: This term has graduated from the beta namespace and is highly likely to be removed in future versions of this library, please use `scheduleTimezone` instead.]
* The time zone used to generate occurrences, same as iCal TZID. E.g. 'Europe/London'.
*
* If you are using this property, please join the discussion at proposal [#197](https://github.com/openactive/modelling-opportunity-data/issues/197).
*/
'beta:timeZone'?: string;
};
/**
* Schedule
*
* This type is derived from https://pending.schema.org/Schedule.
*
* This differs from Schedule because it also allows for objects that have the type of a model that
* sub-classes this model. e.g. `Event_OrSubClass` allows `Event`s as well as `ScheduledSession`s, `SessionSeries`,
* etc.
*/
export declare type ScheduleOrSubClass = Schedule | oa.PartialScheduleOrSubClass;
/**
* Schedule - Validation schema (w/ JOI)
*
* This type is derived from https://pending.schema.org/Schedule.
*/
export declare const ScheduleJoiSchema: Joi.ObjectSchema;
/**
* Schedule - Validation schema (w/ JOI)
*
* This type is derived from https://pending.schema.org/Schedule.
*
* This differs from ScheduleJoiSchema because it also allows for objects that have the type of a model that
* sub-classes this model. e.g. `Event.OrSubClassJoiSchema` allows `Event`s as well as `ScheduledSession`s,
* `SessionSeries`, etc.
*/
export declare const ScheduleOrSubClassJoiSchema: Joi.AlternativesSchema;
/**
* Runtime validator for Schedule.
*
* If some data has a structure which matches a Schedule, it will be returned with the correct type.
* Otherwise, this function returns an OAValidationError with details about why the data does not match.
*
* Use this to e.g. check a JSON object received in an HTTP request. Example usage (for an express request handler):
*
* ```ts
* const maybeSchedule = validateSchedule(req.body); // `req.body` will have type `any` or `unknown`
* if (maybeSchedule instanceof OaValidationError) {
* // From this point on, `maybeSchedule` will have type `OaValidationError`
* const error = maybeSchedule;
* // Do something with the error. Maybe ignore it? Or log it? Or throw? Up to you.
* }
* // From this point on, `maybeSchedule` will have type `Schedule`
* const schedule = maybeSchedule;
* ```
*/
export declare function validateSchedule(maybeSchedule: unknown): Schedule | OaValidationError;