{"_id":"@alphablue/content-model","_rev":"3-85ced1ffd0ab4b0a2c5dd9eb8a79c7a6","name":"@alphablue/content-model","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@alphablue/content-model","version":"0.1.0","license":"MIT","_id":"@alphablue/content-model@0.1.0","maintainers":[{"name":"lukesproxy","email":"luke@soft.pw"}],"//":"publishConfig points consumers at compiled output; workspace packages use TypeScript source directly.","dist":{"shasum":"08c3dec6e04295917c20290c2f46fa748b985156","tarball":"https://registry.npmjs.org/@alphablue/content-model/-/content-model-0.1.0.tgz","fileCount":6,"integrity":"sha512-bOOZi9vqECALXHbCpBKZxWqqnRqJVLcS7jt2UAzzYt9oBK0pHRThuBTto0HiClRuD3p+mJf399sCYHX53Zp0Zg==","signatures":[{"sig":"MEQCIHbOqKqjND5zYbNYM0xlDa/KSixuGOGbMik1oecN+NUOAiAPzFHhsSycroh6M3Y096BLr/obMVescwRnXc+eDzfoWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75393},"main":"./dist/index.js","type":"module","_from":"file:/var/folders/x9/t0h3hmd52hq13mvw9drwtz500000gn/T/tmp.X0NbDUsdvk/alphablue-content-model-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"lukesproxy","email":"luke@soft.pw"},"_resolved":"/var/folders/x9/t0h3hmd52hq13mvw9drwtz500000gn/T/tmp.X0NbDUsdvk/alphablue-content-model-0.1.0.tgz","_integrity":"sha512-bOOZi9vqECALXHbCpBKZxWqqnRqJVLcS7jt2UAzzYt9oBK0pHRThuBTto0HiClRuD3p+mJf399sCYHX53Zp0Zg==","_npmVersion":"10.9.4","description":"Framework-neutral contracts and validation for AlphaBlue website content.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.6.0"},"_npmOperationalInternal":{"tmp":"tmp/content-model_0.1.0_1785597674729_0.28952172106529694","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alphablue/content-model","version":"0.2.0","license":"MIT","_id":"@alphablue/content-model@0.2.0","maintainers":[{"name":"lukesproxy","email":"luke@soft.pw"}],"//":"publishConfig points consumers at compiled output; workspace packages use TypeScript source directly.","dist":{"shasum":"9fab543bf48494ea22f39ebbc2b95214d46863a5","tarball":"https://registry.npmjs.org/@alphablue/content-model/-/content-model-0.2.0.tgz","fileCount":10,"integrity":"sha512-W/Q1nNKwTumyId3hu39xGT+R8M/JH/AniqTv/o5yqEc8PhmwSZwPkYftxP3ITRyWwb5JdpEs2x/I3BQ8YUdoQg==","signatures":[{"sig":"MEYCIQDPQhTLHkcN9MVsYsiHag+zVHwOt3t7C7zifMCjU3EnqgIhAP3J68HmFxuEIk96Pc+om80E9sr5dl+R6ZTPNNgkLG6b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266418},"type":"module","exports":{".":"./src/index.ts"},"gitHead":"9784ce28fd34a080fd6faa5d84fb085bfb2a7c4f","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"lukesproxy","email":"luke@soft.pw"},"_npmVersion":"11.12.1","description":"Framework-neutral contracts and validation for AlphaBlue website content.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.4.3"},"publishConfig":{"main":"./dist/index.js","types":"./dist/index.d.ts","access":"public","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.10","typescript":"^5.6.0"},"_npmOperationalInternal":{"tmp":"tmp/content-model_0.2.0_1787640913976_0.06518633245124184","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@alphablue/content-model","version":"0.2.1","description":"Framework-neutral contracts and validation for AlphaBlue website content.","license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"//":"publishConfig points consumers at compiled output; workspace packages use TypeScript source directly.","publishConfig":{"access":"public"},"dependencies":{"zod":"^4.4.3"},"devDependencies":{"typescript":"^5.6.0","vitest":"^4.1.10"},"scripts":{"build":"tsc -p tsconfig.build.json","test":"vitest run","typecheck":"tsc --noEmit"},"main":"./dist/index.js","types":"./dist/index.d.ts","_id":"@alphablue/content-model@0.2.1","_integrity":"sha512-9dd6kRoqBHuoAafqEdDVfZmYTpMNlnxb+svlU4j5olfbM0veUrNOus+6xgtIuBuWiueARKZzCPvb0Jd+dRm5tw==","_resolved":"/tmp/alphablue-npm-remediation.ZV630E/alphablue-content-model-0.2.1.tgz","_from":"file:/tmp/alphablue-npm-remediation.ZV630E/alphablue-content-model-0.2.1.tgz","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-9dd6kRoqBHuoAafqEdDVfZmYTpMNlnxb+svlU4j5olfbM0veUrNOus+6xgtIuBuWiueARKZzCPvb0Jd+dRm5tw==","shasum":"bedc3540e7c86311b2af7d61a24e0b6ecb4dcba9","tarball":"https://registry.npmjs.org/@alphablue/content-model/-/content-model-0.2.1.tgz","fileCount":10,"unpackedSize":266367,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCklSzkAzTBYuGlaUMX4j6tBazkhKRp1EPNFjdxgF3QsAIgSUWDp7+1CYVO+boCwqtZreJDJUn9VP9UHL5dnceeGxI="}]},"_npmUser":{"name":"lukesproxy","email":"luke@soft.pw"},"directories":{},"maintainers":[{"name":"lukesproxy","email":"luke@soft.pw"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/content-model_0.2.1_1787641181964_0.5644176466156456"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-01T15:21:14.547Z","modified":"2026-08-25T06:59:42.264Z","0.1.0":"2026-08-01T15:21:14.851Z","0.2.0":"2026-08-25T06:55:14.133Z","0.2.1":"2026-08-25T06:59:42.097Z"},"license":"MIT","description":"Framework-neutral contracts and validation for AlphaBlue website content.","maintainers":[{"name":"lukesproxy","email":"luke@soft.pw"}],"readme":"# @alphablue/content-model\n\nWebsite Portal 内容的 framework-neutral、版本化 contract。当前由此包统一拥有：\n\n- `ArticleDocument` 的 block／mark 类型与 Zod schema；\n- locale body、title、excerpt、slug、status 的 validation；\n- Content API 使用的 `ArticleSummary`、`ArticleDetail`、`ArticlesPage`；\n- `migrateArticleDocument()` 与未知版本错误；\n- 安全链接判断与 Article 图片引用收集。\n\n它刻意不依赖 React、Astro、BlockNote、Cloudflare runtime 或数据库。编辑器 JSON、\n渲染 HTML 与 Cloudflare Images delivery URL 都不是持久化 contract。\n\n```ts\nimport {\n  articleDocumentSchema,\n  collectArticleImageIds,\n  migrateArticleDocument,\n  type ArticleDetail,\n  type ArticleDocument,\n} from \"@alphablue/content-model\";\n\nconst document: ArticleDocument = articleDocumentSchema.parse(input);\nconst migrated = migrateArticleDocument(storedValue);\nconst imageIds = collectArticleImageIds(migrated);\n```\n\n升级 document format 时，必须先增加显式 migration 和测试；不得让 consumer\n静默忽略未知 version。\n\n## 发布 gate\n\n```bash\npnpm --filter @alphablue/content-model test\npnpm --filter @alphablue/content-model typecheck\npnpm --filter @alphablue/content-model build\npnpm --dir packages/content-model pack --pack-destination <temp-dir>\n```\n\n此包必须先于 `@alphablue/astro-site` 发布。\n\n## License\n\nMIT\n","readmeFilename":"README.md"}