@happyvertical/smrt-events 0.35.1 → 0.35.3

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/index.js CHANGED
@@ -225,9 +225,7 @@ let Event = class extends SmrtHierarchical {
225
225
  async getSeries() {
226
226
  if (!this.seriesId) return null;
227
227
  const { EventSeriesCollection: EventSeriesCollection2 } = await Promise.resolve().then(() => EventSeriesCollection$1);
228
- const collection = await EventSeriesCollection2.create(
229
- this.options
230
- );
228
+ const collection = await EventSeriesCollection2.create(this.options);
231
229
  return await collection.get({ id: this.seriesId });
232
230
  }
233
231
  /**
@@ -274,9 +272,7 @@ let Event = class extends SmrtHierarchical {
274
272
  */
275
273
  async getParticipants() {
276
274
  const { EventParticipantCollection: EventParticipantCollection2 } = await Promise.resolve().then(() => EventParticipantCollection$1);
277
- const collection = await EventParticipantCollection2.create(
278
- this.options
279
- );
275
+ const collection = await EventParticipantCollection2.create(this.options);
280
276
  return await collection.list({ where: { eventId: this.id } });
281
277
  }
282
278
  async getEventAssetCollection() {
@@ -694,9 +690,7 @@ let EventParticipant = class extends SmrtObject {
694
690
  async getGroupParticipants() {
695
691
  if (!this.groupId) return [];
696
692
  const { EventParticipantCollection: EventParticipantCollection2 } = await Promise.resolve().then(() => EventParticipantCollection$1);
697
- const collection = await EventParticipantCollection2.create(
698
- this.options
699
- );
693
+ const collection = await EventParticipantCollection2.create(this.options);
700
694
  const participants = await collection.list({
701
695
  where: { eventId: this.eventId, groupId: this.groupId }
702
696
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/__smrt-register__.ts","../src/models/EventAsset.ts","../src/collections/EventAssetCollection.ts","../src/models/Event.ts","../src/collections/EventCollection.ts","../src/models/EventParticipant.ts","../src/collections/EventParticipantCollection.ts","../src/models/EventSeries.ts","../src/collections/EventSeriesCollection.ts","../src/models/EventType.ts","../src/collections/EventTypeCollection.ts"],"sourcesContent":["/**\n * Self-registers this package's build-time manifest before any @smrt() decorator\n * in the package fires. Fixes issue #1132: in consumer runtimes (tsx, SvelteKit\n * SSR, plain `vite dev`) the decorator's synchronous manifest lookup previously\n * missed because no step populated the global manifest cache — classes got\n * registered with zero fields and `save()` / `toJSON()` silently dropped every\n * declared property.\n *\n * Import this module as the first statement in `src/index.ts` so its top-level\n * side effect runs ahead of any class module's @smrt() decorator.\n *\n * Silent no-op in dev/test, where the vitest plugin already populates manifests\n * via a different path. Only needs to succeed in the published dist output.\n *\n * @see https://github.com/happyvertical/smrt/issues/1132\n */\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\n\n// `new URL('./manifest.json', import.meta.url)` resolves at runtime to the\n// manifest sitting next to this module's compiled output. Vite warns at build\n// time that it cannot pre-resolve the URL; that is the intended behavior —\n// the URL must resolve to dist/manifest.json at runtime, not be inlined.\nObjectRegistry.registerPackageManifest(\n new URL('./manifest.json', import.meta.url),\n);\n","import type { SmrtObjectOptions } from '@happyvertical/smrt-core';\nimport {\n crossPackageRef,\n field,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\n\nexport interface EventAssetOptions extends SmrtObjectOptions {\n eventId?: string;\n assetId?: string;\n relationship?: string;\n sortOrder?: number;\n tenantId?: string | null;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: 'event_assets',\n conflictColumns: ['event_id', 'asset_id', 'relationship'],\n api: false,\n mcp: false,\n cli: false,\n})\nexport class EventAsset extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @foreignKey('Event', { required: true })\n eventId = '';\n\n @crossPackageRef('@happyvertical/smrt-assets:Asset', { required: true })\n assetId = '';\n\n @field({ required: true })\n relationship = 'attachment';\n\n @field()\n sortOrder = 0;\n\n constructor(options: EventAssetOptions = {}) {\n super(options);\n if (options.eventId) this.eventId = options.eventId;\n if (options.assetId) this.assetId = options.assetId;\n if (options.relationship) this.relationship = options.relationship;\n if (options.sortOrder !== undefined) this.sortOrder = options.sortOrder;\n if (options.tenantId !== undefined) this.tenantId = options.tenantId;\n }\n}\n","import type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport type { SmrtCollectionOptions } from '@happyvertical/smrt-core';\nimport { SmrtJunction, smrt } from '@happyvertical/smrt-core';\nimport { EventAsset } from '../models/EventAsset';\nimport type { EventCollection } from './EventCollection';\n\nexport interface EventAssetCollectionOptions extends SmrtCollectionOptions {}\n\n@smrt({\n api: false,\n mcp: false,\n cli: false,\n})\nexport class EventAssetCollection extends SmrtJunction<EventAsset> {\n static readonly _itemClass = EventAsset;\n protected leftField = 'eventId';\n protected rightField = 'assetId';\n\n private eventCollectionPromise: Promise<EventCollection> | null = null;\n\n private async getEventCollection(): Promise<EventCollection> {\n if (!this.eventCollectionPromise) {\n const { EventCollection } = await import('./EventCollection');\n this.eventCollectionPromise = EventCollection.create({ db: this.db });\n }\n\n return this.eventCollectionPromise;\n }\n\n async getAssets(eventId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(\n await this.getEventCollection(),\n eventId,\n relationship,\n );\n }\n\n async addAsset(\n eventId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n await this.getEventCollection(),\n 'Event',\n eventId,\n asset,\n relationship,\n sortOrder,\n );\n }\n\n async removeAsset(\n eventId: string,\n assetId: string,\n relationship?: string,\n ): Promise<void> {\n await removeOwnedAssetFromCollection(\n await this.getEventCollection(),\n 'Event',\n eventId,\n assetId,\n relationship,\n );\n }\n}\n","/**\n * Event model - Hierarchical event instances\n *\n * Infinitely nestable: Game → Period → Goal → Assist\n */\n\nimport type { Asset } from '@happyvertical/smrt-assets';\nimport {\n assertValidOwnedAssetRelationship,\n assertValidOwnedAssetSortOrder,\n resolveOwnedAssetsById,\n} from '@happyvertical/smrt-assets';\nimport {\n crossPackageRef,\n foreignKey,\n SmrtHierarchical,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventOptions, EventStatus } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class Event extends SmrtHierarchical {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n name: string = '';\n @foreignKey('EventSeries')\n seriesId = ''; // FK to EventSeries (nullable for standalone events)\n // parentId inherited from SmrtHierarchical (self-reference to parent Event)\n @foreignKey('EventType')\n typeId = ''; // FK to EventType\n @crossPackageRef('@happyvertical/smrt-places:Place')\n placeId = ''; // FK to Place (from @happyvertical/smrt-places)\n description = '';\n startDate: Date | null = null;\n endDate: Date | null = null;\n status: EventStatus = 'scheduled';\n round: number | null = null; // Sequence/round number in series\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventOptions = {}) {\n super(options);\n\n if (options.seriesId !== undefined) this.seriesId = options.seriesId;\n if (options.parentId !== undefined)\n this.parentId = options.parentId ?? null;\n if (options.typeId) this.typeId = options.typeId;\n if (options.placeId !== undefined) this.placeId = options.placeId;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.startDate !== undefined)\n this.startDate = options.startDate || null;\n if (options.endDate !== undefined) this.endDate = options.endDate || null;\n if (options.status !== undefined) this.status = options.status;\n if (options.round !== undefined) this.round = options.round;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, any> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, any>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, any>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Update event status\n *\n * @param newStatus - New status to set\n */\n async updateStatus(newStatus: EventStatus): Promise<void> {\n this.status = newStatus;\n this.updatedAt = new Date();\n await this.save();\n }\n\n /**\n * Get the series for this event\n *\n * @returns EventSeries instance or null\n */\n async getSeries() {\n if (!this.seriesId) return null;\n\n const { EventSeriesCollection } = await import(\n '../collections/EventSeriesCollection'\n );\n const collection = await (EventSeriesCollection as any).create(\n this.options,\n );\n\n return await collection.get({ id: this.seriesId });\n }\n\n /**\n * Get the event type\n *\n * @returns EventType instance or null\n */\n async getType() {\n if (!this.typeId) return null;\n\n const { EventTypeCollection } = await import(\n '../collections/EventTypeCollection'\n );\n const collection = await (EventTypeCollection as any).create(this.options);\n\n return await collection.get({ id: this.typeId });\n }\n\n /**\n * Get the place for this event\n *\n * @returns Place instance or null\n */\n async getPlace() {\n if (!this.placeId) return null;\n\n try {\n const { PlaceCollection } = await import('@happyvertical/smrt-places');\n const collection = await (PlaceCollection as any).create(this.options);\n\n return await collection.get({ id: this.placeId });\n } catch {\n // @happyvertical/smrt-places not available\n return null;\n }\n }\n\n // Hierarchy traversal (getParent / getChildren / getAncestors /\n // getDescendants / getHierarchy / moveTo) provided by SmrtHierarchical.\n\n /**\n * Get the root event (top-level ancestor) of this event's hierarchy.\n *\n * @returns Root event instance — `this` when already root\n */\n async getRootEvent(): Promise<Event> {\n const ancestors = await this.getAncestors();\n return (ancestors.length > 0 ? ancestors[0] : this) as Event;\n }\n\n /**\n * Get all participants for this event\n *\n * @returns Array of EventParticipant instances\n */\n async getParticipants() {\n const { EventParticipantCollection } = await import(\n '../collections/EventParticipantCollection'\n );\n const collection = await (EventParticipantCollection as any).create(\n this.options,\n );\n\n return await collection.list({ where: { eventId: this.id } });\n }\n\n private async getEventAssetCollection() {\n const { EventAssetCollection } = await import(\n '../collections/EventAssetCollection'\n );\n return EventAssetCollection.create({ db: this.db });\n }\n async getAssets(relationship?: string): Promise<Asset[]> {\n if (!this.id) {\n return [];\n }\n\n const eventAssets = await this.getEventAssetCollection();\n const linkedAssets = await eventAssets.byLeft(\n this.id,\n relationship ? { relationship } : {},\n );\n\n return resolveOwnedAssetsById(\n this.db,\n linkedAssets.map((link) => link.assetId),\n this.tenantId,\n );\n }\n\n async addAsset(\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n if (!this.id || !asset.id) {\n throw new Error('Cannot associate unsaved event or asset');\n }\n\n assertValidOwnedAssetRelationship(relationship);\n assertValidOwnedAssetSortOrder(sortOrder);\n\n const eventAssets = await this.getEventAssetCollection();\n await eventAssets.attach(this.id, asset.id, {\n relationship,\n sortOrder,\n tenantId: this.tenantId,\n });\n }\n\n async removeAsset(assetId: string, relationship?: string): Promise<void> {\n if (!this.id) {\n return;\n }\n\n const eventAssets = await this.getEventAssetCollection();\n await eventAssets.detach(\n this.id,\n assetId,\n relationship ? { relationship } : {},\n );\n }\n\n /**\n * Check if event is currently in progress\n *\n * @returns True if current time is between start and end\n */\n isInProgress(): boolean {\n if (this.status !== 'in_progress') return false;\n\n const now = new Date();\n if (this.startDate && now < this.startDate) return false;\n if (this.endDate && now > this.endDate) return false;\n\n return true;\n }\n\n /**\n * Check if event is a root event (no parent)\n *\n * @returns True if parentId is null/empty\n */\n isRoot(): boolean {\n return !this.parentId;\n }\n}\n","/**\n * EventCollection - Collection manager for Event objects\n *\n * Provides hierarchy traversal, filtering, and search capabilities.\n */\n\nimport type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { Event } from '../models/Event';\nimport type { EventSearchFilters, EventStatus } from '../types';\n\nexport class EventCollection extends SmrtCollection<Event> {\n static readonly _itemClass = Event;\n\n /**\n * Get events by series\n *\n * @param seriesId - EventSeries ID\n * @returns Array of Event instances\n */\n async getBySeriesId(seriesId: string): Promise<Event[]> {\n return await this.list({ where: { seriesId } });\n }\n\n /**\n * Get events at a specific place\n *\n * @param placeId - Place ID\n * @returns Array of Event instances\n */\n async getByPlace(placeId: string): Promise<Event[]> {\n return await this.list({ where: { placeId } });\n }\n\n /**\n * Get events by date range\n *\n * @param startDate - Start of date range\n * @param endDate - End of date range\n * @returns Array of Event instances\n */\n async getByDateRange(startDate: Date, endDate: Date): Promise<Event[]> {\n const allEvents = await this.list({});\n\n return allEvents.filter((event) => {\n if (!event.startDate) return false;\n return event.startDate >= startDate && event.startDate <= endDate;\n });\n }\n\n /**\n * Get upcoming events\n *\n * @param limit - Maximum number of events to return\n * @returns Array of Event instances starting in the future\n */\n async getUpcoming(limit?: number): Promise<Event[]> {\n const allEvents = await this.list({});\n const now = new Date();\n\n const upcoming = allEvents\n .filter((event) => event.startDate && event.startDate > now)\n .sort((a, b) => {\n if (!a.startDate || !b.startDate) return 0;\n return a.startDate.getTime() - b.startDate.getTime();\n });\n\n return limit ? upcoming.slice(0, limit) : upcoming;\n }\n\n /**\n * Get events by status\n *\n * @param status - Event status to filter by\n * @returns Array of Event instances\n */\n async getByStatus(status: EventStatus): Promise<Event[]> {\n return await this.list({ where: { status } });\n }\n\n /**\n * Get events by type\n *\n * @param typeId - EventType ID\n * @returns Array of Event instances\n */\n async getByType(typeId: string): Promise<Event[]> {\n return await this.list({ where: { typeId } });\n }\n\n /**\n * Get root events (no parent)\n *\n * @returns Array of Event instances with no parent\n */\n async getRootEvents(): Promise<Event[]> {\n const allEvents = await this.list({});\n return allEvents.filter((event) => !event.parentId);\n }\n\n /**\n * Get children of a parent event\n *\n * @param parentId - Parent event ID\n * @returns Array of child Event instances\n */\n async getByParent(parentId: string): Promise<Event[]> {\n return await this.list({ where: { parentId } });\n }\n\n /**\n * Get full event tree (hierarchy)\n *\n * @param eventId - Root event ID\n * @returns Object with root event and nested children\n */\n async getEventTree(eventId: string): Promise<Event | null> {\n const event = await this.get({ id: eventId });\n if (!event) return null;\n\n return await event.getHierarchy().then((h) => h.current);\n }\n\n async getAssets(eventId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(this, eventId, relationship);\n }\n\n async addAsset(\n eventId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n this,\n 'Event',\n eventId,\n asset,\n relationship,\n sortOrder,\n );\n }\n\n async removeAsset(\n eventId: string,\n assetId: string,\n relationship?: string,\n ): Promise<void> {\n await removeOwnedAssetFromCollection(\n this,\n 'Event',\n eventId,\n assetId,\n relationship,\n );\n }\n\n /**\n * Search events with filters\n *\n * @param query - Search query for name/description\n * @param filters - Additional filter criteria\n * @returns Array of matching Event instances\n */\n async search(query: string, filters?: EventSearchFilters): Promise<Event[]> {\n let events = await this.list({});\n\n // Filter by query\n if (query) {\n const lowerQuery = query.toLowerCase();\n events = events.filter(\n (e) =>\n e.name?.toLowerCase().includes(lowerQuery) ||\n e.description?.toLowerCase().includes(lowerQuery),\n );\n }\n\n // Apply filters\n if (filters) {\n if (filters.typeId) {\n events = events.filter((e) => e.typeId === filters.typeId);\n }\n if (filters.seriesId) {\n events = events.filter((e) => e.seriesId === filters.seriesId);\n }\n if (filters.placeId) {\n events = events.filter((e) => e.placeId === filters.placeId);\n }\n if (filters.status) {\n if (Array.isArray(filters.status)) {\n events = events.filter((e) => filters.status?.includes(e.status));\n } else {\n events = events.filter((e) => e.status === filters.status);\n }\n }\n if (filters.startDate) {\n const startDate = filters.startDate;\n events = events.filter((e) => e.startDate && e.startDate >= startDate);\n }\n if (filters.endDate) {\n const endDate = filters.endDate;\n events = events.filter((e) => e.startDate && e.startDate <= endDate);\n }\n if (filters.organizerId) {\n // Filter by series organizer\n events = events.filter(async (e) => {\n const series = await e.getSeries();\n return series && series.organizerId === filters.organizerId;\n });\n }\n }\n\n return events;\n }\n\n /**\n * Get events in progress\n *\n * @returns Array of Event instances currently in progress\n */\n async getInProgress(): Promise<Event[]> {\n const inProgressEvents = await this.getByStatus('in_progress');\n return inProgressEvents.filter((event) => event.isInProgress());\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all events for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of Event instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<Event[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global events (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of Event instances with no tenant\n */\n async findGlobal(): Promise<Event[]> {\n return queryGlobal<Event>(this);\n }\n\n /**\n * Find events for a tenant including global events.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of Event instances for the tenant and global events\n */\n async findWithGlobals(tenantId: string): Promise<Event[]> {\n return queryWithGlobals<Event>(this, tenantId, 'Event.findWithGlobals');\n }\n}\n","/**\n * EventParticipant model - Links participants to events\n *\n * Tracks who participated in an event with role and placement\n */\n\nimport {\n crossPackageRef,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventParticipantOptions } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n // Junction table - uses event_id + profile_id + role as natural key\n // instead of slug-based conflict columns\n conflictColumns: ['event_id', 'profile_id', 'role'],\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class EventParticipant extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n // id inherited from SmrtObject\n\n @foreignKey('Event')\n eventId = ''; // FK to Event\n @crossPackageRef('@happyvertical/smrt-profiles:Profile')\n profileId = ''; // FK to Profile (from @happyvertical/smrt-profiles)\n role: string = ''; // Participant role (ParticipantRole or custom)\n placement: number | null = null; // Numeric position/placement\n groupId = ''; // Optional grouping (e.g., team ID for individual players)\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventParticipantOptions = {}) {\n super(options);\n\n if (options.eventId) this.eventId = options.eventId;\n if (options.profileId) this.profileId = options.profileId;\n if (options.role !== undefined) this.role = options.role;\n if (options.placement !== undefined) this.placement = options.placement;\n if (options.groupId !== undefined) this.groupId = options.groupId;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, any> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, any>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, any>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Get the event for this participant\n *\n * @returns Event instance or null\n */\n async getEvent() {\n if (!this.eventId) return null;\n\n const { EventCollection } = await import('../collections/EventCollection');\n const collection = await (EventCollection as any).create(this.options);\n\n return await collection.get({ id: this.eventId });\n }\n\n /**\n * Get the profile for this participant\n *\n * @returns Profile instance or null\n */\n async getProfile() {\n if (!this.profileId) return null;\n\n try {\n const { ProfileCollection } = await import(\n '@happyvertical/smrt-profiles'\n );\n const collection = await (ProfileCollection as any).create(this.options);\n\n return await collection.get({ id: this.profileId });\n } catch {\n // @happyvertical/smrt-profiles not available\n return null;\n }\n }\n\n /**\n * Get group participants (others with same groupId)\n *\n * @returns Array of EventParticipant instances\n */\n async getGroupParticipants(): Promise<EventParticipant[]> {\n if (!this.groupId) return [];\n\n const { EventParticipantCollection } = await import(\n '../collections/EventParticipantCollection'\n );\n const collection = await (EventParticipantCollection as any).create(\n this.options,\n );\n\n const participants = await collection.list({\n where: { eventId: this.eventId, groupId: this.groupId },\n });\n\n // Exclude self from results\n return participants.filter((p: EventParticipant) => p.id !== this.id);\n }\n\n /**\n * Check if this is a home participant (placement = 0)\n *\n * @returns True if placement is 0\n */\n isHome(): boolean {\n return this.placement === 0;\n }\n\n /**\n * Check if this is an away participant (placement = 1)\n *\n * @returns True if placement is 1\n */\n isAway(): boolean {\n return this.placement === 1;\n }\n}\n","/**\n * EventParticipantCollection — junction collection for Event ↔ Profile links.\n *\n * The generic junction surface (byLeft/byRight/attach/detach/setLinks) comes\n * from `SmrtJunction`. Domain-specific helpers (placement-ordered queries,\n * home/away accessors, statistics, tenant scoping) live alongside.\n */\n\nimport { SmrtJunction, smrt } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventParticipant } from '../models/EventParticipant';\nimport type { ParticipantSearchFilters } from '../types';\n\n// Decorator with empty config — only needed so the scanner detects the\n// class. See FactContentCollection for the full rationale.\n@smrt()\nexport class EventParticipantCollection extends SmrtJunction<EventParticipant> {\n static readonly _itemClass = EventParticipant;\n protected leftField = 'eventId';\n protected rightField = 'profileId';\n // EventParticipant has no sortOrder column; `placement` is domain ordering\n // (0=home, 1=away) and must not be auto-assigned by setLinks.\n protected sortField: string | null = null;\n protected positionField: string | null = null;\n\n // ============================================\n // Domain helpers\n // ============================================\n\n /**\n * Get participants ordered by placement (nulls last).\n */\n async getByPlacement(eventId: string): Promise<EventParticipant[]> {\n const participants = await this.byLeft(eventId);\n\n return participants.sort((a, b) => {\n if (a.placement === null && b.placement === null) return 0;\n if (a.placement === null) return 1;\n if (b.placement === null) return -1;\n return a.placement - b.placement;\n });\n }\n\n /**\n * Get participants by group within an event.\n */\n async getByGroup(\n eventId: string,\n groupId: string,\n ): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { groupId });\n }\n\n /**\n * Get the home participant(s) — placement = 0.\n */\n async getHome(eventId: string): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { placement: 0 });\n }\n\n /**\n * Get the away participant(s) — placement = 1.\n */\n async getAway(eventId: string): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { placement: 1 });\n }\n\n /**\n * Search participants with optional filters.\n */\n async search(filters: ParticipantSearchFilters): Promise<EventParticipant[]> {\n let participants = await this.list({});\n\n if (filters.eventId) {\n participants = participants.filter((p) => p.eventId === filters.eventId);\n }\n if (filters.profileId) {\n participants = participants.filter(\n (p) => p.profileId === filters.profileId,\n );\n }\n if (filters.role) {\n participants = participants.filter((p) => p.role === filters.role);\n }\n if (filters.groupId) {\n participants = participants.filter((p) => p.groupId === filters.groupId);\n }\n\n return participants;\n }\n\n /**\n * Get participation statistics for a profile, optionally filtered by event type.\n */\n async getParticipantStats(\n profileId: string,\n eventTypeId?: string,\n ): Promise<{\n totalEvents: number;\n byRole: Record<string, number>;\n byPlacement: Record<number, number>;\n }> {\n const participants = await this.byRight(profileId);\n\n let filteredParticipants = participants;\n if (eventTypeId) {\n filteredParticipants = [];\n for (const participant of participants) {\n const event = await participant.getEvent();\n if (event && event.typeId === eventTypeId) {\n filteredParticipants.push(participant);\n }\n }\n }\n\n const byRole: Record<string, number> = {};\n const byPlacement: Record<number, number> = {};\n\n for (const participant of filteredParticipants) {\n byRole[participant.role] = (byRole[participant.role] || 0) + 1;\n\n if (participant.placement !== null) {\n byPlacement[participant.placement] =\n (byPlacement[participant.placement] || 0) + 1;\n }\n }\n\n return {\n totalEvents: filteredParticipants.length,\n byRole,\n byPlacement,\n };\n }\n\n // ============================================\n // Tenant helpers\n // ============================================\n\n async findByTenant(tenantId: string): Promise<EventParticipant[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global participants (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n */\n async findGlobal(): Promise<EventParticipant[]> {\n return queryGlobal<EventParticipant>(this);\n }\n\n /**\n * Find participants for a tenant plus all global participants.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n */\n async findWithGlobals(tenantId: string): Promise<EventParticipant[]> {\n return queryWithGlobals<EventParticipant>(\n this,\n tenantId,\n 'EventParticipant.findWithGlobals',\n );\n }\n}\n","/**\n * EventSeries model - Groups related events (season, tour, conference, etc.)\n *\n * Examples: '2024 NBA Finals', 'Summer Tour 2024', 'Town Council 2024'\n */\n\nimport {\n crossPackageRef,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventSeriesOptions, RecurrencePattern } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class EventSeries extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n name: string = '';\n @foreignKey('EventType')\n typeId = ''; // FK to EventType\n @crossPackageRef('@happyvertical/smrt-profiles:Profile')\n organizerId = ''; // FK to Profile (from @happyvertical/smrt-profiles)\n description = '';\n startDate: Date | null = null;\n endDate: Date | null = null;\n recurrence = ''; // JSON recurrence pattern (stored as text)\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system (e.g., 'ticketmaster', 'espn')\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventSeriesOptions = {}) {\n super(options);\n\n if (options.typeId) this.typeId = options.typeId;\n if (options.organizerId) this.organizerId = options.organizerId;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.startDate !== undefined)\n this.startDate = options.startDate || null;\n if (options.endDate !== undefined) this.endDate = options.endDate || null;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle recurrence - can be object or JSON string\n if (options.recurrence !== undefined) {\n if (typeof options.recurrence === 'string') {\n this.recurrence = options.recurrence;\n } else {\n this.recurrence = JSON.stringify(options.recurrence);\n }\n }\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get recurrence pattern as parsed object\n *\n * @returns Parsed recurrence pattern or null\n */\n getRecurrence(): RecurrencePattern | null {\n if (!this.recurrence) return null;\n try {\n return JSON.parse(this.recurrence) as RecurrencePattern;\n } catch {\n return null;\n }\n }\n\n /**\n * Set recurrence pattern from object\n *\n * @param pattern - Recurrence pattern to store\n */\n setRecurrence(pattern: RecurrencePattern): void {\n this.recurrence = JSON.stringify(pattern);\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, any> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, any>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, any>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Get the event type for this series\n *\n * @returns EventType instance or null\n */\n async getType() {\n if (!this.typeId) return null;\n\n const { EventTypeCollection } = await import(\n '../collections/EventTypeCollection'\n );\n const collection = await (EventTypeCollection as any).create(this.options);\n\n return await collection.get({ id: this.typeId });\n }\n\n /**\n * Get the organizer profile for this series\n *\n * @returns Profile instance or null\n */\n async getOrganizer() {\n if (!this.organizerId) return null;\n\n // Import Profile from @happyvertical/smrt-profiles\n try {\n const { ProfileCollection } = await import(\n '@happyvertical/smrt-profiles'\n );\n const collection = await (ProfileCollection as any).create(this.options);\n\n return await collection.get({ id: this.organizerId });\n } catch {\n // @happyvertical/smrt-profiles not available\n return null;\n }\n }\n\n /**\n * Get all events in this series\n *\n * @returns Array of Event instances\n */\n async getEvents() {\n const { EventCollection } = await import('../collections/EventCollection');\n const collection = await (EventCollection as any).create(this.options);\n\n return await collection.list({ where: { seriesId: this.id } });\n }\n\n /**\n * Check if series is currently active\n *\n * @returns True if current date is between start and end\n */\n isActive(): boolean {\n const now = new Date();\n if (this.startDate && now < this.startDate) return false;\n if (this.endDate && now > this.endDate) return false;\n return true;\n }\n}\n","/**\n * EventSeriesCollection - Collection manager for EventSeries objects\n *\n * Provides queries for series by organizer, status, and date ranges.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventSeries } from '../models/EventSeries';\nimport type { EventSeriesSearchFilters } from '../types';\n\nexport class EventSeriesCollection extends SmrtCollection<EventSeries> {\n static readonly _itemClass = EventSeries;\n\n /**\n * Get series by organizer\n *\n * @param organizerId - Profile ID of the organizer\n * @returns Array of EventSeries instances\n */\n async getByOrganizer(organizerId: string): Promise<EventSeries[]> {\n return await this.list({ where: { organizerId } });\n }\n\n /**\n * Get currently active series\n *\n * @returns Array of EventSeries instances active today\n */\n async getActive(): Promise<EventSeries[]> {\n const allSeries = await this.list({});\n const now = new Date();\n\n return allSeries.filter((series) => {\n if (series.startDate && now < series.startDate) return false;\n if (series.endDate && now > series.endDate) return false;\n return true;\n });\n }\n\n /**\n * Get upcoming series\n *\n * @param limit - Maximum number of series to return\n * @returns Array of EventSeries instances starting in the future\n */\n async getUpcoming(limit?: number): Promise<EventSeries[]> {\n const allSeries = await this.list({});\n const now = new Date();\n\n const upcoming = allSeries\n .filter((series) => series.startDate && series.startDate > now)\n .sort((a, b) => {\n if (!a.startDate || !b.startDate) return 0;\n return a.startDate.getTime() - b.startDate.getTime();\n });\n\n return limit ? upcoming.slice(0, limit) : upcoming;\n }\n\n /**\n * Get series by type\n *\n * @param typeId - EventType ID\n * @returns Array of EventSeries instances\n */\n async getByType(typeId: string): Promise<EventSeries[]> {\n return await this.list({ where: { typeId } });\n }\n\n /**\n * Search series with filters\n *\n * @param query - Search query for name/description\n * @param filters - Additional filter criteria\n * @returns Array of matching EventSeries instances\n */\n async search(\n query: string,\n filters?: EventSeriesSearchFilters,\n ): Promise<EventSeries[]> {\n let series = await this.list({});\n\n // Filter by query\n if (query) {\n const lowerQuery = query.toLowerCase();\n series = series.filter(\n (s) =>\n s.name?.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery),\n );\n }\n\n // Apply filters\n if (filters) {\n if (filters.typeId) {\n series = series.filter((s) => s.typeId === filters.typeId);\n }\n if (filters.organizerId) {\n series = series.filter((s) => s.organizerId === filters.organizerId);\n }\n if (filters.startDate) {\n const startDate = filters.startDate;\n series = series.filter((s) => s.startDate && s.startDate >= startDate);\n }\n if (filters.endDate) {\n const endDate = filters.endDate;\n series = series.filter((s) => s.endDate && s.endDate <= endDate);\n }\n }\n\n return series;\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all event series for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventSeries instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<EventSeries[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global event series (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of EventSeries instances with no tenant\n */\n async findGlobal(): Promise<EventSeries[]> {\n return queryGlobal<EventSeries>(this);\n }\n\n /**\n * Find event series for a tenant including global series.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventSeries instances for the tenant and global series\n */\n async findWithGlobals(tenantId: string): Promise<EventSeries[]> {\n return queryWithGlobals<EventSeries>(\n this,\n tenantId,\n 'EventSeries.findWithGlobals',\n );\n }\n}\n","/**\n * EventType model - Defines types/categories of events\n *\n * Examples: 'basketball-game', 'concert', 'conference', 'goal', 'period'\n */\n\nimport { field, SmrtObject, smrt } from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventTypeOptions } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create'] },\n cli: true,\n})\nexport class EventType extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ required: true })\n name: string = '';\n\n description: string = ''; // Optional description\n schema: string = ''; // JSON schema for event metadata (stored as text)\n participantSchema: string = ''; // JSON schema for participant metadata (stored as text)\n\n // Timestamps\n createdAt: Date = new Date();\n updatedAt: Date = new Date();\n\n constructor(options: EventTypeOptions = {}) {\n super(options);\n if (options.name) this.name = options.name;\n if (options.description !== undefined)\n this.description = options.description;\n\n // Handle schema - can be object or JSON string\n if (options.schema !== undefined) {\n if (typeof options.schema === 'string') {\n this.schema = options.schema;\n } else {\n this.schema = JSON.stringify(options.schema);\n }\n }\n\n // Handle participant schema\n if (options.participantSchema !== undefined) {\n if (typeof options.participantSchema === 'string') {\n this.participantSchema = options.participantSchema;\n } else {\n this.participantSchema = JSON.stringify(options.participantSchema);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get schema as parsed object\n *\n * @returns Parsed schema object or empty object if no schema\n */\n getSchema(): Record<string, any> {\n if (!this.schema) return {};\n try {\n return JSON.parse(this.schema);\n } catch {\n return {};\n }\n }\n\n /**\n * Set schema from object\n *\n * @param data - Schema object to store\n */\n setSchema(data: Record<string, any>): void {\n this.schema = JSON.stringify(data);\n }\n\n /**\n * Get participant schema as parsed object\n *\n * @returns Parsed participant schema object or empty object\n */\n getParticipantSchema(): Record<string, any> {\n if (!this.participantSchema) return {};\n try {\n return JSON.parse(this.participantSchema);\n } catch {\n return {};\n }\n }\n\n /**\n * Set participant schema from object\n *\n * @param data - Participant schema object to store\n */\n setParticipantSchema(data: Record<string, any>): void {\n this.participantSchema = JSON.stringify(data);\n }\n\n /**\n * Convenience method for slug-based lookup\n *\n * @param slug - The slug to search for\n * @returns EventType instance or null if not found\n */\n static async getBySlug(_slug: string): Promise<EventType | null> {\n // Will be auto-implemented by SMRT\n return null;\n }\n}\n","/**\n * EventTypeCollection - Collection manager for EventType objects\n *\n * Provides lookup and creation for event types.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventType } from '../models/EventType';\n\nexport class EventTypeCollection extends SmrtCollection<EventType> {\n static readonly _itemClass = EventType;\n\n /**\n * Get or create an event type by slug\n *\n * @param slug - EventType slug (e.g., 'basketball-game', 'concert')\n * @param name - Optional display name (defaults to capitalized slug)\n * @returns EventType instance\n */\n async getOrCreate(slug: string, name?: string): Promise<EventType> {\n // First try to find existing type with this slug\n const existing = await this.get({ slug });\n\n if (existing) {\n return existing;\n }\n\n // Create new type with auto-generated name if not provided\n const displayName =\n name || slug.replace(/-/g, ' ').replace(/\\b\\w/g, (l) => l.toUpperCase());\n\n return await this.create({\n slug,\n name: displayName,\n });\n }\n\n /**\n * Get an event type by slug\n *\n * @param slug - EventType slug to search for\n * @returns EventType instance or null if not found\n */\n async getBySlug(slug: string): Promise<EventType | null> {\n return await this.get({ slug });\n }\n\n /**\n * Initialize default event types\n *\n * Creates common event types if they don't exist:\n * - Sports: game, period, goal, assist, penalty\n * - Entertainment: concert, performance, song\n * - Professional: conference, session, presentation, workshop\n * - Community: meeting, agenda-item, motion, vote\n *\n * @returns Array of created/existing event types\n */\n async initializeDefaults(): Promise<EventType[]> {\n const defaults = [\n // Sports\n { slug: 'game', name: 'Game' },\n { slug: 'match', name: 'Match' },\n { slug: 'period', name: 'Period' },\n { slug: 'quarter', name: 'Quarter' },\n { slug: 'inning', name: 'Inning' },\n { slug: 'goal', name: 'Goal' },\n { slug: 'assist', name: 'Assist' },\n { slug: 'penalty', name: 'Penalty' },\n { slug: 'substitution', name: 'Substitution' },\n\n // Entertainment\n { slug: 'concert', name: 'Concert' },\n { slug: 'performance', name: 'Performance' },\n { slug: 'set', name: 'Set' },\n { slug: 'song', name: 'Song' },\n { slug: 'theater', name: 'Theater' },\n { slug: 'show', name: 'Show' },\n\n // Professional\n { slug: 'conference', name: 'Conference' },\n { slug: 'session', name: 'Session' },\n { slug: 'presentation', name: 'Presentation' },\n { slug: 'workshop', name: 'Workshop' },\n { slug: 'seminar', name: 'Seminar' },\n { slug: 'keynote', name: 'Keynote' },\n { slug: 'panel', name: 'Panel' },\n\n // Community\n { slug: 'meeting', name: 'Meeting' },\n { slug: 'town-hall', name: 'Town Hall' },\n { slug: 'agenda-item', name: 'Agenda Item' },\n { slug: 'motion', name: 'Motion' },\n { slug: 'amendment', name: 'Amendment' },\n { slug: 'vote', name: 'Vote' },\n { slug: 'discussion', name: 'Discussion' },\n\n // General\n { slug: 'event', name: 'Event' },\n { slug: 'activity', name: 'Activity' },\n { slug: 'action', name: 'Action' },\n ];\n\n const types: EventType[] = [];\n for (const def of defaults) {\n const type = await this.getOrCreate(def.slug, def.name);\n types.push(type);\n }\n\n return types;\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all event types for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventType instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<EventType[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global event types (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of EventType instances with no tenant\n */\n async findGlobal(): Promise<EventType[]> {\n return queryGlobal<EventType>(this);\n }\n\n /**\n * Find event types for a tenant including global types.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventType instances for the tenant and global types\n */\n async findWithGlobals(tenantId: string): Promise<EventType[]> {\n return queryWithGlobals<EventType>(\n this,\n tenantId,\n 'EventType.findWithGlobals',\n );\n }\n}\n"],"names":["__decorateClass","EventCollection","__publicField","EventSeriesCollection","EventTypeCollection","EventParticipantCollection","EventAssetCollection","tenantId"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/__smrt-register__.ts","../src/models/EventAsset.ts","../src/collections/EventAssetCollection.ts","../src/models/Event.ts","../src/collections/EventCollection.ts","../src/models/EventParticipant.ts","../src/collections/EventParticipantCollection.ts","../src/models/EventSeries.ts","../src/collections/EventSeriesCollection.ts","../src/models/EventType.ts","../src/collections/EventTypeCollection.ts"],"sourcesContent":["/**\n * Self-registers this package's build-time manifest before any @smrt() decorator\n * in the package fires. Fixes issue #1132: in consumer runtimes (tsx, SvelteKit\n * SSR, plain `vite dev`) the decorator's synchronous manifest lookup previously\n * missed because no step populated the global manifest cache — classes got\n * registered with zero fields and `save()` / `toJSON()` silently dropped every\n * declared property.\n *\n * Import this module as the first statement in `src/index.ts` so its top-level\n * side effect runs ahead of any class module's @smrt() decorator.\n *\n * Silent no-op in dev/test, where the vitest plugin already populates manifests\n * via a different path. Only needs to succeed in the published dist output.\n *\n * @see https://github.com/happyvertical/smrt/issues/1132\n */\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\n\n// `new URL('./manifest.json', import.meta.url)` resolves at runtime to the\n// manifest sitting next to this module's compiled output. Vite warns at build\n// time that it cannot pre-resolve the URL; that is the intended behavior —\n// the URL must resolve to dist/manifest.json at runtime, not be inlined.\nObjectRegistry.registerPackageManifest(\n new URL('./manifest.json', import.meta.url),\n);\n","import type { SmrtObjectOptions } from '@happyvertical/smrt-core';\nimport {\n crossPackageRef,\n field,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\n\nexport interface EventAssetOptions extends SmrtObjectOptions {\n eventId?: string;\n assetId?: string;\n relationship?: string;\n sortOrder?: number;\n tenantId?: string | null;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: 'event_assets',\n conflictColumns: ['event_id', 'asset_id', 'relationship'],\n api: false,\n mcp: false,\n cli: false,\n})\nexport class EventAsset extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @foreignKey('Event', { required: true })\n eventId = '';\n\n @crossPackageRef('@happyvertical/smrt-assets:Asset', { required: true })\n assetId = '';\n\n @field({ required: true })\n relationship = 'attachment';\n\n @field()\n sortOrder = 0;\n\n constructor(options: EventAssetOptions = {}) {\n super(options);\n if (options.eventId) this.eventId = options.eventId;\n if (options.assetId) this.assetId = options.assetId;\n if (options.relationship) this.relationship = options.relationship;\n if (options.sortOrder !== undefined) this.sortOrder = options.sortOrder;\n if (options.tenantId !== undefined) this.tenantId = options.tenantId;\n }\n}\n","import type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport type { SmrtCollectionOptions } from '@happyvertical/smrt-core';\nimport { SmrtJunction, smrt } from '@happyvertical/smrt-core';\nimport { EventAsset } from '../models/EventAsset';\nimport type { EventCollection } from './EventCollection';\n\nexport interface EventAssetCollectionOptions extends SmrtCollectionOptions {}\n\n@smrt({\n api: false,\n mcp: false,\n cli: false,\n})\nexport class EventAssetCollection extends SmrtJunction<EventAsset> {\n static readonly _itemClass = EventAsset;\n protected leftField = 'eventId';\n protected rightField = 'assetId';\n\n private eventCollectionPromise: Promise<EventCollection> | null = null;\n\n private async getEventCollection(): Promise<EventCollection> {\n if (!this.eventCollectionPromise) {\n const { EventCollection } = await import('./EventCollection');\n this.eventCollectionPromise = EventCollection.create({ db: this.db });\n }\n\n return this.eventCollectionPromise;\n }\n\n async getAssets(eventId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(\n await this.getEventCollection(),\n eventId,\n relationship,\n );\n }\n\n async addAsset(\n eventId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n await this.getEventCollection(),\n 'Event',\n eventId,\n asset,\n relationship,\n sortOrder,\n );\n }\n\n async removeAsset(\n eventId: string,\n assetId: string,\n relationship?: string,\n ): Promise<void> {\n await removeOwnedAssetFromCollection(\n await this.getEventCollection(),\n 'Event',\n eventId,\n assetId,\n relationship,\n );\n }\n}\n","/**\n * Event model - Hierarchical event instances\n *\n * Infinitely nestable: Game → Period → Goal → Assist\n */\n\nimport type { Asset } from '@happyvertical/smrt-assets';\nimport {\n assertValidOwnedAssetRelationship,\n assertValidOwnedAssetSortOrder,\n resolveOwnedAssetsById,\n} from '@happyvertical/smrt-assets';\nimport {\n crossPackageRef,\n foreignKey,\n SmrtHierarchical,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventOptions, EventStatus } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class Event extends SmrtHierarchical {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n name: string = '';\n @foreignKey('EventSeries')\n seriesId = ''; // FK to EventSeries (nullable for standalone events)\n // parentId inherited from SmrtHierarchical (self-reference to parent Event)\n @foreignKey('EventType')\n typeId = ''; // FK to EventType\n @crossPackageRef('@happyvertical/smrt-places:Place')\n placeId = ''; // FK to Place (from @happyvertical/smrt-places)\n description = '';\n startDate: Date | null = null;\n endDate: Date | null = null;\n status: EventStatus = 'scheduled';\n round: number | null = null; // Sequence/round number in series\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventOptions = {}) {\n super(options);\n\n if (options.seriesId !== undefined) this.seriesId = options.seriesId;\n if (options.parentId !== undefined)\n this.parentId = options.parentId ?? null;\n if (options.typeId) this.typeId = options.typeId;\n if (options.placeId !== undefined) this.placeId = options.placeId;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.startDate !== undefined)\n this.startDate = options.startDate || null;\n if (options.endDate !== undefined) this.endDate = options.endDate || null;\n if (options.status !== undefined) this.status = options.status;\n if (options.round !== undefined) this.round = options.round;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, unknown> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, unknown>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, unknown>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Update event status\n *\n * @param newStatus - New status to set\n */\n async updateStatus(newStatus: EventStatus): Promise<void> {\n this.status = newStatus;\n this.updatedAt = new Date();\n await this.save();\n }\n\n /**\n * Get the series for this event\n *\n * @returns EventSeries instance or null\n */\n async getSeries() {\n if (!this.seriesId) return null;\n\n const { EventSeriesCollection } = await import(\n '../collections/EventSeriesCollection'\n );\n const collection = await EventSeriesCollection.create(this.options);\n\n return await collection.get({ id: this.seriesId });\n }\n\n /**\n * Get the event type\n *\n * @returns EventType instance or null\n */\n async getType() {\n if (!this.typeId) return null;\n\n const { EventTypeCollection } = await import(\n '../collections/EventTypeCollection'\n );\n const collection = await EventTypeCollection.create(this.options);\n\n return await collection.get({ id: this.typeId });\n }\n\n /**\n * Get the place for this event\n *\n * @returns Place instance or null\n */\n async getPlace() {\n if (!this.placeId) return null;\n\n try {\n const { PlaceCollection } = await import('@happyvertical/smrt-places');\n const collection = await PlaceCollection.create(this.options);\n\n return await collection.get({ id: this.placeId });\n } catch {\n // @happyvertical/smrt-places not available\n return null;\n }\n }\n\n // Hierarchy traversal (getParent / getChildren / getAncestors /\n // getDescendants / getHierarchy / moveTo) provided by SmrtHierarchical.\n\n /**\n * Get the root event (top-level ancestor) of this event's hierarchy.\n *\n * @returns Root event instance — `this` when already root\n */\n async getRootEvent(): Promise<Event> {\n const ancestors = await this.getAncestors();\n return (ancestors.length > 0 ? ancestors[0] : this) as Event;\n }\n\n /**\n * Get all participants for this event\n *\n * @returns Array of EventParticipant instances\n */\n async getParticipants() {\n const { EventParticipantCollection } = await import(\n '../collections/EventParticipantCollection'\n );\n const collection = await EventParticipantCollection.create(this.options);\n\n return await collection.list({ where: { eventId: this.id } });\n }\n\n private async getEventAssetCollection() {\n const { EventAssetCollection } = await import(\n '../collections/EventAssetCollection'\n );\n return EventAssetCollection.create({ db: this.db });\n }\n async getAssets(relationship?: string): Promise<Asset[]> {\n if (!this.id) {\n return [];\n }\n\n const eventAssets = await this.getEventAssetCollection();\n const linkedAssets = await eventAssets.byLeft(\n this.id,\n relationship ? { relationship } : {},\n );\n\n return resolveOwnedAssetsById(\n this.db,\n linkedAssets.map((link) => link.assetId),\n this.tenantId,\n );\n }\n\n async addAsset(\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n if (!this.id || !asset.id) {\n throw new Error('Cannot associate unsaved event or asset');\n }\n\n assertValidOwnedAssetRelationship(relationship);\n assertValidOwnedAssetSortOrder(sortOrder);\n\n const eventAssets = await this.getEventAssetCollection();\n await eventAssets.attach(this.id, asset.id, {\n relationship,\n sortOrder,\n tenantId: this.tenantId,\n });\n }\n\n async removeAsset(assetId: string, relationship?: string): Promise<void> {\n if (!this.id) {\n return;\n }\n\n const eventAssets = await this.getEventAssetCollection();\n await eventAssets.detach(\n this.id,\n assetId,\n relationship ? { relationship } : {},\n );\n }\n\n /**\n * Check if event is currently in progress\n *\n * @returns True if current time is between start and end\n */\n isInProgress(): boolean {\n if (this.status !== 'in_progress') return false;\n\n const now = new Date();\n if (this.startDate && now < this.startDate) return false;\n if (this.endDate && now > this.endDate) return false;\n\n return true;\n }\n\n /**\n * Check if event is a root event (no parent)\n *\n * @returns True if parentId is null/empty\n */\n isRoot(): boolean {\n return !this.parentId;\n }\n}\n","/**\n * EventCollection - Collection manager for Event objects\n *\n * Provides hierarchy traversal, filtering, and search capabilities.\n */\n\nimport type { Asset } from '@happyvertical/smrt-assets';\nimport {\n addOwnedAssetFromCollection,\n getOwnedAssetsFromCollection,\n removeOwnedAssetFromCollection,\n} from '@happyvertical/smrt-assets';\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { Event } from '../models/Event';\nimport type { EventSearchFilters, EventStatus } from '../types';\n\nexport class EventCollection extends SmrtCollection<Event> {\n static readonly _itemClass = Event;\n\n /**\n * Get events by series\n *\n * @param seriesId - EventSeries ID\n * @returns Array of Event instances\n */\n async getBySeriesId(seriesId: string): Promise<Event[]> {\n return await this.list({ where: { seriesId } });\n }\n\n /**\n * Get events at a specific place\n *\n * @param placeId - Place ID\n * @returns Array of Event instances\n */\n async getByPlace(placeId: string): Promise<Event[]> {\n return await this.list({ where: { placeId } });\n }\n\n /**\n * Get events by date range\n *\n * @param startDate - Start of date range\n * @param endDate - End of date range\n * @returns Array of Event instances\n */\n async getByDateRange(startDate: Date, endDate: Date): Promise<Event[]> {\n const allEvents = await this.list({});\n\n return allEvents.filter((event) => {\n if (!event.startDate) return false;\n return event.startDate >= startDate && event.startDate <= endDate;\n });\n }\n\n /**\n * Get upcoming events\n *\n * @param limit - Maximum number of events to return\n * @returns Array of Event instances starting in the future\n */\n async getUpcoming(limit?: number): Promise<Event[]> {\n const allEvents = await this.list({});\n const now = new Date();\n\n const upcoming = allEvents\n .filter((event) => event.startDate && event.startDate > now)\n .sort((a, b) => {\n if (!a.startDate || !b.startDate) return 0;\n return a.startDate.getTime() - b.startDate.getTime();\n });\n\n return limit ? upcoming.slice(0, limit) : upcoming;\n }\n\n /**\n * Get events by status\n *\n * @param status - Event status to filter by\n * @returns Array of Event instances\n */\n async getByStatus(status: EventStatus): Promise<Event[]> {\n return await this.list({ where: { status } });\n }\n\n /**\n * Get events by type\n *\n * @param typeId - EventType ID\n * @returns Array of Event instances\n */\n async getByType(typeId: string): Promise<Event[]> {\n return await this.list({ where: { typeId } });\n }\n\n /**\n * Get root events (no parent)\n *\n * @returns Array of Event instances with no parent\n */\n async getRootEvents(): Promise<Event[]> {\n const allEvents = await this.list({});\n return allEvents.filter((event) => !event.parentId);\n }\n\n /**\n * Get children of a parent event\n *\n * @param parentId - Parent event ID\n * @returns Array of child Event instances\n */\n async getByParent(parentId: string): Promise<Event[]> {\n return await this.list({ where: { parentId } });\n }\n\n /**\n * Get full event tree (hierarchy)\n *\n * @param eventId - Root event ID\n * @returns Object with root event and nested children\n */\n async getEventTree(eventId: string): Promise<Event | null> {\n const event = await this.get({ id: eventId });\n if (!event) return null;\n\n return await event.getHierarchy().then((h) => h.current);\n }\n\n async getAssets(eventId: string, relationship?: string): Promise<Asset[]> {\n return getOwnedAssetsFromCollection(this, eventId, relationship);\n }\n\n async addAsset(\n eventId: string,\n asset: Asset,\n relationship = 'attachment',\n sortOrder = 0,\n ): Promise<void> {\n await addOwnedAssetFromCollection(\n this,\n 'Event',\n eventId,\n asset,\n relationship,\n sortOrder,\n );\n }\n\n async removeAsset(\n eventId: string,\n assetId: string,\n relationship?: string,\n ): Promise<void> {\n await removeOwnedAssetFromCollection(\n this,\n 'Event',\n eventId,\n assetId,\n relationship,\n );\n }\n\n /**\n * Search events with filters\n *\n * @param query - Search query for name/description\n * @param filters - Additional filter criteria\n * @returns Array of matching Event instances\n */\n async search(query: string, filters?: EventSearchFilters): Promise<Event[]> {\n let events = await this.list({});\n\n // Filter by query\n if (query) {\n const lowerQuery = query.toLowerCase();\n events = events.filter(\n (e) =>\n e.name?.toLowerCase().includes(lowerQuery) ||\n e.description?.toLowerCase().includes(lowerQuery),\n );\n }\n\n // Apply filters\n if (filters) {\n if (filters.typeId) {\n events = events.filter((e) => e.typeId === filters.typeId);\n }\n if (filters.seriesId) {\n events = events.filter((e) => e.seriesId === filters.seriesId);\n }\n if (filters.placeId) {\n events = events.filter((e) => e.placeId === filters.placeId);\n }\n if (filters.status) {\n if (Array.isArray(filters.status)) {\n events = events.filter((e) => filters.status?.includes(e.status));\n } else {\n events = events.filter((e) => e.status === filters.status);\n }\n }\n if (filters.startDate) {\n const startDate = filters.startDate;\n events = events.filter((e) => e.startDate && e.startDate >= startDate);\n }\n if (filters.endDate) {\n const endDate = filters.endDate;\n events = events.filter((e) => e.startDate && e.startDate <= endDate);\n }\n if (filters.organizerId) {\n // Filter by series organizer\n events = events.filter(async (e) => {\n const series = await e.getSeries();\n return series && series.organizerId === filters.organizerId;\n });\n }\n }\n\n return events;\n }\n\n /**\n * Get events in progress\n *\n * @returns Array of Event instances currently in progress\n */\n async getInProgress(): Promise<Event[]> {\n const inProgressEvents = await this.getByStatus('in_progress');\n return inProgressEvents.filter((event) => event.isInProgress());\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all events for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of Event instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<Event[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global events (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of Event instances with no tenant\n */\n async findGlobal(): Promise<Event[]> {\n return queryGlobal<Event>(this);\n }\n\n /**\n * Find events for a tenant including global events.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of Event instances for the tenant and global events\n */\n async findWithGlobals(tenantId: string): Promise<Event[]> {\n return queryWithGlobals<Event>(this, tenantId, 'Event.findWithGlobals');\n }\n}\n","/**\n * EventParticipant model - Links participants to events\n *\n * Tracks who participated in an event with role and placement\n */\n\nimport {\n crossPackageRef,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventParticipantOptions } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n // Junction table - uses event_id + profile_id + role as natural key\n // instead of slug-based conflict columns\n conflictColumns: ['event_id', 'profile_id', 'role'],\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class EventParticipant extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n // id inherited from SmrtObject\n\n @foreignKey('Event')\n eventId = ''; // FK to Event\n @crossPackageRef('@happyvertical/smrt-profiles:Profile')\n profileId = ''; // FK to Profile (from @happyvertical/smrt-profiles)\n role: string = ''; // Participant role (ParticipantRole or custom)\n placement: number | null = null; // Numeric position/placement\n groupId = ''; // Optional grouping (e.g., team ID for individual players)\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventParticipantOptions = {}) {\n super(options);\n\n if (options.eventId) this.eventId = options.eventId;\n if (options.profileId) this.profileId = options.profileId;\n if (options.role !== undefined) this.role = options.role;\n if (options.placement !== undefined) this.placement = options.placement;\n if (options.groupId !== undefined) this.groupId = options.groupId;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, unknown> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, unknown>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, unknown>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Get the event for this participant\n *\n * @returns Event instance or null\n */\n async getEvent() {\n if (!this.eventId) return null;\n\n const { EventCollection } = await import('../collections/EventCollection');\n const collection = await EventCollection.create(this.options);\n\n return await collection.get({ id: this.eventId });\n }\n\n /**\n * Get the profile for this participant\n *\n * @returns Profile instance or null\n */\n async getProfile() {\n if (!this.profileId) return null;\n\n try {\n const { ProfileCollection } = await import(\n '@happyvertical/smrt-profiles'\n );\n const collection = await ProfileCollection.create(this.options);\n\n return await collection.get({ id: this.profileId });\n } catch {\n // @happyvertical/smrt-profiles not available\n return null;\n }\n }\n\n /**\n * Get group participants (others with same groupId)\n *\n * @returns Array of EventParticipant instances\n */\n async getGroupParticipants(): Promise<EventParticipant[]> {\n if (!this.groupId) return [];\n\n const { EventParticipantCollection } = await import(\n '../collections/EventParticipantCollection'\n );\n const collection = await EventParticipantCollection.create(this.options);\n\n const participants = await collection.list({\n where: { eventId: this.eventId, groupId: this.groupId },\n });\n\n // Exclude self from results\n return participants.filter((p: EventParticipant) => p.id !== this.id);\n }\n\n /**\n * Check if this is a home participant (placement = 0)\n *\n * @returns True if placement is 0\n */\n isHome(): boolean {\n return this.placement === 0;\n }\n\n /**\n * Check if this is an away participant (placement = 1)\n *\n * @returns True if placement is 1\n */\n isAway(): boolean {\n return this.placement === 1;\n }\n}\n","/**\n * EventParticipantCollection — junction collection for Event ↔ Profile links.\n *\n * The generic junction surface (byLeft/byRight/attach/detach/setLinks) comes\n * from `SmrtJunction`. Domain-specific helpers (placement-ordered queries,\n * home/away accessors, statistics, tenant scoping) live alongside.\n */\n\nimport { SmrtJunction, smrt } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventParticipant } from '../models/EventParticipant';\nimport type { ParticipantSearchFilters } from '../types';\n\n// Decorator with empty config — only needed so the scanner detects the\n// class. See FactContentCollection for the full rationale.\n@smrt()\nexport class EventParticipantCollection extends SmrtJunction<EventParticipant> {\n static readonly _itemClass = EventParticipant;\n protected leftField = 'eventId';\n protected rightField = 'profileId';\n // EventParticipant has no sortOrder column; `placement` is domain ordering\n // (0=home, 1=away) and must not be auto-assigned by setLinks.\n protected sortField: string | null = null;\n protected positionField: string | null = null;\n\n // ============================================\n // Domain helpers\n // ============================================\n\n /**\n * Get participants ordered by placement (nulls last).\n */\n async getByPlacement(eventId: string): Promise<EventParticipant[]> {\n const participants = await this.byLeft(eventId);\n\n return participants.sort((a, b) => {\n if (a.placement === null && b.placement === null) return 0;\n if (a.placement === null) return 1;\n if (b.placement === null) return -1;\n return a.placement - b.placement;\n });\n }\n\n /**\n * Get participants by group within an event.\n */\n async getByGroup(\n eventId: string,\n groupId: string,\n ): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { groupId });\n }\n\n /**\n * Get the home participant(s) — placement = 0.\n */\n async getHome(eventId: string): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { placement: 0 });\n }\n\n /**\n * Get the away participant(s) — placement = 1.\n */\n async getAway(eventId: string): Promise<EventParticipant[]> {\n return this.byLeft(eventId, { placement: 1 });\n }\n\n /**\n * Search participants with optional filters.\n */\n async search(filters: ParticipantSearchFilters): Promise<EventParticipant[]> {\n let participants = await this.list({});\n\n if (filters.eventId) {\n participants = participants.filter((p) => p.eventId === filters.eventId);\n }\n if (filters.profileId) {\n participants = participants.filter(\n (p) => p.profileId === filters.profileId,\n );\n }\n if (filters.role) {\n participants = participants.filter((p) => p.role === filters.role);\n }\n if (filters.groupId) {\n participants = participants.filter((p) => p.groupId === filters.groupId);\n }\n\n return participants;\n }\n\n /**\n * Get participation statistics for a profile, optionally filtered by event type.\n */\n async getParticipantStats(\n profileId: string,\n eventTypeId?: string,\n ): Promise<{\n totalEvents: number;\n byRole: Record<string, number>;\n byPlacement: Record<number, number>;\n }> {\n const participants = await this.byRight(profileId);\n\n let filteredParticipants = participants;\n if (eventTypeId) {\n filteredParticipants = [];\n for (const participant of participants) {\n const event = await participant.getEvent();\n if (event && event.typeId === eventTypeId) {\n filteredParticipants.push(participant);\n }\n }\n }\n\n const byRole: Record<string, number> = {};\n const byPlacement: Record<number, number> = {};\n\n for (const participant of filteredParticipants) {\n byRole[participant.role] = (byRole[participant.role] || 0) + 1;\n\n if (participant.placement !== null) {\n byPlacement[participant.placement] =\n (byPlacement[participant.placement] || 0) + 1;\n }\n }\n\n return {\n totalEvents: filteredParticipants.length,\n byRole,\n byPlacement,\n };\n }\n\n // ============================================\n // Tenant helpers\n // ============================================\n\n async findByTenant(tenantId: string): Promise<EventParticipant[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global participants (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n */\n async findGlobal(): Promise<EventParticipant[]> {\n return queryGlobal<EventParticipant>(this);\n }\n\n /**\n * Find participants for a tenant plus all global participants.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n */\n async findWithGlobals(tenantId: string): Promise<EventParticipant[]> {\n return queryWithGlobals<EventParticipant>(\n this,\n tenantId,\n 'EventParticipant.findWithGlobals',\n );\n }\n}\n","/**\n * EventSeries model - Groups related events (season, tour, conference, etc.)\n *\n * Examples: '2024 NBA Finals', 'Summer Tour 2024', 'Town Council 2024'\n */\n\nimport {\n crossPackageRef,\n foreignKey,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventSeriesOptions, RecurrencePattern } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create', 'update'] },\n cli: true,\n})\nexport class EventSeries extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n name: string = '';\n @foreignKey('EventType')\n typeId = ''; // FK to EventType\n @crossPackageRef('@happyvertical/smrt-profiles:Profile')\n organizerId = ''; // FK to Profile (from @happyvertical/smrt-profiles)\n description = '';\n startDate: Date | null = null;\n endDate: Date | null = null;\n recurrence = ''; // JSON recurrence pattern (stored as text)\n metadata = ''; // JSON metadata (stored as text)\n externalId = ''; // External system identifier\n source = ''; // Source system (e.g., 'ticketmaster', 'espn')\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: EventSeriesOptions = {}) {\n super(options);\n\n if (options.typeId) this.typeId = options.typeId;\n if (options.organizerId) this.organizerId = options.organizerId;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.startDate !== undefined)\n this.startDate = options.startDate || null;\n if (options.endDate !== undefined) this.endDate = options.endDate || null;\n if (options.externalId !== undefined) this.externalId = options.externalId;\n if (options.source !== undefined) this.source = options.source;\n\n // Handle recurrence - can be object or JSON string\n if (options.recurrence !== undefined) {\n if (typeof options.recurrence === 'string') {\n this.recurrence = options.recurrence;\n } else {\n this.recurrence = JSON.stringify(options.recurrence);\n }\n }\n\n // Handle metadata - can be object or JSON string\n if (options.metadata !== undefined) {\n if (typeof options.metadata === 'string') {\n this.metadata = options.metadata;\n } else {\n this.metadata = JSON.stringify(options.metadata);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get recurrence pattern as parsed object\n *\n * @returns Parsed recurrence pattern or null\n */\n getRecurrence(): RecurrencePattern | null {\n if (!this.recurrence) return null;\n try {\n return JSON.parse(this.recurrence) as RecurrencePattern;\n } catch {\n return null;\n }\n }\n\n /**\n * Set recurrence pattern from object\n *\n * @param pattern - Recurrence pattern to store\n */\n setRecurrence(pattern: RecurrencePattern): void {\n this.recurrence = JSON.stringify(pattern);\n }\n\n /**\n * Get metadata as parsed object\n *\n * @returns Parsed metadata object or empty object\n */\n getMetadata(): Record<string, unknown> {\n if (!this.metadata) return {};\n try {\n return JSON.parse(this.metadata);\n } catch {\n return {};\n }\n }\n\n /**\n * Set metadata from object\n *\n * @param data - Metadata object to store\n */\n setMetadata(data: Record<string, unknown>): void {\n this.metadata = JSON.stringify(data);\n }\n\n /**\n * Update metadata by merging with existing values\n *\n * @param updates - Partial metadata to merge\n */\n updateMetadata(updates: Record<string, unknown>): void {\n const current = this.getMetadata();\n this.setMetadata({ ...current, ...updates });\n }\n\n /**\n * Get the event type for this series\n *\n * @returns EventType instance or null\n */\n async getType() {\n if (!this.typeId) return null;\n\n const { EventTypeCollection } = await import(\n '../collections/EventTypeCollection'\n );\n const collection = await EventTypeCollection.create(this.options);\n\n return await collection.get({ id: this.typeId });\n }\n\n /**\n * Get the organizer profile for this series\n *\n * @returns Profile instance or null\n */\n async getOrganizer() {\n if (!this.organizerId) return null;\n\n // Import Profile from @happyvertical/smrt-profiles\n try {\n const { ProfileCollection } = await import(\n '@happyvertical/smrt-profiles'\n );\n const collection = await ProfileCollection.create(this.options);\n\n return await collection.get({ id: this.organizerId });\n } catch {\n // @happyvertical/smrt-profiles not available\n return null;\n }\n }\n\n /**\n * Get all events in this series\n *\n * @returns Array of Event instances\n */\n async getEvents() {\n const { EventCollection } = await import('../collections/EventCollection');\n const collection = await EventCollection.create(this.options);\n\n return await collection.list({ where: { seriesId: this.id } });\n }\n\n /**\n * Check if series is currently active\n *\n * @returns True if current date is between start and end\n */\n isActive(): boolean {\n const now = new Date();\n if (this.startDate && now < this.startDate) return false;\n if (this.endDate && now > this.endDate) return false;\n return true;\n }\n}\n","/**\n * EventSeriesCollection - Collection manager for EventSeries objects\n *\n * Provides queries for series by organizer, status, and date ranges.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventSeries } from '../models/EventSeries';\nimport type { EventSeriesSearchFilters } from '../types';\n\nexport class EventSeriesCollection extends SmrtCollection<EventSeries> {\n static readonly _itemClass = EventSeries;\n\n /**\n * Get series by organizer\n *\n * @param organizerId - Profile ID of the organizer\n * @returns Array of EventSeries instances\n */\n async getByOrganizer(organizerId: string): Promise<EventSeries[]> {\n return await this.list({ where: { organizerId } });\n }\n\n /**\n * Get currently active series\n *\n * @returns Array of EventSeries instances active today\n */\n async getActive(): Promise<EventSeries[]> {\n const allSeries = await this.list({});\n const now = new Date();\n\n return allSeries.filter((series) => {\n if (series.startDate && now < series.startDate) return false;\n if (series.endDate && now > series.endDate) return false;\n return true;\n });\n }\n\n /**\n * Get upcoming series\n *\n * @param limit - Maximum number of series to return\n * @returns Array of EventSeries instances starting in the future\n */\n async getUpcoming(limit?: number): Promise<EventSeries[]> {\n const allSeries = await this.list({});\n const now = new Date();\n\n const upcoming = allSeries\n .filter((series) => series.startDate && series.startDate > now)\n .sort((a, b) => {\n if (!a.startDate || !b.startDate) return 0;\n return a.startDate.getTime() - b.startDate.getTime();\n });\n\n return limit ? upcoming.slice(0, limit) : upcoming;\n }\n\n /**\n * Get series by type\n *\n * @param typeId - EventType ID\n * @returns Array of EventSeries instances\n */\n async getByType(typeId: string): Promise<EventSeries[]> {\n return await this.list({ where: { typeId } });\n }\n\n /**\n * Search series with filters\n *\n * @param query - Search query for name/description\n * @param filters - Additional filter criteria\n * @returns Array of matching EventSeries instances\n */\n async search(\n query: string,\n filters?: EventSeriesSearchFilters,\n ): Promise<EventSeries[]> {\n let series = await this.list({});\n\n // Filter by query\n if (query) {\n const lowerQuery = query.toLowerCase();\n series = series.filter(\n (s) =>\n s.name?.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery),\n );\n }\n\n // Apply filters\n if (filters) {\n if (filters.typeId) {\n series = series.filter((s) => s.typeId === filters.typeId);\n }\n if (filters.organizerId) {\n series = series.filter((s) => s.organizerId === filters.organizerId);\n }\n if (filters.startDate) {\n const startDate = filters.startDate;\n series = series.filter((s) => s.startDate && s.startDate >= startDate);\n }\n if (filters.endDate) {\n const endDate = filters.endDate;\n series = series.filter((s) => s.endDate && s.endDate <= endDate);\n }\n }\n\n return series;\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all event series for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventSeries instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<EventSeries[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global event series (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of EventSeries instances with no tenant\n */\n async findGlobal(): Promise<EventSeries[]> {\n return queryGlobal<EventSeries>(this);\n }\n\n /**\n * Find event series for a tenant including global series.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventSeries instances for the tenant and global series\n */\n async findWithGlobals(tenantId: string): Promise<EventSeries[]> {\n return queryWithGlobals<EventSeries>(\n this,\n tenantId,\n 'EventSeries.findWithGlobals',\n );\n }\n}\n","/**\n * EventType model - Defines types/categories of events\n *\n * Examples: 'basketball-game', 'concert', 'conference', 'goal', 'period'\n */\n\nimport { field, SmrtObject, smrt } from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { EventTypeOptions } from '../types';\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create'] },\n cli: true,\n})\nexport class EventType extends SmrtObject {\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ required: true })\n name: string = '';\n\n description: string = ''; // Optional description\n schema: string = ''; // JSON schema for event metadata (stored as text)\n participantSchema: string = ''; // JSON schema for participant metadata (stored as text)\n\n // Timestamps\n createdAt: Date = new Date();\n updatedAt: Date = new Date();\n\n constructor(options: EventTypeOptions = {}) {\n super(options);\n if (options.name) this.name = options.name;\n if (options.description !== undefined)\n this.description = options.description;\n\n // Handle schema - can be object or JSON string\n if (options.schema !== undefined) {\n if (typeof options.schema === 'string') {\n this.schema = options.schema;\n } else {\n this.schema = JSON.stringify(options.schema);\n }\n }\n\n // Handle participant schema\n if (options.participantSchema !== undefined) {\n if (typeof options.participantSchema === 'string') {\n this.participantSchema = options.participantSchema;\n } else {\n this.participantSchema = JSON.stringify(options.participantSchema);\n }\n }\n\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Get schema as parsed object\n *\n * @returns Parsed schema object or empty object if no schema\n */\n getSchema(): Record<string, unknown> {\n if (!this.schema) return {};\n try {\n return JSON.parse(this.schema);\n } catch {\n return {};\n }\n }\n\n /**\n * Set schema from object\n *\n * @param data - Schema object to store\n */\n setSchema(data: Record<string, unknown>): void {\n this.schema = JSON.stringify(data);\n }\n\n /**\n * Get participant schema as parsed object\n *\n * @returns Parsed participant schema object or empty object\n */\n getParticipantSchema(): Record<string, unknown> {\n if (!this.participantSchema) return {};\n try {\n return JSON.parse(this.participantSchema);\n } catch {\n return {};\n }\n }\n\n /**\n * Set participant schema from object\n *\n * @param data - Participant schema object to store\n */\n setParticipantSchema(data: Record<string, unknown>): void {\n this.participantSchema = JSON.stringify(data);\n }\n\n /**\n * Convenience method for slug-based lookup\n *\n * @param slug - The slug to search for\n * @returns EventType instance or null if not found\n */\n static async getBySlug(_slug: string): Promise<EventType | null> {\n // Will be auto-implemented by SMRT\n return null;\n }\n}\n","/**\n * EventTypeCollection - Collection manager for EventType objects\n *\n * Provides lookup and creation for event types.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { queryGlobal, queryWithGlobals } from '@happyvertical/smrt-tenancy';\nimport { EventType } from '../models/EventType';\n\nexport class EventTypeCollection extends SmrtCollection<EventType> {\n static readonly _itemClass = EventType;\n\n /**\n * Get or create an event type by slug\n *\n * @param slug - EventType slug (e.g., 'basketball-game', 'concert')\n * @param name - Optional display name (defaults to capitalized slug)\n * @returns EventType instance\n */\n async getOrCreate(slug: string, name?: string): Promise<EventType> {\n // First try to find existing type with this slug\n const existing = await this.get({ slug });\n\n if (existing) {\n return existing;\n }\n\n // Create new type with auto-generated name if not provided\n const displayName =\n name || slug.replace(/-/g, ' ').replace(/\\b\\w/g, (l) => l.toUpperCase());\n\n return await this.create({\n slug,\n name: displayName,\n });\n }\n\n /**\n * Get an event type by slug\n *\n * @param slug - EventType slug to search for\n * @returns EventType instance or null if not found\n */\n async getBySlug(slug: string): Promise<EventType | null> {\n return await this.get({ slug });\n }\n\n /**\n * Initialize default event types\n *\n * Creates common event types if they don't exist:\n * - Sports: game, period, goal, assist, penalty\n * - Entertainment: concert, performance, song\n * - Professional: conference, session, presentation, workshop\n * - Community: meeting, agenda-item, motion, vote\n *\n * @returns Array of created/existing event types\n */\n async initializeDefaults(): Promise<EventType[]> {\n const defaults = [\n // Sports\n { slug: 'game', name: 'Game' },\n { slug: 'match', name: 'Match' },\n { slug: 'period', name: 'Period' },\n { slug: 'quarter', name: 'Quarter' },\n { slug: 'inning', name: 'Inning' },\n { slug: 'goal', name: 'Goal' },\n { slug: 'assist', name: 'Assist' },\n { slug: 'penalty', name: 'Penalty' },\n { slug: 'substitution', name: 'Substitution' },\n\n // Entertainment\n { slug: 'concert', name: 'Concert' },\n { slug: 'performance', name: 'Performance' },\n { slug: 'set', name: 'Set' },\n { slug: 'song', name: 'Song' },\n { slug: 'theater', name: 'Theater' },\n { slug: 'show', name: 'Show' },\n\n // Professional\n { slug: 'conference', name: 'Conference' },\n { slug: 'session', name: 'Session' },\n { slug: 'presentation', name: 'Presentation' },\n { slug: 'workshop', name: 'Workshop' },\n { slug: 'seminar', name: 'Seminar' },\n { slug: 'keynote', name: 'Keynote' },\n { slug: 'panel', name: 'Panel' },\n\n // Community\n { slug: 'meeting', name: 'Meeting' },\n { slug: 'town-hall', name: 'Town Hall' },\n { slug: 'agenda-item', name: 'Agenda Item' },\n { slug: 'motion', name: 'Motion' },\n { slug: 'amendment', name: 'Amendment' },\n { slug: 'vote', name: 'Vote' },\n { slug: 'discussion', name: 'Discussion' },\n\n // General\n { slug: 'event', name: 'Event' },\n { slug: 'activity', name: 'Activity' },\n { slug: 'action', name: 'Action' },\n ];\n\n const types: EventType[] = [];\n for (const def of defaults) {\n const type = await this.getOrCreate(def.slug, def.name);\n types.push(type);\n }\n\n return types;\n }\n\n // ============================================\n // Tenant Helper Methods\n // ============================================\n\n /**\n * Find all event types for a specific tenant\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventType instances for the tenant\n */\n async findByTenant(tenantId: string): Promise<EventType[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global event types (no tenant association).\n *\n * Routes through the shared tenant-global helper so it does not throw under\n * an active tenant context (an explicit `tenant_id IS NULL` filter would be\n * flagged as an isolation violation). (#1600)\n *\n * @returns Array of EventType instances with no tenant\n */\n async findGlobal(): Promise<EventType[]> {\n return queryGlobal<EventType>(this);\n }\n\n /**\n * Find event types for a tenant including global types.\n *\n * Fails closed if an active tenant context requests a different tenant's\n * rows; the admin/system path keeps the cross-tenant capability. (#1600)\n *\n * @param tenantId - Tenant ID to filter by\n * @returns Array of EventType instances for the tenant and global types\n */\n async findWithGlobals(tenantId: string): Promise<EventType[]> {\n return queryWithGlobals<EventType>(\n this,\n tenantId,\n 'EventType.findWithGlobals',\n );\n }\n}\n"],"names":["__decorateClass","EventCollection","__publicField","EventSeriesCollection","EventTypeCollection","EventParticipantCollection","EventAssetCollection","tenantId"],"mappings":";;;;;AAsBA,eAAe;AAAA,EACb,IAAA,IAAA,mBAAA,YAAA,GAAA;AACF;;;;;;;;;;;ACEO,IAAM,aAAN,cAAyB,WAAW;AAAA,EAEzC,WAA0B;AAAA,EAG1B,UAAU;AAAA,EAGV,UAAU;AAAA,EAGV,eAAe;AAAA,EAGf,YAAY;AAAA,EAEZ,YAAY,UAA6B,IAAI;AAC3C,UAAM,OAAO;AACb,QAAI,QAAQ,QAAS,MAAK,UAAU,QAAQ;AAC5C,QAAI,QAAQ,QAAS,MAAK,UAAU,QAAQ;AAC5C,QAAI,QAAQ,aAAc,MAAK,eAAe,QAAQ;AACtD,QAAI,QAAQ,cAAc,OAAW,MAAK,YAAY,QAAQ;AAC9D,QAAI,QAAQ,aAAa,OAAW,MAAK,WAAW,QAAQ;AAAA,EAC9D;AACF;AAtBEA,kBAAA;AAAA,EADC,SAAS,EAAE,UAAU,KAAA,CAAM;AAAA,GADjB,WAEX,WAAA,YAAA,CAAA;AAGAA,kBAAA;AAAA,EADC,WAAW,SAAS,EAAE,UAAU,MAAM;AAAA,GAJ5B,WAKX,WAAA,WAAA,CAAA;AAGAA,kBAAA;AAAA,EADC,gBAAgB,oCAAoC,EAAE,UAAU,MAAM;AAAA,GAP5D,WAQX,WAAA,WAAA,CAAA;AAGAA,kBAAA;AAAA,EADC,MAAM,EAAE,UAAU,KAAA,CAAM;AAAA,GAVd,WAWX,WAAA,gBAAA,CAAA;AAGAA,kBAAA;AAAA,EADC,MAAA;AAAM,GAbI,WAcX,WAAA,aAAA,CAAA;AAdW,aAANA,kBAAA;AAAA,EARN,aAAa,EAAE,MAAM,YAAY;AAAA,EACjC,KAAK;AAAA,IACJ,WAAW;AAAA,IACX,iBAAiB,CAAC,YAAY,YAAY,cAAc;AAAA,IACxD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EAAA,CACN;AAAA,GACY,UAAA;;;;;;;;;;;;ACRN,IAAM,uBAAN,cAAmC,aAAyB;AAAA,EAEvD,YAAY;AAAA,EACZ,aAAa;AAAA,EAEf,yBAA0D;AAAA,EAElE,MAAc,qBAA+C;AAC3D,QAAI,CAAC,KAAK,wBAAwB;AAChC,YAAM,EAAE,iBAAAC,iBAAA,IAAoB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,iBAAA;AAClC,WAAK,yBAAyBA,iBAAgB,OAAO,EAAE,IAAI,KAAK,IAAI;AAAA,IACtE;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,SAAiB,cAAyC;AACxE,WAAO;AAAA,MACL,MAAM,KAAK,mBAAA;AAAA,MACX;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,SACJ,SACA,OACA,eAAe,cACf,YAAY,GACG;AACf,UAAM;AAAA,MACJ,MAAM,KAAK,mBAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,YACJ,SACA,SACA,cACe;AACf,UAAM;AAAA,MACJ,MAAM,KAAK,mBAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AApDEC,gBADW,sBACK,cAAa,UAAA;AADlB,uBAANF,kBAAA;AAAA,EALN,KAAK;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EAAA,CACN;AAAA,GACY,oBAAA;;;;;;;;;;;;;;;;;ACUN,IAAM,QAAN,cAAoB,iBAAiB;AAAA,EAE1C,WAA0B;AAAA,EAE1B,OAAe;AAAA,EAEf,WAAW;AAAA,EAGX,SAAS;AAAA,EAET,UAAU;AAAA;AAAA,EACV,cAAc;AAAA,EACd,YAAyB;AAAA,EACzB,UAAuB;AAAA,EACvB,SAAsB;AAAA,EACtB,QAAuB;AAAA;AAAA,EACvB,WAAW;AAAA;AAAA,EACX,aAAa;AAAA;AAAA,EACb,SAAS;AAAA;AAAA;AAAA,EAGT,gCAAgB,KAAA;AAAA,EAChB,gCAAgB,KAAA;AAAA,EAEhB,YAAY,UAAwB,IAAI;AACtC,UAAM,OAAO;AAEb,QAAI,QAAQ,aAAa,OAAW,MAAK,WAAW,QAAQ;AAC5D,QAAI,QAAQ,aAAa;AACvB,WAAK,WAAW,QAAQ,YAAY;AACtC,QAAI,QAAQ,OAAQ,MAAK,SAAS,QAAQ;AAC1C,QAAI,QAAQ,YAAY,OAAW,MAAK,UAAU,QAAQ;AAC1D,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAC7B,QAAI,QAAQ,cAAc;AACxB,WAAK,YAAY,QAAQ,aAAa;AACxC,QAAI,QAAQ,YAAY,OAAW,MAAK,UAAU,QAAQ,WAAW;AACrE,QAAI,QAAQ,WAAW,OAAW,MAAK,SAAS,QAAQ;AACxD,QAAI,QAAQ,UAAU,OAAW,MAAK,QAAQ,QAAQ;AACtD,QAAI,QAAQ,eAAe,OAAW,MAAK,aAAa,QAAQ;AAChE,QAAI,QAAQ,WAAW,OAAW,MAAK,SAAS,QAAQ;AAGxD,QAAI,QAAQ,aAAa,QAAW;AAClC,UAAI,OAAO,QAAQ,aAAa,UAAU;AACxC,aAAK,WAAW,QAAQ;AAAA,MAC1B,OAAO;AACL,aAAK,WAAW,KAAK,UAAU,QAAQ,QAAQ;AAAA,MACjD;AAAA,IACF;AAEA,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAChD,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAuC;AACrC,QAAI,CAAC,KAAK,SAAU,QAAO,CAAA;AAC3B,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IACjC,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAqC;AAC/C,SAAK,WAAW,KAAK,UAAU,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,SAAwC;AACrD,UAAM,UAAU,KAAK,YAAA;AACrB,SAAK,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,WAAuC;AACxD,SAAK,SAAS;AACd,SAAK,gCAAgB,KAAA;AACrB,UAAM,KAAK,KAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY;AAChB,QAAI,CAAC,KAAK,SAAU,QAAO;AAE3B,UAAM,EAAE,uBAAAG,uBAAA,IAA0B,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,uBAAA;AAGxC,UAAM,aAAa,MAAMA,uBAAsB,OAAO,KAAK,OAAO;AAElE,WAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,UAAU;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU;AACd,QAAI,CAAC,KAAK,OAAQ,QAAO;AAEzB,UAAM,EAAE,qBAAAC,qBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,qBAAA;AAGtC,UAAM,aAAa,MAAMA,qBAAoB,OAAO,KAAK,OAAO;AAEhE,WAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW;AACf,QAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,QAAI;AACF,YAAM,EAAE,gBAAA,IAAoB,MAAM,OAAO,4BAA4B;AACrE,YAAM,aAAa,MAAM,gBAAgB,OAAO,KAAK,OAAO;AAE5D,aAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,SAAS;AAAA,IAClD,QAAQ;AAEN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,eAA+B;AACnC,UAAM,YAAY,MAAM,KAAK,aAAA;AAC7B,WAAQ,UAAU,SAAS,IAAI,UAAU,CAAC,IAAI;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB;AACtB,UAAM,EAAE,4BAAAC,4BAAA,IAA+B,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,4BAAA;AAG7C,UAAM,aAAa,MAAMA,4BAA2B,OAAO,KAAK,OAAO;AAEvE,WAAO,MAAM,WAAW,KAAK,EAAE,OAAO,EAAE,SAAS,KAAK,GAAA,GAAM;AAAA,EAC9D;AAAA,EAEA,MAAc,0BAA0B;AACtC,UAAM,EAAE,sBAAAC,sBAAA,IAAyB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,sBAAA;AAGvC,WAAOA,sBAAqB,OAAO,EAAE,IAAI,KAAK,IAAI;AAAA,EACpD;AAAA,EACA,MAAM,UAAU,cAAyC;AACvD,QAAI,CAAC,KAAK,IAAI;AACZ,aAAO,CAAA;AAAA,IACT;AAEA,UAAM,cAAc,MAAM,KAAK,wBAAA;AAC/B,UAAM,eAAe,MAAM,YAAY;AAAA,MACrC,KAAK;AAAA,MACL,eAAe,EAAE,iBAAiB,CAAA;AAAA,IAAC;AAGrC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,aAAa,IAAI,CAAC,SAAS,KAAK,OAAO;AAAA,MACvC,KAAK;AAAA,IAAA;AAAA,EAET;AAAA,EAEA,MAAM,SACJ,OACA,eAAe,cACf,YAAY,GACG;AACf,QAAI,CAAC,KAAK,MAAM,CAAC,MAAM,IAAI;AACzB,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAEA,sCAAkC,YAAY;AAC9C,mCAA+B,SAAS;AAExC,UAAM,cAAc,MAAM,KAAK,wBAAA;AAC/B,UAAM,YAAY,OAAO,KAAK,IAAI,MAAM,IAAI;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,UAAU,KAAK;AAAA,IAAA,CAChB;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,SAAiB,cAAsC;AACvE,QAAI,CAAC,KAAK,IAAI;AACZ;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,KAAK,wBAAA;AAC/B,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL;AAAA,MACA,eAAe,EAAE,iBAAiB,CAAA;AAAA,IAAC;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAwB;AACtB,QAAI,KAAK,WAAW,cAAe,QAAO;AAE1C,UAAM,0BAAU,KAAA;AAChB,QAAI,KAAK,aAAa,MAAM,KAAK,UAAW,QAAO;AACnD,QAAI,KAAK,WAAW,MAAM,KAAK,QAAS,QAAO;AAE/C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAkB;AAChB,WAAO,CAAC,KAAK;AAAA,EACf;AACF;AAhQEN,kBAAA;AAAA,EADC,SAAS,EAAE,UAAU,KAAA,CAAM;AAAA,GADjB,MAEX,WAAA,YAAA,CAAA;AAIAA,kBAAA;AAAA,EADC,WAAW,aAAa;AAAA,GALd,MAMX,WAAA,YAAA,CAAA;AAGAA,kBAAA;AAAA,EADC,WAAW,WAAW;AAAA,GARZ,MASX,WAAA,UAAA,CAAA;AAEAA,kBAAA;AAAA,EADC,gBAAgB,kCAAkC;AAAA,GAVxC,MAWX,WAAA,WAAA,CAAA;AAXW,QAANA,kBAAA;AAAA,EAPN,aAAa,EAAE,MAAM,YAAY;AAAA,EACjC,KAAK;AAAA,IACJ,eAAe;AAAA,IACf,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,UAAU,QAAQ,EAAA;AAAA,IAC5D,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,QAAQ,EAAA;AAAA,IAClD,KAAK;AAAA,EAAA,CACN;AAAA,GACY,KAAA;ACXN,MAAM,wBAAwB,eAAsB;AAAA,EACzD,OAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7B,MAAM,cAAc,UAAoC;AACtD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,SAAA,GAAY;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAW,SAAmC;AAClD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,QAAA,GAAW;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAe,WAAiB,SAAiC;AACrE,UAAM,YAAY,MAAM,KAAK,KAAK,CAAA,CAAE;AAEpC,WAAO,UAAU,OAAO,CAAC,UAAU;AACjC,UAAI,CAAC,MAAM,UAAW,QAAO;AAC7B,aAAO,MAAM,aAAa,aAAa,MAAM,aAAa;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,OAAkC;AAClD,UAAM,YAAY,MAAM,KAAK,KAAK,CAAA,CAAE;AACpC,UAAM,0BAAU,KAAA;AAEhB,UAAM,WAAW,UACd,OAAO,CAAC,UAAU,MAAM,aAAa,MAAM,YAAY,GAAG,EAC1D,KAAK,CAAC,GAAG,MAAM;AACd,UAAI,CAAC,EAAE,aAAa,CAAC,EAAE,UAAW,QAAO;AACzC,aAAO,EAAE,UAAU,QAAA,IAAY,EAAE,UAAU,QAAA;AAAA,IAC7C,CAAC;AAEH,WAAO,QAAQ,SAAS,MAAM,GAAG,KAAK,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,QAAuC;AACvD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,OAAA,GAAU;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,QAAkC;AAChD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,OAAA,GAAU;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAkC;AACtC,UAAM,YAAY,MAAM,KAAK,KAAK,CAAA,CAAE;AACpC,WAAO,UAAU,OAAO,CAAC,UAAU,CAAC,MAAM,QAAQ;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,UAAoC;AACpD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,SAAA,GAAY;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,SAAwC;AACzD,UAAM,QAAQ,MAAM,KAAK,IAAI,EAAE,IAAI,SAAS;AAC5C,QAAI,CAAC,MAAO,QAAO;AAEnB,WAAO,MAAM,MAAM,aAAA,EAAe,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACzD;AAAA,EAEA,MAAM,UAAU,SAAiB,cAAyC;AACxE,WAAO,6BAA6B,MAAM,SAAS,YAAY;AAAA,EACjE;AAAA,EAEA,MAAM,SACJ,SACA,OACA,eAAe,cACf,YAAY,GACG;AACf,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,YACJ,SACA,SACA,cACe;AACf,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAAO,OAAe,SAAgD;AAC1E,QAAI,SAAS,MAAM,KAAK,KAAK,CAAA,CAAE;AAG/B,QAAI,OAAO;AACT,YAAM,aAAa,MAAM,YAAA;AACzB,eAAS,OAAO;AAAA,QACd,CAAC,MACC,EAAE,MAAM,cAAc,SAAS,UAAU,KACzC,EAAE,aAAa,YAAA,EAAc,SAAS,UAAU;AAAA,MAAA;AAAA,IAEtD;AAGA,QAAI,SAAS;AACX,UAAI,QAAQ,QAAQ;AAClB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,MAAM;AAAA,MAC3D;AACA,UAAI,QAAQ,UAAU;AACpB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,QAAQ;AAAA,MAC/D;AACA,UAAI,QAAQ,SAAS;AACnB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,OAAO;AAAA,MAC7D;AACA,UAAI,QAAQ,QAAQ;AAClB,YAAI,MAAM,QAAQ,QAAQ,MAAM,GAAG;AACjC,mBAAS,OAAO,OAAO,CAAC,MAAM,QAAQ,QAAQ,SAAS,EAAE,MAAM,CAAC;AAAA,QAClE,OAAO;AACL,mBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,MAAM;AAAA,QAC3D;AAAA,MACF;AACA,UAAI,QAAQ,WAAW;AACrB,cAAM,YAAY,QAAQ;AAC1B,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,SAAS;AAAA,MACvE;AACA,UAAI,QAAQ,SAAS;AACnB,cAAM,UAAU,QAAQ;AACxB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,OAAO;AAAA,MACrE;AACA,UAAI,QAAQ,aAAa;AAEvB,iBAAS,OAAO,OAAO,OAAO,MAAM;AAClC,gBAAM,SAAS,MAAM,EAAE,UAAA;AACvB,iBAAO,UAAU,OAAO,gBAAgB,QAAQ;AAAA,QAClD,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAkC;AACtC,UAAM,mBAAmB,MAAM,KAAK,YAAY,aAAa;AAC7D,WAAO,iBAAiB,OAAO,CAAC,UAAU,MAAM,cAAc;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aAAaO,WAAoC;AACrD,WAAO,KAAK,KAAK,EAAE,OAAO,EAAE,UAAAA,UAAA,GAAY;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,aAA+B;AACnC,WAAO,YAAmB,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAAgBA,WAAoC;AACxD,WAAO,iBAAwB,MAAMA,WAAU,uBAAuB;AAAA,EACxE;AACF;;;;;;;;;;;;;;;ACtPO,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAE/C,WAA0B;AAAA,EAK1B,UAAU;AAAA,EAEV,YAAY;AAAA;AAAA,EACZ,OAAe;AAAA;AAAA,EACf,YAA2B;AAAA;AAAA,EAC3B,UAAU;AAAA;AAAA,EACV,WAAW;AAAA;AAAA,EACX,aAAa;AAAA;AAAA,EACb,SAAS;AAAA;AAAA;AAAA,EAGT,gCAAgB,KAAA;AAAA,EAChB,gCAAgB,KAAA;AAAA,EAEhB,YAAY,UAAmC,IAAI;AACjD,UAAM,OAAO;AAEb,QAAI,QAAQ,QAAS,MAAK,UAAU,QAAQ;AAC5C,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAChD,QAAI,QAAQ,SAAS,OAAW,MAAK,OAAO,QAAQ;AACpD,QAAI,QAAQ,cAAc,OAAW,MAAK,YAAY,QAAQ;AAC9D,QAAI,QAAQ,YAAY,OAAW,MAAK,UAAU,QAAQ;AAC1D,QAAI,QAAQ,eAAe,OAAW,MAAK,aAAa,QAAQ;AAChE,QAAI,QAAQ,WAAW,OAAW,MAAK,SAAS,QAAQ;AAGxD,QAAI,QAAQ,aAAa,QAAW;AAClC,UAAI,OAAO,QAAQ,aAAa,UAAU;AACxC,aAAK,WAAW,QAAQ;AAAA,MAC1B,OAAO;AACL,aAAK,WAAW,KAAK,UAAU,QAAQ,QAAQ;AAAA,MACjD;AAAA,IACF;AAEA,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAChD,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAuC;AACrC,QAAI,CAAC,KAAK,SAAU,QAAO,CAAA;AAC3B,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IACjC,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAqC;AAC/C,SAAK,WAAW,KAAK,UAAU,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,SAAwC;AACrD,UAAM,UAAU,KAAK,YAAA;AACrB,SAAK,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW;AACf,QAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,UAAM,EAAE,iBAAAN,iBAAA,IAAoB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,iBAAA;AAClC,UAAM,aAAa,MAAMA,iBAAgB,OAAO,KAAK,OAAO;AAE5D,WAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,SAAS;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa;AACjB,QAAI,CAAC,KAAK,UAAW,QAAO;AAE5B,QAAI;AACF,YAAM,EAAE,kBAAA,IAAsB,MAAM,OAClC,8BACF;AACA,YAAM,aAAa,MAAM,kBAAkB,OAAO,KAAK,OAAO;AAE9D,aAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,WAAW;AAAA,IACpD,QAAQ;AAEN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,uBAAoD;AACxD,QAAI,CAAC,KAAK,QAAS,QAAO,CAAA;AAE1B,UAAM,EAAE,4BAAAI,4BAAA,IAA+B,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,4BAAA;AAG7C,UAAM,aAAa,MAAMA,4BAA2B,OAAO,KAAK,OAAO;AAEvE,UAAM,eAAe,MAAM,WAAW,KAAK;AAAA,MACzC,OAAO,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK,QAAA;AAAA,IAAQ,CACvD;AAGD,WAAO,aAAa,OAAO,CAAC,MAAwB,EAAE,OAAO,KAAK,EAAE;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAkB;AAChB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAkB;AAChB,WAAO,KAAK,cAAc;AAAA,EAC5B;AACF;AArJEL,kBAAA;AAAA,EADC,SAAS,EAAE,UAAU,KAAA,CAAM;AAAA,GADjB,iBAEX,WAAA,YAAA,CAAA;AAKAA,kBAAA;AAAA,EADC,WAAW,OAAO;AAAA,GANR,iBAOX,WAAA,WAAA,CAAA;AAEAA,kBAAA;AAAA,EADC,gBAAgB,sCAAsC;AAAA,GAR5C,iBASX,WAAA,aAAA,CAAA;AATW,mBAANA,kBAAA;AAAA,EATN,aAAa,EAAE,MAAM,YAAY;AAAA,EACjC,KAAK;AAAA;AAAA;AAAA,IAGJ,iBAAiB,CAAC,YAAY,cAAc,MAAM;AAAA,IAClD,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,UAAU,QAAQ,EAAA;AAAA,IAC5D,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,QAAQ,EAAA;AAAA,IAClD,KAAK;AAAA,EAAA,CACN;AAAA,GACY,gBAAA;;;;;;;;;;;;ACRN,IAAM,6BAAN,cAAyC,aAA+B;AAAA,EAEnE,YAAY;AAAA,EACZ,aAAa;AAAA;AAAA;AAAA,EAGb,YAA2B;AAAA,EAC3B,gBAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASzC,MAAM,eAAe,SAA8C;AACjE,UAAM,eAAe,MAAM,KAAK,OAAO,OAAO;AAE9C,WAAO,aAAa,KAAK,CAAC,GAAG,MAAM;AACjC,UAAI,EAAE,cAAc,QAAQ,EAAE,cAAc,KAAM,QAAO;AACzD,UAAI,EAAE,cAAc,KAAM,QAAO;AACjC,UAAI,EAAE,cAAc,KAAM,QAAO;AACjC,aAAO,EAAE,YAAY,EAAE;AAAA,IACzB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WACJ,SACA,SAC6B;AAC7B,WAAO,KAAK,OAAO,SAAS,EAAE,SAAS;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,SAA8C;AAC1D,WAAO,KAAK,OAAO,SAAS,EAAE,WAAW,GAAG;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,SAA8C;AAC1D,WAAO,KAAK,OAAO,SAAS,EAAE,WAAW,GAAG;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,SAAgE;AAC3E,QAAI,eAAe,MAAM,KAAK,KAAK,CAAA,CAAE;AAErC,QAAI,QAAQ,SAAS;AACnB,qBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,OAAO;AAAA,IACzE;AACA,QAAI,QAAQ,WAAW;AACrB,qBAAe,aAAa;AAAA,QAC1B,CAAC,MAAM,EAAE,cAAc,QAAQ;AAAA,MAAA;AAAA,IAEnC;AACA,QAAI,QAAQ,MAAM;AAChB,qBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,IAAI;AAAA,IACnE;AACA,QAAI,QAAQ,SAAS;AACnB,qBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,OAAO;AAAA,IACzE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,WACA,aAKC;AACD,UAAM,eAAe,MAAM,KAAK,QAAQ,SAAS;AAEjD,QAAI,uBAAuB;AAC3B,QAAI,aAAa;AACf,6BAAuB,CAAA;AACvB,iBAAW,eAAe,cAAc;AACtC,cAAM,QAAQ,MAAM,YAAY,SAAA;AAChC,YAAI,SAAS,MAAM,WAAW,aAAa;AACzC,+BAAqB,KAAK,WAAW;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAiC,CAAA;AACvC,UAAM,cAAsC,CAAA;AAE5C,eAAW,eAAe,sBAAsB;AAC9C,aAAO,YAAY,IAAI,KAAK,OAAO,YAAY,IAAI,KAAK,KAAK;AAE7D,UAAI,YAAY,cAAc,MAAM;AAClC,oBAAY,YAAY,SAAS,KAC9B,YAAY,YAAY,SAAS,KAAK,KAAK;AAAA,MAChD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,aAAa,qBAAqB;AAAA,MAClC;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAaO,WAA+C;AAChE,WAAO,KAAK,KAAK,EAAE,OAAO,EAAE,UAAAA,UAAA,GAAY;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAA0C;AAC9C,WAAO,YAA8B,IAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgBA,WAA+C;AACnE,WAAO;AAAA,MACL;AAAA,MACAA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AArJE,cADW,4BACK,cAAa,gBAAA;AADlB,6BAANP,kBAAA;AAAA,EADN,KAAA;AAAK,GACO,0BAAA;;;;;;;;;;;;;;;;;ACMN,IAAM,cAAN,cAA0B,WAAW;AAAA,EAE1C,WAA0B;AAAA,EAE1B,OAAe;AAAA,EAEf,SAAS;AAAA,EAET,cAAc;AAAA;AAAA,EACd,cAAc;AAAA,EACd,YAAyB;AAAA,EACzB,UAAuB;AAAA,EACvB,aAAa;AAAA;AAAA,EACb,WAAW;AAAA;AAAA,EACX,aAAa;AAAA;AAAA,EACb,SAAS;AAAA;AAAA;AAAA,EAGT,gCAAgB,KAAA;AAAA,EAChB,gCAAgB,KAAA;AAAA,EAEhB,YAAY,UAA8B,IAAI;AAC5C,UAAM,OAAO;AAEb,QAAI,QAAQ,OAAQ,MAAK,SAAS,QAAQ;AAC1C,QAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AACpD,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAC7B,QAAI,QAAQ,cAAc;AACxB,WAAK,YAAY,QAAQ,aAAa;AACxC,QAAI,QAAQ,YAAY,OAAW,MAAK,UAAU,QAAQ,WAAW;AACrE,QAAI,QAAQ,eAAe,OAAW,MAAK,aAAa,QAAQ;AAChE,QAAI,QAAQ,WAAW,OAAW,MAAK,SAAS,QAAQ;AAGxD,QAAI,QAAQ,eAAe,QAAW;AACpC,UAAI,OAAO,QAAQ,eAAe,UAAU;AAC1C,aAAK,aAAa,QAAQ;AAAA,MAC5B,OAAO;AACL,aAAK,aAAa,KAAK,UAAU,QAAQ,UAAU;AAAA,MACrD;AAAA,IACF;AAGA,QAAI,QAAQ,aAAa,QAAW;AAClC,UAAI,OAAO,QAAQ,aAAa,UAAU;AACxC,aAAK,WAAW,QAAQ;AAAA,MAC1B,OAAO;AACL,aAAK,WAAW,KAAK,UAAU,QAAQ,QAAQ;AAAA,MACjD;AAAA,IACF;AAEA,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAChD,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAA0C;AACxC,QAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,UAAU;AAAA,IACnC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,SAAkC;AAC9C,SAAK,aAAa,KAAK,UAAU,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAuC;AACrC,QAAI,CAAC,KAAK,SAAU,QAAO,CAAA;AAC3B,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IACjC,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,MAAqC;AAC/C,SAAK,WAAW,KAAK,UAAU,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,SAAwC;AACrD,UAAM,UAAU,KAAK,YAAA;AACrB,SAAK,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU;AACd,QAAI,CAAC,KAAK,OAAQ,QAAO;AAEzB,UAAM,EAAE,qBAAAI,qBAAA,IAAwB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,qBAAA;AAGtC,UAAM,aAAa,MAAMA,qBAAoB,OAAO,KAAK,OAAO;AAEhE,WAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe;AACnB,QAAI,CAAC,KAAK,YAAa,QAAO;AAG9B,QAAI;AACF,YAAM,EAAE,kBAAA,IAAsB,MAAM,OAClC,8BACF;AACA,YAAM,aAAa,MAAM,kBAAkB,OAAO,KAAK,OAAO;AAE9D,aAAO,MAAM,WAAW,IAAI,EAAE,IAAI,KAAK,aAAa;AAAA,IACtD,QAAQ;AAEN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY;AAChB,UAAM,EAAE,iBAAAH,iBAAA,IAAoB,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,iBAAA;AAClC,UAAM,aAAa,MAAMA,iBAAgB,OAAO,KAAK,OAAO;AAE5D,WAAO,MAAM,WAAW,KAAK,EAAE,OAAO,EAAE,UAAU,KAAK,GAAA,GAAM;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAoB;AAClB,UAAM,0BAAU,KAAA;AAChB,QAAI,KAAK,aAAa,MAAM,KAAK,UAAW,QAAO;AACnD,QAAI,KAAK,WAAW,MAAM,KAAK,QAAS,QAAO;AAC/C,WAAO;AAAA,EACT;AACF;AA3KED,kBAAA;AAAA,EADC,SAAS,EAAE,UAAU,KAAA,CAAM;AAAA,GADjB,YAEX,WAAA,YAAA,CAAA;AAIAA,kBAAA;AAAA,EADC,WAAW,WAAW;AAAA,GALZ,YAMX,WAAA,UAAA,CAAA;AAEAA,kBAAA;AAAA,EADC,gBAAgB,sCAAsC;AAAA,GAP5C,YAQX,WAAA,eAAA,CAAA;AARW,cAANA,kBAAA;AAAA,EAPN,aAAa,EAAE,MAAM,YAAY;AAAA,EACjC,KAAK;AAAA,IACJ,eAAe;AAAA,IACf,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,UAAU,QAAQ,EAAA;AAAA,IAC5D,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,QAAQ,EAAA;AAAA,IAClD,KAAK;AAAA,EAAA,CACN;AAAA,GACY,WAAA;ACXN,MAAM,8BAA8B,eAA4B;AAAA,EACrE,OAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7B,MAAM,eAAe,aAA6C;AAChE,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,YAAA,GAAe;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAoC;AACxC,UAAM,YAAY,MAAM,KAAK,KAAK,CAAA,CAAE;AACpC,UAAM,0BAAU,KAAA;AAEhB,WAAO,UAAU,OAAO,CAAC,WAAW;AAClC,UAAI,OAAO,aAAa,MAAM,OAAO,UAAW,QAAO;AACvD,UAAI,OAAO,WAAW,MAAM,OAAO,QAAS,QAAO;AACnD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAY,OAAwC;AACxD,UAAM,YAAY,MAAM,KAAK,KAAK,CAAA,CAAE;AACpC,UAAM,0BAAU,KAAA;AAEhB,UAAM,WAAW,UACd,OAAO,CAAC,WAAW,OAAO,aAAa,OAAO,YAAY,GAAG,EAC7D,KAAK,CAAC,GAAG,MAAM;AACd,UAAI,CAAC,EAAE,aAAa,CAAC,EAAE,UAAW,QAAO;AACzC,aAAO,EAAE,UAAU,QAAA,IAAY,EAAE,UAAU,QAAA;AAAA,IAC7C,CAAC;AAEH,WAAO,QAAQ,SAAS,MAAM,GAAG,KAAK,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,QAAwC;AACtD,WAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,OAAA,GAAU;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OACJ,OACA,SACwB;AACxB,QAAI,SAAS,MAAM,KAAK,KAAK,CAAA,CAAE;AAG/B,QAAI,OAAO;AACT,YAAM,aAAa,MAAM,YAAA;AACzB,eAAS,OAAO;AAAA,QACd,CAAC,MACC,EAAE,MAAM,cAAc,SAAS,UAAU,KACzC,EAAE,aAAa,YAAA,EAAc,SAAS,UAAU;AAAA,MAAA;AAAA,IAEtD;AAGA,QAAI,SAAS;AACX,UAAI,QAAQ,QAAQ;AAClB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,QAAQ,MAAM;AAAA,MAC3D;AACA,UAAI,QAAQ,aAAa;AACvB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,gBAAgB,QAAQ,WAAW;AAAA,MACrE;AACA,UAAI,QAAQ,WAAW;AACrB,cAAM,YAAY,QAAQ;AAC1B,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,SAAS;AAAA,MACvE;AACA,UAAI,QAAQ,SAAS;AACnB,cAAM,UAAU,QAAQ;AACxB,iBAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,OAAO;AAAA,MACjE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aAAaO,WAA0C;AAC3D,WAAO,KAAK,KAAK,EAAE,OAAO,EAAE,UAAAA,UAAA,GAAY;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,aAAqC;AACzC,WAAO,YAAyB,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAAgBA,WAA0C;AAC9D,WAAO;AAAA,MACL;AAAA,MACAA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;;;;;;;;;;;;;;;AC5IO,IAAM,YAAN,cAAwB,WAAW;AAAA,EAExC,WAA0B;AAAA,EAG1B,OAAe;AAAA,EAEf,cAAsB;AAAA;AAAA,EACtB,SAAiB;AAAA;AAAA,EACjB,oBAA4B;AAAA;AAAA;AAAA,EAG5B,gCAAsB,KAAA;AAAA,EACtB,gCAAsB,KAAA;AAAA,EAEtB,YAAY,UAA4B,IAAI;AAC1C,UAAM,OAAO;AACb,QAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAG7B,QAAI,QAAQ,WAAW,QAAW;AAChC,UAAI,OAAO,QAAQ,WAAW,UAAU;AACtC,aAAK,SAAS,QAAQ;AAAA,MACxB,OAAO;AACL,aAAK,SAAS,KAAK,UAAU,QAAQ,MAAM;AAAA,MAC7C;AAAA,IACF;AAGA,QAAI,QAAQ,sBAAsB,QAAW;AAC3C,UAAI,OAAO,QAAQ,sBAAsB,UAAU;AACjD,aAAK,oBAAoB,QAAQ;AAAA,MACnC,OAAO;AACL,aAAK,oBAAoB,KAAK,UAAU,QAAQ,iBAAiB;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAChD,QAAI,QAAQ,UAAW,MAAK,YAAY,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAqC;AACnC,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AACzB,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,MAAM;AAAA,IAC/B,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,MAAqC;AAC7C,SAAK,SAAS,KAAK,UAAU,IAAI;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAgD;AAC9C,QAAI,CAAC,KAAK,kBAAmB,QAAO,CAAA;AACpC,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,iBAAiB;AAAA,IAC1C,QAAQ;AACN,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAqB,MAAqC;AACxD,SAAK,oBAAoB,KAAK,UAAU,IAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,UAAU,OAA0C;AAE/D,WAAO;AAAA,EACT;AACF;AAjGE,gBAAA;AAAA,EADC,SAAS,EAAE,UAAU,KAAA,CAAM;AAAA,GADjB,UAEX,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EADC,MAAM,EAAE,UAAU,KAAA,CAAM;AAAA,GAJd,UAKX,WAAA,QAAA,CAAA;AALW,YAAN,gBAAA;AAAA,EAPN,aAAa,EAAE,MAAM,YAAY;AAAA,EACjC,KAAK;AAAA,IACJ,eAAe;AAAA,IACf,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,UAAU,UAAU,QAAQ,EAAA;AAAA,IAC5D,KAAK,EAAE,SAAS,CAAC,QAAQ,OAAO,QAAQ,EAAA;AAAA,IACxC,KAAK;AAAA,EAAA,CACN;AAAA,GACY,SAAA;ACPN,MAAM,4BAA4B,eAA0B;AAAA,EACjE,OAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS7B,MAAM,YAAY,MAAc,MAAmC;AAEjE,UAAM,WAAW,MAAM,KAAK,IAAI,EAAE,MAAM;AAExC,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAGA,UAAM,cACJ,QAAQ,KAAK,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,CAAC,MAAM,EAAE,aAAa;AAEzE,WAAO,MAAM,KAAK,OAAO;AAAA,MACvB;AAAA,MACA,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,MAAyC;AACvD,WAAO,MAAM,KAAK,IAAI,EAAE,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,qBAA2C;AAC/C,UAAM,WAAW;AAAA;AAAA,MAEf,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA,MACtB,EAAE,MAAM,SAAS,MAAM,QAAA;AAAA,MACvB,EAAE,MAAM,UAAU,MAAM,SAAA;AAAA,MACxB,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,UAAU,MAAM,SAAA;AAAA,MACxB,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA,MACtB,EAAE,MAAM,UAAU,MAAM,SAAA;AAAA,MACxB,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,gBAAgB,MAAM,eAAA;AAAA;AAAA,MAG9B,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,eAAe,MAAM,cAAA;AAAA,MAC7B,EAAE,MAAM,OAAO,MAAM,MAAA;AAAA,MACrB,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA,MACtB,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA;AAAA,MAGtB,EAAE,MAAM,cAAc,MAAM,aAAA;AAAA,MAC5B,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,gBAAgB,MAAM,eAAA;AAAA,MAC9B,EAAE,MAAM,YAAY,MAAM,WAAA;AAAA,MAC1B,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,SAAS,MAAM,QAAA;AAAA;AAAA,MAGvB,EAAE,MAAM,WAAW,MAAM,UAAA;AAAA,MACzB,EAAE,MAAM,aAAa,MAAM,YAAA;AAAA,MAC3B,EAAE,MAAM,eAAe,MAAM,cAAA;AAAA,MAC7B,EAAE,MAAM,UAAU,MAAM,SAAA;AAAA,MACxB,EAAE,MAAM,aAAa,MAAM,YAAA;AAAA,MAC3B,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA,MACtB,EAAE,MAAM,cAAc,MAAM,aAAA;AAAA;AAAA,MAG5B,EAAE,MAAM,SAAS,MAAM,QAAA;AAAA,MACvB,EAAE,MAAM,YAAY,MAAM,WAAA;AAAA,MAC1B,EAAE,MAAM,UAAU,MAAM,SAAA;AAAA,IAAS;AAGnC,UAAM,QAAqB,CAAA;AAC3B,eAAW,OAAO,UAAU;AAC1B,YAAM,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,IAAI,IAAI;AACtD,YAAM,KAAK,IAAI;AAAA,IACjB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aAAaA,WAAwC;AACzD,WAAO,KAAK,KAAK,EAAE,OAAO,EAAE,UAAAA,UAAA,GAAY;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,aAAmC;AACvC,WAAO,YAAuB,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAAgBA,WAAwC;AAC5D,WAAO;AAAA,MACL;AAAA,MACAA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;;;;;"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "timestamp": 1782335268096,
3
+ "timestamp": 1782345884478,
4
4
  "packageName": "@happyvertical/smrt-events",
5
- "packageVersion": "0.35.1",
5
+ "packageVersion": "0.35.3",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-events:EventAssetCollection": {
8
8
  "name": "eventassetcollection",
@@ -1814,7 +1814,7 @@
1814
1814
  "name": "getMetadata",
1815
1815
  "async": false,
1816
1816
  "parameters": [],
1817
- "returnType": "Record<string, any>",
1817
+ "returnType": "Record<string>",
1818
1818
  "isStatic": false,
1819
1819
  "isPublic": true
1820
1820
  },
@@ -1824,7 +1824,7 @@
1824
1824
  "parameters": [
1825
1825
  {
1826
1826
  "name": "data",
1827
- "type": "Record<string, any>",
1827
+ "type": "Record<string>",
1828
1828
  "optional": false
1829
1829
  }
1830
1830
  ],
@@ -1838,7 +1838,7 @@
1838
1838
  "parameters": [
1839
1839
  {
1840
1840
  "name": "updates",
1841
- "type": "Record<string, any>",
1841
+ "type": "Record<string>",
1842
1842
  "optional": false
1843
1843
  }
1844
1844
  ],
@@ -2375,7 +2375,7 @@
2375
2375
  "name": "getMetadata",
2376
2376
  "async": false,
2377
2377
  "parameters": [],
2378
- "returnType": "Record<string, any>",
2378
+ "returnType": "Record<string>",
2379
2379
  "isStatic": false,
2380
2380
  "isPublic": true
2381
2381
  },
@@ -2385,7 +2385,7 @@
2385
2385
  "parameters": [
2386
2386
  {
2387
2387
  "name": "data",
2388
- "type": "Record<string, any>",
2388
+ "type": "Record<string>",
2389
2389
  "optional": false
2390
2390
  }
2391
2391
  ],
@@ -2399,7 +2399,7 @@
2399
2399
  "parameters": [
2400
2400
  {
2401
2401
  "name": "updates",
2402
- "type": "Record<string, any>",
2402
+ "type": "Record<string>",
2403
2403
  "optional": false
2404
2404
  }
2405
2405
  ],
@@ -3147,7 +3147,7 @@
3147
3147
  "name": "getMetadata",
3148
3148
  "async": false,
3149
3149
  "parameters": [],
3150
- "returnType": "Record<string, any>",
3150
+ "returnType": "Record<string>",
3151
3151
  "isStatic": false,
3152
3152
  "isPublic": true
3153
3153
  },
@@ -3157,7 +3157,7 @@
3157
3157
  "parameters": [
3158
3158
  {
3159
3159
  "name": "data",
3160
- "type": "Record<string, any>",
3160
+ "type": "Record<string>",
3161
3161
  "optional": false
3162
3162
  }
3163
3163
  ],
@@ -3171,7 +3171,7 @@
3171
3171
  "parameters": [
3172
3172
  {
3173
3173
  "name": "updates",
3174
- "type": "Record<string, any>",
3174
+ "type": "Record<string>",
3175
3175
  "optional": false
3176
3176
  }
3177
3177
  ],
@@ -3878,7 +3878,7 @@
3878
3878
  "name": "getSchema",
3879
3879
  "async": false,
3880
3880
  "parameters": [],
3881
- "returnType": "Record<string, any>",
3881
+ "returnType": "Record<string>",
3882
3882
  "isStatic": false,
3883
3883
  "isPublic": true
3884
3884
  },
@@ -3888,7 +3888,7 @@
3888
3888
  "parameters": [
3889
3889
  {
3890
3890
  "name": "data",
3891
- "type": "Record<string, any>",
3891
+ "type": "Record<string>",
3892
3892
  "optional": false
3893
3893
  }
3894
3894
  ],
@@ -3900,7 +3900,7 @@
3900
3900
  "name": "getParticipantSchema",
3901
3901
  "async": false,
3902
3902
  "parameters": [],
3903
- "returnType": "Record<string, any>",
3903
+ "returnType": "Record<string>",
3904
3904
  "isStatic": false,
3905
3905
  "isPublic": true
3906
3906
  },
@@ -3910,7 +3910,7 @@
3910
3910
  "parameters": [
3911
3911
  {
3912
3912
  "name": "data",
3913
- "type": "Record<string, any>",
3913
+ "type": "Record<string>",
3914
3914
  "optional": false
3915
3915
  }
3916
3916
  ],
@@ -23,19 +23,19 @@ export declare class Event extends SmrtHierarchical {
23
23
  *
24
24
  * @returns Parsed metadata object or empty object
25
25
  */
26
- getMetadata(): Record<string, any>;
26
+ getMetadata(): Record<string, unknown>;
27
27
  /**
28
28
  * Set metadata from object
29
29
  *
30
30
  * @param data - Metadata object to store
31
31
  */
32
- setMetadata(data: Record<string, any>): void;
32
+ setMetadata(data: Record<string, unknown>): void;
33
33
  /**
34
34
  * Update metadata by merging with existing values
35
35
  *
36
36
  * @param updates - Partial metadata to merge
37
37
  */
38
- updateMetadata(updates: Record<string, any>): void;
38
+ updateMetadata(updates: Record<string, unknown>): void;
39
39
  /**
40
40
  * Update event status
41
41
  *
@@ -47,19 +47,19 @@ export declare class Event extends SmrtHierarchical {
47
47
  *
48
48
  * @returns EventSeries instance or null
49
49
  */
50
- getSeries(): Promise<any>;
50
+ getSeries(): Promise<import('./EventSeries').EventSeries | null>;
51
51
  /**
52
52
  * Get the event type
53
53
  *
54
54
  * @returns EventType instance or null
55
55
  */
56
- getType(): Promise<any>;
56
+ getType(): Promise<import('./EventType').EventType | null>;
57
57
  /**
58
58
  * Get the place for this event
59
59
  *
60
60
  * @returns Place instance or null
61
61
  */
62
- getPlace(): Promise<any>;
62
+ getPlace(): Promise<import('@happyvertical/smrt-places').Place | null>;
63
63
  /**
64
64
  * Get the root event (top-level ancestor) of this event's hierarchy.
65
65
  *
@@ -71,7 +71,7 @@ export declare class Event extends SmrtHierarchical {
71
71
  *
72
72
  * @returns Array of EventParticipant instances
73
73
  */
74
- getParticipants(): Promise<any>;
74
+ getParticipants(): Promise<import('./EventParticipant').EventParticipant[]>;
75
75
  private getEventAssetCollection;
76
76
  getAssets(relationship?: string): Promise<Asset[]>;
77
77
  addAsset(asset: Asset, relationship?: string, sortOrder?: number): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/models/Event.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EAGL,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1D,qBAOa,KAAM,SAAQ,gBAAgB;IAEzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,IAAI,EAAE,MAAM,CAAM;IAElB,QAAQ,SAAM;IAGd,MAAM,SAAM;IAEZ,OAAO,SAAM;IACb,WAAW,SAAM;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC5B,MAAM,EAAE,WAAW,CAAe;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,YAAiB;IA+BtC;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IASlC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5C;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKlD;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD;;;;OAIG;IACG,SAAS;IAaf;;;;OAIG;IACG,OAAO;IAWb;;;;OAIG;IACG,QAAQ;IAiBd;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAKpC;;;;OAIG;IACG,eAAe;YAWP,uBAAuB;IAM/B,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBlD,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC;IAgBV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxE;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAUvB;;;;OAIG;IACH,MAAM,IAAI,OAAO;CAGlB"}
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/models/Event.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EAGL,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1D,qBAOa,KAAM,SAAQ,gBAAgB;IAEzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,IAAI,EAAE,MAAM,CAAM;IAElB,QAAQ,SAAM;IAGd,MAAM,SAAM;IAEZ,OAAO,SAAM;IACb,WAAW,SAAM;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC5B,MAAM,EAAE,WAAW,CAAe;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,YAAiB;IA+BtC;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAStC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIhD;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKtD;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD;;;;OAIG;IACG,SAAS;IAWf;;;;OAIG;IACG,OAAO;IAWb;;;;OAIG;IACG,QAAQ;IAiBd;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAKpC;;;;OAIG;IACG,eAAe;YASP,uBAAuB;IAM/B,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBlD,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC;IAgBV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxE;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAUvB;;;;OAIG;IACH,MAAM,IAAI,OAAO;CAGlB"}
@@ -18,31 +18,31 @@ export declare class EventParticipant extends SmrtObject {
18
18
  *
19
19
  * @returns Parsed metadata object or empty object
20
20
  */
21
- getMetadata(): Record<string, any>;
21
+ getMetadata(): Record<string, unknown>;
22
22
  /**
23
23
  * Set metadata from object
24
24
  *
25
25
  * @param data - Metadata object to store
26
26
  */
27
- setMetadata(data: Record<string, any>): void;
27
+ setMetadata(data: Record<string, unknown>): void;
28
28
  /**
29
29
  * Update metadata by merging with existing values
30
30
  *
31
31
  * @param updates - Partial metadata to merge
32
32
  */
33
- updateMetadata(updates: Record<string, any>): void;
33
+ updateMetadata(updates: Record<string, unknown>): void;
34
34
  /**
35
35
  * Get the event for this participant
36
36
  *
37
37
  * @returns Event instance or null
38
38
  */
39
- getEvent(): Promise<any>;
39
+ getEvent(): Promise<import('./Event').Event | null>;
40
40
  /**
41
41
  * Get the profile for this participant
42
42
  *
43
43
  * @returns Profile instance or null
44
44
  */
45
- getProfile(): Promise<any>;
45
+ getProfile(): Promise<import('@happyvertical/smrt-profiles').Profile | null>;
46
46
  /**
47
47
  * Get group participants (others with same groupId)
48
48
  *
@@ -1 +1 @@
1
- {"version":3,"file":"EventParticipant.d.ts","sourceRoot":"","sources":["../../src/models/EventParticipant.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,qBASa,gBAAiB,SAAQ,UAAU;IAE9C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAK/B,OAAO,SAAM;IAEb,SAAS,SAAM;IACf,IAAI,EAAE,MAAM,CAAM;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,OAAO,SAAM;IACb,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,uBAA4B;IAwBjD;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IASlC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5C;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKlD;;;;OAIG;IACG,QAAQ;IASd;;;;OAIG;IACG,UAAU;IAgBhB;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAkBzD;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;OAIG;IACH,MAAM,IAAI,OAAO;CAGlB"}
1
+ {"version":3,"file":"EventParticipant.d.ts","sourceRoot":"","sources":["../../src/models/EventParticipant.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,qBASa,gBAAiB,SAAQ,UAAU;IAE9C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAK/B,OAAO,SAAM;IAEb,SAAS,SAAM;IACf,IAAI,EAAE,MAAM,CAAM;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,OAAO,SAAM;IACb,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,uBAA4B;IAwBjD;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAStC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIhD;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKtD;;;;OAIG;IACG,QAAQ;IASd;;;;OAIG;IACG,UAAU;IAgBhB;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgBzD;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;OAIG;IACH,MAAM,IAAI,OAAO;CAGlB"}
@@ -32,37 +32,37 @@ export declare class EventSeries extends SmrtObject {
32
32
  *
33
33
  * @returns Parsed metadata object or empty object
34
34
  */
35
- getMetadata(): Record<string, any>;
35
+ getMetadata(): Record<string, unknown>;
36
36
  /**
37
37
  * Set metadata from object
38
38
  *
39
39
  * @param data - Metadata object to store
40
40
  */
41
- setMetadata(data: Record<string, any>): void;
41
+ setMetadata(data: Record<string, unknown>): void;
42
42
  /**
43
43
  * Update metadata by merging with existing values
44
44
  *
45
45
  * @param updates - Partial metadata to merge
46
46
  */
47
- updateMetadata(updates: Record<string, any>): void;
47
+ updateMetadata(updates: Record<string, unknown>): void;
48
48
  /**
49
49
  * Get the event type for this series
50
50
  *
51
51
  * @returns EventType instance or null
52
52
  */
53
- getType(): Promise<any>;
53
+ getType(): Promise<import('./EventType').EventType | null>;
54
54
  /**
55
55
  * Get the organizer profile for this series
56
56
  *
57
57
  * @returns Profile instance or null
58
58
  */
59
- getOrganizer(): Promise<any>;
59
+ getOrganizer(): Promise<import('@happyvertical/smrt-profiles').Profile | null>;
60
60
  /**
61
61
  * Get all events in this series
62
62
  *
63
63
  * @returns Array of Event instances
64
64
  */
65
- getEvents(): Promise<any>;
65
+ getEvents(): Promise<import('./Event').Event[]>;
66
66
  /**
67
67
  * Check if series is currently active
68
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"EventSeries.d.ts","sourceRoot":"","sources":["../../src/models/EventSeries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEtE,qBAOa,WAAY,SAAQ,UAAU;IAEzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,IAAI,EAAE,MAAM,CAAM;IAElB,MAAM,SAAM;IAEZ,WAAW,SAAM;IACjB,WAAW,SAAM;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC5B,UAAU,SAAM;IAChB,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,kBAAuB;IAmC5C;;;;OAIG;IACH,aAAa,IAAI,iBAAiB,GAAG,IAAI;IASzC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI/C;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IASlC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5C;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKlD;;;;OAIG;IACG,OAAO;IAWb;;;;OAIG;IACG,YAAY;IAiBlB;;;;OAIG;IACG,SAAS;IAOf;;;;OAIG;IACH,QAAQ,IAAI,OAAO;CAMpB"}
1
+ {"version":3,"file":"EventSeries.d.ts","sourceRoot":"","sources":["../../src/models/EventSeries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEtE,qBAOa,WAAY,SAAQ,UAAU;IAEzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,IAAI,EAAE,MAAM,CAAM;IAElB,MAAM,SAAM;IAEZ,WAAW,SAAM;IACjB,WAAW,SAAM;IACjB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC5B,UAAU,SAAM;IAChB,QAAQ,SAAM;IACd,UAAU,SAAM;IAChB,MAAM,SAAM;IAGZ,SAAS,OAAc;IACvB,SAAS,OAAc;gBAEX,OAAO,GAAE,kBAAuB;IAmC5C;;;;OAIG;IACH,aAAa,IAAI,iBAAiB,GAAG,IAAI;IASzC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI/C;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAStC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIhD;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKtD;;;;OAIG;IACG,OAAO;IAWb;;;;OAIG;IACG,YAAY;IAiBlB;;;;OAIG;IACG,SAAS;IAOf;;;;OAIG;IACH,QAAQ,IAAI,OAAO;CAMpB"}
@@ -14,25 +14,25 @@ export declare class EventType extends SmrtObject {
14
14
  *
15
15
  * @returns Parsed schema object or empty object if no schema
16
16
  */
17
- getSchema(): Record<string, any>;
17
+ getSchema(): Record<string, unknown>;
18
18
  /**
19
19
  * Set schema from object
20
20
  *
21
21
  * @param data - Schema object to store
22
22
  */
23
- setSchema(data: Record<string, any>): void;
23
+ setSchema(data: Record<string, unknown>): void;
24
24
  /**
25
25
  * Get participant schema as parsed object
26
26
  *
27
27
  * @returns Parsed participant schema object or empty object
28
28
  */
29
- getParticipantSchema(): Record<string, any>;
29
+ getParticipantSchema(): Record<string, unknown>;
30
30
  /**
31
31
  * Set participant schema from object
32
32
  *
33
33
  * @param data - Participant schema object to store
34
34
  */
35
- setParticipantSchema(data: Record<string, any>): void;
35
+ setParticipantSchema(data: Record<string, unknown>): void;
36
36
  /**
37
37
  * Convenience method for slug-based lookup
38
38
  *
@@ -1 +1 @@
1
- {"version":3,"file":"EventType.d.ts","sourceRoot":"","sources":["../../src/models/EventType.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,UAAU,EAAQ,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,qBAOa,SAAU,SAAQ,UAAU;IAEvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG/B,IAAI,EAAE,MAAM,CAAM;IAElB,WAAW,EAAE,MAAM,CAAM;IACzB,MAAM,EAAE,MAAM,CAAM;IACpB,iBAAiB,EAAE,MAAM,CAAM;IAG/B,SAAS,EAAE,IAAI,CAAc;IAC7B,SAAS,EAAE,IAAI,CAAc;gBAEjB,OAAO,GAAE,gBAAqB;IA4B1C;;;;OAIG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAShC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI1C;;;;OAIG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAS3C;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIrD;;;;;OAKG;WACU,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAIjE"}
1
+ {"version":3,"file":"EventType.d.ts","sourceRoot":"","sources":["../../src/models/EventType.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,UAAU,EAAQ,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,qBAOa,SAAU,SAAQ,UAAU;IAEvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG/B,IAAI,EAAE,MAAM,CAAM;IAElB,WAAW,EAAE,MAAM,CAAM;IACzB,MAAM,EAAE,MAAM,CAAM;IACpB,iBAAiB,EAAE,MAAM,CAAM;IAG/B,SAAS,EAAE,IAAI,CAAc;IAC7B,SAAS,EAAE,IAAI,CAAc;gBAEjB,OAAO,GAAE,gBAAqB;IA4B1C;;;;OAIG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASpC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9C;;;;OAIG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS/C;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIzD;;;;;OAKG;WACU,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAIjE"}
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-06-24T21:07:48.401Z",
3
+ "generatedAt": "2026-06-25T00:04:44.816Z",
4
4
  "packageName": "@happyvertical/smrt-events",
5
- "packageVersion": "0.35.1",
5
+ "packageVersion": "0.35.3",
6
6
  "sourceManifestPath": "dist/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "2ca5b6d7312c8573e37c42e61b6b31b33d8e68e4e8e4f3703da3dd576ebccaaf",
10
- "packageJson": "d6f6b066e51a4953289b6019a1ac7d4a0ef70fc60f5eb5d9b079b9f87bbde196",
9
+ "manifest": "767b7515a9aaa4d817a4ebecfaf3ad808825445b54843110a6f21d275e2e5779",
10
+ "packageJson": "9be49bb8e0cb3fcf23d98ff786aa3a26c515aed719b3efa326c15f0dbf2b015b",
11
11
  "agents": "297e9ee2a72287267bf9774c77587203db5215951075847172ebb012345f599e"
12
12
  },
13
13
  "exports": [
package/dist/types.d.ts CHANGED
@@ -32,8 +32,8 @@ export interface EventTypeOptions extends SmrtObjectOptions {
32
32
  slug?: string;
33
33
  name?: string;
34
34
  description?: string;
35
- schema?: Record<string, any> | string;
36
- participantSchema?: Record<string, any> | string;
35
+ schema?: Record<string, unknown> | string;
36
+ participantSchema?: Record<string, unknown> | string;
37
37
  createdAt?: Date;
38
38
  updatedAt?: Date;
39
39
  }
@@ -50,7 +50,7 @@ export interface EventSeriesOptions extends SmrtObjectOptions {
50
50
  startDate?: Date | null;
51
51
  endDate?: Date | null;
52
52
  recurrence?: RecurrencePattern | string;
53
- metadata?: Record<string, any> | string;
53
+ metadata?: Record<string, unknown> | string;
54
54
  externalId?: string;
55
55
  source?: string;
56
56
  createdAt?: Date;
@@ -72,7 +72,7 @@ export interface EventOptions extends SmrtObjectOptions {
72
72
  endDate?: Date | null;
73
73
  status?: EventStatus;
74
74
  round?: number | null;
75
- metadata?: Record<string, any> | string;
75
+ metadata?: Record<string, unknown> | string;
76
76
  externalId?: string;
77
77
  source?: string;
78
78
  createdAt?: Date;
@@ -88,7 +88,7 @@ export interface EventParticipantOptions extends SmrtObjectOptions {
88
88
  role?: ParticipantRole | string;
89
89
  placement?: number | null;
90
90
  groupId?: string;
91
- metadata?: Record<string, any> | string;
91
+ metadata?: Record<string, unknown> | string;
92
92
  externalId?: string;
93
93
  source?: string;
94
94
  createdAt?: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-events",
3
- "version": "0.35.1",
3
+ "version": "0.35.3",
4
4
  "description": "Hierarchical event management with participant tracking and SMRT framework support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,13 +49,13 @@
49
49
  "@happyvertical/logger": "^0.74.7",
50
50
  "@happyvertical/sql": "^0.74.7",
51
51
  "@happyvertical/utils": "^0.74.7",
52
- "@happyvertical/smrt-core": "0.35.1",
53
- "@happyvertical/smrt-profiles": "0.35.1",
54
- "@happyvertical/smrt-assets": "0.35.1",
55
- "@happyvertical/smrt-tenancy": "0.35.1",
56
- "@happyvertical/smrt-places": "0.35.1",
57
- "@happyvertical/smrt-types": "0.35.1",
58
- "@happyvertical/smrt-ui": "0.35.1"
52
+ "@happyvertical/smrt-places": "0.35.3",
53
+ "@happyvertical/smrt-core": "0.35.3",
54
+ "@happyvertical/smrt-profiles": "0.35.3",
55
+ "@happyvertical/smrt-assets": "0.35.3",
56
+ "@happyvertical/smrt-tenancy": "0.35.3",
57
+ "@happyvertical/smrt-types": "0.35.3",
58
+ "@happyvertical/smrt-ui": "0.35.3"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@sveltejs/package": "^2.5.7",
@@ -67,7 +67,7 @@
67
67
  "typescript": "^5.9.3",
68
68
  "vite": "^7.3.1",
69
69
  "vitest": "^4.0.17",
70
- "@happyvertical/smrt-vitest": "0.35.1"
70
+ "@happyvertical/smrt-vitest": "0.35.3"
71
71
  },
72
72
  "keywords": [
73
73
  "events",