{"version":3,"sources":["../src/index.ts","../src/schema.ts","../src/to-json-schema.ts"],"sourcesContent":["export * from './schema'\nexport * from './to-json-schema'\n","import { z } from 'zod'\n\n// Regular expression for time format\nexport const timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$/\n\n/**\n * Mapping of subject names to their details\n */\nexport const SubjectSchema = z.object({\n  simplified_name: z.string().optional(),\n  teacher: z.string().optional(),\n  room: z.string().optional(),\n})\n\nexport const PeriodSchema = z.tuple([\n  z.string().regex(timeRegex),\n  z.string().regex(timeRegex),\n])\n\nexport const TimetableSchema = z.tuple([\n  /**\n   * Day of the week (1=Monday, 7=Sunday)\n   */\n  z.number().int().min(1).max(7).describe('Day of the week (1=Monday, 7=Sunday).'),\n  /**\n   * Week type (all weeks, even weeks, or odd weeks)\n   */\n  z.enum(['all', 'even', 'odd']).describe('Week type.'),\n  /**\n   * Subject name (must match keys in 'subjects')\n   */\n  z.string().describe('Subject name (must match keys in \\'subjects\\').'),\n  /**\n   * Class period (1-based index, must match 'periods')\n   */\n  z.number().int().min(1).describe('Class period (1-based index, must match \\'periods\\').'),\n])\n\n/**\n * A compact and efficient format for storing school schedules\n */\nexport const Schema = z.object({\n  /**\n   * USF version, currently fixed at 1\n   */\n  version: z.number()\n    .int()\n    .refine(v => v === 1, { message: 'USF version, currently fixed at 1.' })\n    .describe('USF version, currently fixed at 1.'),\n\n  /**\n   * Mapping of subject names to their details\n   */\n  subjects: z.record(SubjectSchema).describe('Mapping of subject names to their details.'),\n\n  /**\n   * List of time periods, each containing a start and end time\n   */\n  periods: z.array(PeriodSchema).describe('List of time periods, each containing a start and end time.'),\n\n  /**\n   * Schedule entries, each defining a class occurrence\n   */\n  timetable: z.array(TimetableSchema).describe('Schedule entries, each defining a class occurrence.'),\n}).strict().describe('A compact and efficient format for storing school schedules.')\n\n// Export type definition\nexport type USFSchema = z.infer<typeof Schema>\n","import type { Schema } from '.'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\n\nexport interface ToJsonSchemaOptions {\n  /** @default \"Universal Schedule Format (USF)\" */\n  title?: string\n  /** @default \"https://json-schema.org/draft/2020-12/schema\" */\n  $schema?: string\n  /** @default [1] */\n  versionEnum?: string[]\n}\n\nexport function toJsonSchema(schema: typeof Schema, options: ToJsonSchemaOptions = {}): ReturnType<typeof zodToJsonSchema> {\n  const parsedJsonSchema = zodToJsonSchema(schema)\n  parsedJsonSchema.$schema = options.$schema ?? 'https://json-schema.org/draft/2020-12/schema'\n  parsedJsonSchema.title = options.title ?? 'Universal Schedule Format (USF)'\n  // eslint-disable-next-line ts/ban-ts-comment\n  // @ts-expect-error\n  parsedJsonSchema.properties.version.enum = options.versionEnum ?? [1]\n  return parsedJsonSchema\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAkB;AAGX,IAAM,YAAY;AAKlB,IAAM,gBAAgB,aAAE,OAAO;AAAA,EACpC,iBAAiB,aAAE,OAAO,EAAE,SAAS;AAAA,EACrC,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,aAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,IAAM,eAAe,aAAE,MAAM;AAAA,EAClC,aAAE,OAAO,EAAE,MAAM,SAAS;AAAA,EAC1B,aAAE,OAAO,EAAE,MAAM,SAAS;AAC5B,CAAC;AAEM,IAAM,kBAAkB,aAAE,MAAM;AAAA;AAAA;AAAA;AAAA,EAIrC,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,uCAAuC;AAAA;AAAA;AAAA;AAAA,EAI/E,aAAE,KAAK,CAAC,OAAO,QAAQ,KAAK,CAAC,EAAE,SAAS,YAAY;AAAA;AAAA;AAAA;AAAA,EAIpD,aAAE,OAAO,EAAE,SAAS,+CAAiD;AAAA;AAAA;AAAA;AAAA,EAIrE,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,qDAAuD;AAC1F,CAAC;AAKM,IAAM,SAAS,aAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAI7B,SAAS,aAAE,OAAO,EACf,IAAI,EACJ,OAAO,OAAK,MAAM,GAAG,EAAE,SAAS,qCAAqC,CAAC,EACtE,SAAS,oCAAoC;AAAA;AAAA;AAAA;AAAA,EAKhD,UAAU,aAAE,OAAO,aAAa,EAAE,SAAS,4CAA4C;AAAA;AAAA;AAAA;AAAA,EAKvF,SAAS,aAAE,MAAM,YAAY,EAAE,SAAS,6DAA6D;AAAA;AAAA;AAAA;AAAA,EAKrG,WAAW,aAAE,MAAM,eAAe,EAAE,SAAS,qDAAqD;AACpG,CAAC,EAAE,OAAO,EAAE,SAAS,8DAA8D;;;AC/DnF,gCAAgC;AAWzB,SAAS,aAAa,QAAuB,UAA+B,CAAC,GAAuC;AACzH,QAAM,uBAAmB,2CAAgB,MAAM;AAC/C,mBAAiB,UAAU,QAAQ,WAAW;AAC9C,mBAAiB,QAAQ,QAAQ,SAAS;AAG1C,mBAAiB,WAAW,QAAQ,OAAO,QAAQ,eAAe,CAAC,CAAC;AACpE,SAAO;AACT;","names":[]}