{"_id":"@calenderjs/event-model","_rev":"4-123b006e5ac3102a9984f9a916999431","name":"@calenderjs/event-model","dist-tags":{"latest":"0.3.1"},"versions":{"0.0.1":{"name":"@calenderjs/event-model","version":"0.0.1","_id":"@calenderjs/event-model@0.0.1","maintainers":[{"name":"systembug","email":"albert_lee@hotmail.com"}],"dist":{"shasum":"2208be7305a7114d2fde38a0c53fe93a075aded9","tarball":"https://registry.npmjs.org/@calenderjs/event-model/-/event-model-0.0.1.tgz","fileCount":20,"integrity":"sha512-NQ9XdKmEBwoIpJdXlCeZ1jinpOC/lsnBHlxrqZiJsG7r4BGEVrF9eATsuz4h1w/CxE114ftZmOH2eVeiazcRIg==","signatures":[{"sig":"MEQCICKJ/DoTgsyxOzCd+xD3vJpx/6WbVBeai0CVwzmwJzK3AiBuctMEhfDuX2KCFiJr/1CfYObEvMf1y2aH0YqQDUNcwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1261599},"main":"./dist/index.cjs","type":"module","_from":"file:calenderjs-event-model-0.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit"},"_npmUser":{"name":"systembug","email":"albert_lee@hotmail.com"},"_resolved":"/private/var/folders/y8/p936_fp95g73q47fqdw8glkh0000gn/T/155ef4550127c9900ef12ad6ea70e434/calenderjs-event-model-0.0.1.tgz","_integrity":"sha512-NQ9XdKmEBwoIpJdXlCeZ1jinpOC/lsnBHlxrqZiJsG7r4BGEVrF9eATsuz4h1w/CxE114ftZmOH2eVeiazcRIg==","_npmVersion":"11.6.2","description":"Event Data Model - Single Source of Truth (SSOT) for Event data structures","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^20.19.27","vite-plugin-dts":"^4.5.4","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/event-model_0.0.1_1768786706272_0.04935361815158057","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@calenderjs/event-model","version":"0.0.2","_id":"@calenderjs/event-model@0.0.2","maintainers":[{"name":"systembug","email":"albert_lee@hotmail.com"}],"dist":{"shasum":"6f30a499c37b7f24e26dcf7603027c29530f7639","tarball":"https://registry.npmjs.org/@calenderjs/event-model/-/event-model-0.0.2.tgz","fileCount":20,"integrity":"sha512-36fr6PXYqCM8dUfrI9NRXJOQuJtSDFALo3Rkcj0lILFoStl9T2LblWPCX8UE/czOVDujnxmZfReKQwNyqVj7LQ==","signatures":[{"sig":"MEUCIAD7rjXCBlV9FeAwm/4laoB7qDeze72X4Io5uEIsuPvwAiEAxrtuoTlK+EBIc2a4nZk2gYsgOXPAAi6DbQH6lNpDxy0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1261599},"main":"./dist/index.cjs","type":"module","_from":"file:calenderjs-event-model-0.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit"},"_npmUser":{"name":"systembug","email":"albert_lee@hotmail.com"},"_resolved":"/private/var/folders/y8/p936_fp95g73q47fqdw8glkh0000gn/T/6ab6231fd057bbea27b9af5a1fdefb69/calenderjs-event-model-0.0.2.tgz","_integrity":"sha512-36fr6PXYqCM8dUfrI9NRXJOQuJtSDFALo3Rkcj0lILFoStl9T2LblWPCX8UE/czOVDujnxmZfReKQwNyqVj7LQ==","_npmVersion":"11.6.2","description":"Event Data Model - Single Source of Truth (SSOT) for Event data structures","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^20.19.27","vite-plugin-dts":"^4.5.4","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/event-model_0.0.2_1768800032379_0.0369422641445587","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@calenderjs/event-model","version":"0.3.0","_id":"@calenderjs/event-model@0.3.0","maintainers":[{"name":"systembug","email":"albert_lee@hotmail.com"}],"dist":{"shasum":"c534c5a0e5f11f52f6a71bab8cddb461e4ea982d","tarball":"https://registry.npmjs.org/@calenderjs/event-model/-/event-model-0.3.0.tgz","fileCount":20,"integrity":"sha512-hTBvqOw4PZP0Kubm0s5JMUSBlujb22ycffcojAaXlK8ncBSdhj5qPs5iv43e9JQClyFcgbcydnywwKYfxDM0kg==","signatures":[{"sig":"MEUCIQCDug4rj314LPl3CsD5qJy6vHOO/uP4ZflKC1h0jC7YYgIgPWjXQW6nlmTNLNoUrZrma4q7CVzg/CM/GepRz9jatsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1261739},"main":"./dist/index.cjs","type":"module","_from":"file:calenderjs-event-model-0.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite build --watch","lint":"eslint src","test":"vitest run","build":"vite build","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit"},"_npmUser":{"name":"systembug","email":"albert_lee@hotmail.com"},"_resolved":"/private/var/folders/y8/p936_fp95g73q47fqdw8glkh0000gn/T/3061404ce003ab9c4cb535b07ce0d399/calenderjs-event-model-0.3.0.tgz","_integrity":"sha512-hTBvqOw4PZP0Kubm0s5JMUSBlujb22ycffcojAaXlK8ncBSdhj5qPs5iv43e9JQClyFcgbcydnywwKYfxDM0kg==","_npmVersion":"11.6.2","description":"Event Data Model - Single Source of Truth (SSOT) for Event data structures","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^20.19.27","vite-plugin-dts":"^4.5.4","@vitest/coverage-v8":"^2.1.9"},"_npmOperationalInternal":{"tmp":"tmp/event-model_0.3.0_1786902960153_0.6664580069522708","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@calenderjs/event-model","version":"0.3.1","description":"Event Data Model - Single Source of Truth (SSOT) for Event data structures","type":"module","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"publishConfig":{"access":"public"},"dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1"},"devDependencies":{"@types/node":"^20.19.27","@vitest/coverage-v8":"^2.1.9","typescript":"^5.9.3","vite":"^7.3.0","vite-plugin-dts":"^4.5.4","vitest":"^2.1.9"},"scripts":{"dev":"vite build --watch","build":"vite build","test":"vitest run","lint":"eslint src","typecheck":"tsc --noEmit","clean":"rm -rf dist coverage"},"_id":"@calenderjs/event-model@0.3.1","_integrity":"sha512-Tkx32nrzPUny8Btt8CaEWAiEpoEezmxsJLipZEPKwJDao/QG1MAhaGryjaDipnX1HAeP4gvAHL486TocsgQX7A==","_resolved":"/private/var/folders/y8/p936_fp95g73q47fqdw8glkh0000gn/T/e629a3ae4a0d8ebd47d31a46fd1d6080/calenderjs-event-model-0.3.1.tgz","_from":"file:calenderjs-event-model-0.3.1.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Tkx32nrzPUny8Btt8CaEWAiEpoEezmxsJLipZEPKwJDao/QG1MAhaGryjaDipnX1HAeP4gvAHL486TocsgQX7A==","shasum":"8faedff4dc57cb5a4ae8ff693ccc29f1ce5d31d3","tarball":"https://registry.npmjs.org/@calenderjs/event-model/-/event-model-0.3.1.tgz","fileCount":20,"unpackedSize":78687,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDPqG6M8ziivJNP1ocqWAGvgzh4WoAaszNJ//+hMSt/kQIhAITae/Zg2giW7ZnOHMHfpKbn97E//zXkCYgB0+P2+l4r"}]},"_npmUser":{"name":"systembug","email":"albert_lee@hotmail.com"},"directories":{},"maintainers":[{"name":"systembug","email":"albert_lee@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/event-model_0.3.1_1786924549987_0.9713562301716101"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-19T01:38:26.178Z","modified":"2026-08-16T23:55:50.334Z","0.0.1":"2026-01-19T01:38:26.430Z","0.0.2":"2026-01-19T05:20:32.554Z","0.3.0":"2026-08-16T17:56:00.347Z","0.3.1":"2026-08-16T23:55:50.127Z"},"description":"Event Data Model - Single Source of Truth (SSOT) for Event data structures","maintainers":[{"name":"systembug","email":"albert_lee@hotmail.com"}],"readme":"# @calenderjs/event-model\n\nEvent Data Model - Single Source of Truth (SSOT) for Event data structures.\n\n## 概述\n\n此包提供 Event 数据模型的类型定义和 JSON Schema 验证，作为所有其他包的单一数据源（SSOT）。\n\n## 职责\n\n`@calenderjs/event-model` 包有两个核心职责：\n\n1. **定义数据模型和 JSON Schema**\n   - Event 接口定义（`Event.ts`）\n   - Event JSON Schema（`validator.ts` 中的 `EVENT_BASE_SCHEMA`）\n   - JSON Schema 类型定义（`types.ts`）\n\n2. **使用 JSON Schema 验证数据**\n   - EventValidator 类（`validator.ts` 和 `validators/EventValidator.ts`）\n   - 验证 Event 对象是否符合 Event Data Model\n   - 验证 Event.data 字段是否符合指定的 JSON Schema\n\n## 依赖关系\n\n```\n@calenderjs/event-model (SSOT)\n    ↑                    ↑\n    │                    │\n@calenderjs/calendar  @calenderjs/event-dsl\n```\n\n## 导出\n\n### 1. Event 接口和类型\n\n```typescript\nimport { Event, EventMetadata } from \"@calenderjs/event-model\";\n\nconst event: Event = {\n  id: \"event-1\",\n  type: \"meeting\",\n  title: \"团队会议\",\n  startTime: new Date(\"2025-01-15T10:00:00\"),\n  endTime: new Date(\"2025-01-15T11:00:00\"),\n  data: {\n    attendees: [\"user1@example.com\"],\n    location: \"会议室 A\",\n  },\n};\n```\n\n### 2. Event JSON Schema\n\n```typescript\nimport { EVENT_BASE_SCHEMA } from \"@calenderjs/event-model\";\n\n// EVENT_BASE_SCHEMA 定义了 Event 接口的 JSON Schema\n// 用于验证 Event 对象的基本结构\nconsole.log(EVENT_BASE_SCHEMA);\n```\n\n### 3. Event 验证器\n\n```typescript\nimport { EventValidator, EVENT_BASE_SCHEMA } from \"@calenderjs/event-model\";\nimport type { Event } from \"@calenderjs/event-model\";\n\nconst validator = new EventValidator();\n\n// 验证 Event 对象是否符合 Event Data Model\nconst event: Event = {\n  id: \"event-1\",\n  type: \"meeting\",\n  title: \"团队会议\",\n  startTime: new Date(\"2025-01-15T10:00:00\"),\n  endTime: new Date(\"2025-01-15T11:00:00\"),\n  data: {},\n};\n\nconst result = validator.validateBase(event);\nif (!result.valid) {\n  console.error(\"验证失败:\", result.errors);\n}\n```\n\n## 使用\n\n### 在 calendar 包中使用\n\n```typescript\nimport type { Event } from \"@calenderjs/event-model\";\n\nexport class Calendar {\n  private events: Event[] = [];\n\n  addEvent(event: Event) {\n    this.events.push(event);\n  }\n}\n```\n\n### 在 event-dsl 包中使用\n\n```typescript\nimport type { Event } from \"@calenderjs/event-model\";\n\nexport class EventRuntime {\n  validate(event: Event): ValidationResult {\n    // 验证逻辑\n  }\n}\n```\n\n## 相关 RFC\n\n- RFC-0001: Event Calendar DSL\n- RFC-0011: Event 数据模型与 Event DSL 集成\n","readmeFilename":"README.md"}