{"_id":"@bernierllc/content-type-text","_rev":"7-649a208ae473f133d5fe9d0dc5c14e58","name":"@bernierllc/content-type-text","dist-tags":{"latest":"1.5.0"},"versions":{"1.0.1":{"name":"@bernierllc/content-type-text","version":"1.0.1","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"45415c41097480d40821bb857e547d84b1ac16b3","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.0.1.tgz","fileCount":2,"integrity":"sha512-n1Kq+YZe7CXToQYimn4a2CH8ybXf3feaDjXMBd9eMxrS9jZ0M5hJebihbOLfakuzx1FZlUiheZg2zpTNmF3edg==","signatures":[{"sig":"MEYCIQDkpYFmZYg2tkKM4Pxj9+02MSlL5jW5UYKPDuTvusI3rwIhAMfu31UqxF93+2Fk/xvGHxmVvT6s+Lp2BMm0b+gUbhXS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8780},"main":"dist/index.js","_from":"file:bernierllc-content-type-text-1.0.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/private/var/folders/r0/wspnzd1s18sfjy10ffyv2qxw0000gn/T/3783cefdffdb6bff2c2a701b3109fcd0/bernierllc-content-type-text-1.0.1.tgz","_integrity":"sha512-n1Kq+YZe7CXToQYimn4a2CH8ybXf3feaDjXMBd9eMxrS9jZ0M5hJebihbOLfakuzx1FZlUiheZg2zpTNmF3edg==","bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"11.6.0","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"^1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.0.1_1762147397954_0.6621088964805417","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/content-type-text","version":"1.0.2","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"c3f00970dfdec718b69464e8030a2b84d73b7461","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.0.2.tgz","fileCount":22,"integrity":"sha512-GIWcYeoV9Ki3l6NfvSrzSIgCaWMiapkWVpxCpHpO5HWhNiQ5R/FugMBjhvHw1A9KCxPS8Thj/0H0QoWf4JFHeg==","signatures":[{"sig":"MEUCIEJVQaMGu26fv6wwhlRNhAE5IXAX2J615eeZk/xUaLgTAiEA7ZLHJ+a+NYgcUGRo4DqxB4NvyBkYJZ/W9thZTen29Pk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37931},"main":"dist/index.js","_from":"file:bernierllc-content-type-text-1.0.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/aa7d80257c1e57ff06f6bf0b823324b3/bernierllc-content-type-text-1.0.2.tgz","_integrity":"sha512-GIWcYeoV9Ki3l6NfvSrzSIgCaWMiapkWVpxCpHpO5HWhNiQ5R/FugMBjhvHw1A9KCxPS8Thj/0H0QoWf4JFHeg==","bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"11.7.0","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.0.2_1766087433120_0.9590070007993892","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/content-type-text","version":"1.2.0","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"5712560de6983ce7d5fbde7f8f572fa05bac43c1","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.2.0.tgz","fileCount":22,"integrity":"sha512-TtAtZtsRdFhqD+b5oTWmyReeJAcMgqcR+RPl1av+Thd64u4veflLOLSW/j0t+t1wUdFeQ0VeE3Pknk/zTXrgGA==","signatures":[{"sig":"MEUCIQDDTTQNZYPVh6WZcni1hs249aBoxSfaGFTyAa5EJOlTMQIgDWtbL2wqHkcBs2dIjZ3DlXTbxT905eSZKLvzFiscYRs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37989},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82c5b0ea-67f8-4d38-bc31-74f5f4d15303"}},"bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.2.0_1767642380401_0.6645347938579969","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/content-type-text","version":"1.2.1","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"9f03a04e2e8c284dfd2313d5f840116ce34ecf7e","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.2.1.tgz","fileCount":22,"integrity":"sha512-Lnr91xBXlM3MHaXXMb3U/rKbof61ePlCDyxXbR55mkQUi50yy8Sgiu9JJ4+HdojxaKeHXHZ3CZD1t9Iz9z+4gw==","signatures":[{"sig":"MEYCIQCfAhxQ82A8eWoucEApqXMVidPA9nBWaeqwkaaY8U1+4gIhAN3u/P3Z8Q1hXVZWipOAs1gEuNxxqCpVabgETQ9irGXx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37931},"main":"dist/index.js","_from":"file:bernierllc-content-type-text-1.2.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82c5b0ea-67f8-4d38-bc31-74f5f4d15303"}},"_resolved":"/tmp/c83184b3c280e548f115dacedacd8e9b/bernierllc-content-type-text-1.2.1.tgz","_integrity":"sha512-Lnr91xBXlM3MHaXXMb3U/rKbof61ePlCDyxXbR55mkQUi50yy8Sgiu9JJ4+HdojxaKeHXHZ3CZD1t9Iz9z+4gw==","bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"11.11.0","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"1.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.2.1_1773078379952_0.003542890844924429","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/content-type-text","version":"1.2.2","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"3084e3322be28251986301cc95aadba420526d8f","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.2.2.tgz","fileCount":22,"integrity":"sha512-f25VB1f1yByz3+waPrkyc8C6sIDaqGejrHrb3wkHIleHF0+++wQYHlDjASgb48b/Sny4P4F6P+0H2zAx8SIOZA==","signatures":[{"sig":"MEQCIAnAHLoZEtw6wMEH69KNEpPfadegUF+1Q6w5fF7QoWhRAiBh1bEBTl0tCPYpj7efvZ8VibQ07QSnCEM9H9pcY6vJUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37931},"main":"dist/index.js","_from":"file:bernierllc-content-type-text-1.2.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82c5b0ea-67f8-4d38-bc31-74f5f4d15303"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-type-text/bernierllc-content-type-text-1.2.2.tgz","_integrity":"sha512-f25VB1f1yByz3+waPrkyc8C6sIDaqGejrHrb3wkHIleHF0+++wQYHlDjASgb48b/Sny4P4F6P+0H2zAx8SIOZA==","bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"11.11.0","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"1.3.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.2.2_1773163084645_0.05071117893573307","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/content-type-text","version":"1.4.0","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-type-text@1.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"46dd8460856af20368cc24be579e123e3069a716","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.4.0.tgz","fileCount":26,"integrity":"sha512-K0hO31AUZgsKbMtfrMNvH76hsTtCXt/mKmi4VigZP10NxUX3x7MDa8rZ06Ev7vazfc2TqWvhxgaGxdEapMle4g==","signatures":[{"sig":"MEQCIH/SZquCIQWWXvX2LeTrl5Bcf+VS+lr8m6s4ovQatn9kAiADTr0IJvN1cRGQtqxHkt63Z7LCq3TQPu4Sri9xL7JDbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41132},"main":"dist/index.js","_from":"file:bernierllc-content-type-text-1.4.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82c5b0ea-67f8-4d38-bc31-74f5f4d15303"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-type-text/bernierllc-content-type-text-1.4.0.tgz","_integrity":"sha512-K0hO31AUZgsKbMtfrMNvH76hsTtCXt/mKmi4VigZP10NxUX3x7MDa8rZ06Ev7vazfc2TqWvhxgaGxdEapMle4g==","bernierllc":{"integration":{"logger":"not-applicable","neverhub":"not-applicable"}},"_npmVersion":"11.14.1","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.0","gray-matter":"^4.0.3","@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","@bernierllc/content-type-registry":"1.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-type-text_1.4.0_1779241019429_0.11864378003896392","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bernierllc/content-type-text","version":"1.5.0","description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","main":"dist/index.js","types":"dist/index.d.ts","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","dependencies":{"@tiptap/core":"^2.1.0","@tiptap/starter-kit":"^2.1.0","gray-matter":"^4.0.3","zod":"^3.22.0","@bernierllc/content-type-registry":"1.6.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","ts-jest":"^29.0.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bernierllc":{"integration":{"neverhub":"not-applicable","logger":"not-applicable"}},"scripts":{"build":"tsc","test":"jest","test:run":"jest --no-watch","test:coverage":"jest --coverage --no-watch","lint":"eslint src --ext .ts","clean":"rm -rf dist"},"_id":"@bernierllc/content-type-text@1.5.0","_integrity":"sha512-0AQf8LrZAQMStdjugaNStknn0DP5C6473g/h6+bn4476we0D/qE1l94efFSxURvbQURXjBpF2YJb65xm9AN0Rw==","_resolved":"/home/runner/work/tools/tools/packages/core/content-type-text/bernierllc-content-type-text-1.5.0.tgz","_from":"file:bernierllc-content-type-text-1.5.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-0AQf8LrZAQMStdjugaNStknn0DP5C6473g/h6+bn4476we0D/qE1l94efFSxURvbQURXjBpF2YJb65xm9AN0Rw==","shasum":"dd726a8411e7b4903ebcf77edb5b658fe57a9e80","tarball":"https://registry.npmjs.org/@bernierllc/content-type-text/-/content-type-text-1.5.0.tgz","fileCount":26,"unpackedSize":41132,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBtCsPgQA7q8ECYMM/YeUVkz15xYV5mmePeWIwHEbqYNAiEA0GgzOsDehnbNCWtB9KsZKnookXGTswAF/7CerVIg/QI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82c5b0ea-67f8-4d38-bc31-74f5f4d15303"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/content-type-text_1.5.0_1779249758087_0.15940412714685426"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-03T05:23:17.843Z","modified":"2026-05-20T04:02:38.390Z","1.0.1":"2025-11-03T05:23:18.146Z","1.0.2":"2025-12-18T19:50:33.256Z","1.2.0":"2026-01-05T19:46:20.541Z","1.2.1":"2026-03-09T17:46:20.263Z","1.2.2":"2026-03-10T17:18:04.792Z","1.4.0":"2026-05-20T01:36:59.574Z","1.5.0":"2026-05-20T04:02:38.263Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","keywords":["content","type","text","tiptap","markdown","wysiwyg","cms"],"description":"Bare bones text content type with TipTap WYSIWYG editor and markdown file storage","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/content-type-text\n\nBare bones text content type with TipTap WYSIWYG editor and markdown file storage.\n\n## Installation\n\n```bash\nnpm install @bernierllc/content-type-text\n```\n\n## Overview\n\nThis package provides a minimal, foundational text content type designed to be extended by specialized content types (blog posts, tweets, commit messages, etc.). It includes:\n\n- **Bare bones TipTap WYSIWYG editor** with starter-kit only\n- **Markdown file storage** with basic frontmatter (content, createdAt, updatedAt)\n- **Content type registration** with @bernierllc/content-type-registry\n- **Simple, extensible API** for custom text types\n\n## Features\n\n- ✅ Minimal TipTap editor configuration\n- ✅ Markdown file storage with frontmatter\n- ✅ Content validation with Zod\n- ✅ TypeScript with strict mode\n- ✅ 90%+ test coverage\n- ✅ Zero dependencies (except TipTap, Zod, gray-matter)\n\n## Usage\n\n### Basic Usage\n\n```typescript\nimport { TextContentType, createTextContentType } from '@bernierllc/content-type-text';\n\n// Create instance\nconst textType = createTextContentType({\n  id: 'text',\n  name: 'Text',\n  storageDirectory: './content',\n});\n\n// Create content\nconst result = await textType.create('Hello, world!');\nconsole.log(result.data); // File path: ./content/1234567890-hello-world.md\n\n// Read content\nconst readResult = await textType.read(result.data!);\nconsole.log(readResult.data?.content); // \"Hello, world!\"\n\n// Update content\nawait textType.update(result.data!, 'Updated content');\n\n// Delete content\nawait textType.delete(result.data!);\n```\n\n### Register with Content Type Registry\n\n```typescript\nimport { ContentTypeRegistry } from '@bernierllc/content-type-registry';\nimport { TextContentType } from '@bernierllc/content-type-text';\n\nconst registry = new ContentTypeRegistry();\nconst textType = new TextContentType();\n\nawait textType.register(registry);\n```\n\n### Using TipTap Editor\n\n```typescript\nimport { createTipTapEditor, getMarkdownFromEditor, destroyEditor } from '@bernierllc/content-type-text';\n\n// Create editor (requires DOM environment)\nconst editor = createTipTapEditor({\n  content: 'Initial content',\n  editable: true,\n});\n\n// Get content\nconst markdown = getMarkdownFromEditor(editor);\n\n// Clean up\ndestroyEditor(editor);\n```\n\n### Extending for Custom Types\n\n```typescript\nimport { TextContentType } from '@bernierllc/content-type-text';\n\nclass BlogPostType extends TextContentType {\n  constructor() {\n    super({\n      id: 'blog-post',\n      name: 'Blog Post',\n      storageDirectory: './blog-posts',\n    });\n  }\n\n  // Add custom methods\n  async addMetadata(filePath: string, metadata: any) {\n    // Custom implementation\n  }\n}\n```\n\n## API\n\n### TextContentType\n\nMain class for text content management.\n\n#### Constructor\n\n```typescript\nnew TextContentType(config?: TextContentTypeConfig)\n```\n\n**Config Options:**\n- `id` (string, default: 'text') - Content type identifier\n- `name` (string, default: 'Text') - Content type display name\n- `storageDirectory` (string, default: './content') - Storage directory path\n\n#### Methods\n\n##### `register(registry: ContentTypeRegistry): Promise<TextContentResult<void>>`\n\nRegister this content type with the registry.\n\n##### `create(content: string): Promise<TextContentResult<string>>`\n\nCreate new text content. Returns file path on success.\n\n##### `read(filePath: string): Promise<TextContentResult<TextContentMetadata>>`\n\nRead text content from file.\n\n##### `update(filePath: string, content: string): Promise<TextContentResult<void>>`\n\nUpdate existing text content.\n\n##### `delete(filePath: string): Promise<TextContentResult<void>>`\n\nDelete text content file.\n\n##### `validate(data: unknown): TextContentResult<TextContentMetadata>`\n\nValidate text content metadata.\n\n### Types\n\n#### TextContentMetadata\n\n```typescript\ninterface TextContentMetadata {\n  content: string;\n  createdAt: Date;\n  updatedAt: Date;\n}\n```\n\n#### TextContentResult\n\n```typescript\ninterface TextContentResult<T = unknown> {\n  success: boolean;\n  data?: T;\n  error?: string;\n}\n```\n\n#### TipTapEditorConfig\n\n```typescript\ninterface TipTapEditorConfig {\n  content?: string;\n  editable?: boolean;\n}\n```\n\n## Storage Format\n\nContent is stored as markdown files with YAML frontmatter:\n\n```markdown\n---\ncreatedAt: '2025-01-01T00:00:00.000Z'\nupdatedAt: '2025-01-02T00:00:00.000Z'\n---\nYour content here...\n```\n\nFilenames are generated as: `{timestamp}-{sanitized-content}.md`\n\n## Examples\n\n### Complete CRUD Operations\n\n```typescript\nimport { createTextContentType } from '@bernierllc/content-type-text';\n\nconst textType = createTextContentType({ storageDirectory: './my-content' });\n\n// Create\nconst createResult = await textType.create('My first post');\nconst filePath = createResult.data!;\n\n// Read\nconst readResult = await textType.read(filePath);\nconsole.log(readResult.data?.content); // \"My first post\"\nconsole.log(readResult.data?.createdAt); // Date object\n\n// Update\nawait textType.update(filePath, 'My updated post');\n\n// Read again\nconst updatedResult = await textType.read(filePath);\nconsole.log(updatedResult.data?.content); // \"My updated post\"\n\n// Delete\nawait textType.delete(filePath);\n```\n\n### Error Handling\n\n```typescript\nconst result = await textType.read('/non/existent/file.md');\n\nif (!result.success) {\n  console.error('Error:', result.error);\n} else {\n  console.log('Content:', result.data?.content);\n}\n```\n\n### Validation\n\n```typescript\nconst validationResult = textType.validate({\n  content: 'Valid content',\n  createdAt: new Date(),\n  updatedAt: new Date(),\n});\n\nif (validationResult.success) {\n  console.log('Valid:', validationResult.data);\n} else {\n  console.error('Invalid:', validationResult.error);\n}\n```\n\n## Integration Status\n\n- **Logger**: not-applicable - Base content type has no side effects requiring logging\n- **Docs-Suite**: ready - TypeScript types and documentation exported\n- **NeverHub**: not-applicable - Core type definition with no service mesh participation\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Build package\nnpm run build\n\n# Lint code\nnpm run lint\n```\n\n## License\n\nCopyright (c) 2025 Bernier LLC\n\nThis file is licensed to the client under a limited-use license.\nThe client may use and modify this code *only within the scope of the project it was delivered for*.\nRedistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n\n## Related Packages\n\n- [@bernierllc/content-type-registry](../content-type-registry) - Content type registration and discovery\n- [@bernierllc/content-type-blog-post](../content-type-blog-post) - Blog post type extending text (planned)\n- [@bernierllc/content-type-tweet](../content-type-tweet) - Twitter post type extending text (planned)\n- [@bernierllc/content-type-commit](../content-type-commit) - Git commit type extending text (planned)\n\n## Integration Status\n\n### Logger Integration\n- **Status**: not-applicable\n- **Justification**: Core content type package with standard error handling. File operations use try/catch patterns.\n\n### NeverHub Integration\n- **Status**: not-applicable  \n- **Justification**: Core package providing content type definition. Services and suites that USE this package will handle NeverHub integration for content management events.\n\n### Docs-Suite Compatibility\n- **Status**: ready\n- **Format**: typedoc\n- **Documentation**: Complete API documentation with TypeScript types\n","readmeFilename":"README.md"}