{"_id":"@ascendance-hub/sapphire-core","_rev":"8-bee85068793e59e33294fee3d0e5e60d","name":"@ascendance-hub/sapphire-core","dist-tags":{"latest":"1.2.0","preview":"0.0.0-preview-20260531194731"},"versions":{"1.0.0":{"name":"@ascendance-hub/sapphire-core","version":"1.0.0","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@1.0.0","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"11fbf921686d5acbaf7675ddd5c36fb6a1046a7e","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-1.0.0.tgz","fileCount":7,"integrity":"sha512-KZ0V8H2mVM5L4XBtwVvlk3zqHBOUEpj4cmOWmOI8tPAOdWl1IA91yI3XJg3y2qDQWx8O/SlZ8TlXu7ADgTvcgw==","signatures":[{"sig":"MEYCIQCjRphg2DlVyBSNFIfZuQjby8QJbENZZ3QOTvgOSqlGPgIhALM9M5RqjfSaNvnjyDcNVyFRC6yFsr5ACbMMhy+Yu26A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251107},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"7ca237cf34d7dbf4b6002e6eeb8f1948b5fa1401","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sapphire-core_1.0.0_1778967982122_0.07554448685836723","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-preview-20260518150854":{"name":"@ascendance-hub/sapphire-core","version":"0.0.0-preview-20260518150854","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@0.0.0-preview-20260518150854","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"d3c08647879c3c0811b4df193a32e5035b611584","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-0.0.0-preview-20260518150854.tgz","fileCount":7,"integrity":"sha512-tJLDBhLmPoo3nzjb0eh/WdshfxJ1LtNFGY+G+HgTiPG3Y4EPg7Kp3wZQtULGOXcRs/1XXMzejymSiKLemhYlMA==","signatures":[{"sig":"MEQCIATKC+o2eWreCMMDNeIrCfkoxkTRExLi0isIvMlIc5/FAiBR22NnPrwAOS2cdTcYRrKN6XMnB+e3f1rpit/ZHTrVqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251130},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"7b0ae9d5231c706543b59d36b56e9d7a73697dd8","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/sapphire-core_0.0.0-preview-20260518150854_1779116937901_0.7875650947226382","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-preview-20260518153515":{"name":"@ascendance-hub/sapphire-core","version":"0.0.0-preview-20260518153515","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@0.0.0-preview-20260518153515","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"40f3cfef6e7f9164b807e0338355db9d921a8c9f","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-0.0.0-preview-20260518153515.tgz","fileCount":7,"integrity":"sha512-9QPcn+BCbKIIt/+MGBiRIMi1p/NgT4I3Q+a9rVZIytrBJTXBOb6g3Y+S2abiNP2YSxhl0Ft4RASqKx1tbIDJ9g==","signatures":[{"sig":"MEYCIQDDFXqj+saFbJgWi8oKhMCJ+6KgJTK0/Nc+4TSvwG3cWwIhAIAjrfPFpiv2mzpGjBehA1LS5FelM4CzRexYMBTSaDnv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251130},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"7f07a1e46fe73ca49f03f7b373377b184481c0b2","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/sapphire-core_0.0.0-preview-20260518153515_1779118519036_0.9314204438985738","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ascendance-hub/sapphire-core","version":"1.1.0","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@1.1.0","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"a5370379b90f1efd4c66f8e448e02e5a4964700b","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-1.1.0.tgz","fileCount":7,"integrity":"sha512-DthisaTgX7Cq7YkqPo1nMgnU0umXCduNkv69KSutPk5R40xs+4EL+V6vZRRdrWSZwxJ8JjTMADEKCFb3nmBcFA==","signatures":[{"sig":"MEUCIQDV8J5HXmMXflUjOftlgvzTCaBYIke+S/4DLrxxvpljaAIgIxOsxcBQJ3UwQsMmAbvVzzWsbTj4B2/g8opiKEEwl1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251107},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"76178e21015fe89d02d149a06998178a2d956a3f","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sapphire-core_1.1.0_1779118573692_0.8295104204008523","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-preview-20260531184331":{"name":"@ascendance-hub/sapphire-core","version":"0.0.0-preview-20260531184331","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@0.0.0-preview-20260531184331","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"64d40b008aa5f55712aaf54e572bab998657327f","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-0.0.0-preview-20260531184331.tgz","fileCount":7,"integrity":"sha512-XkV27uuCXR+om6JZwbdas2q4Da0//AbwWaiV0AXZ2rVQOccXsmBZQRTUyygpLdhcfLh4yM3qYX81ls0VmY4B9g==","signatures":[{"sig":"MEQCIAX+yfi6QJuvzjTAhMwzMsJFdUHRG+17RLBcjDvHTxr4AiAOSYtvtHlb2VNCGrhjRc6MwyPRpbjOD1+CD7Kr4E8u8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246036},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"e8461b27236d5fc3b9b0810c610bc53c79e7e5fc","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.8","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/sapphire-core_0.0.0-preview-20260531184331_1780253015487_0.7588126530958643","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-preview-20260531190529":{"name":"@ascendance-hub/sapphire-core","version":"0.0.0-preview-20260531190529","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@0.0.0-preview-20260531190529","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"b26f6cd6426cdca4cb46934005b23988bfaa213f","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-0.0.0-preview-20260531190529.tgz","fileCount":7,"integrity":"sha512-kCgFpqBg3Vyoa3yoW0aIRe8OZ6T4CHASc0C/2RoKz7PQ5/lLz6npHsTB4YNS+5WKozMDF6umMD2Fh+SWkg/FxA==","signatures":[{"sig":"MEUCIEona5w2RgvjN8IUBl5hfOjo5ROWbsARBd5RedVNa0uvAiEA8GJfvuFv1J7bxA1E4PxMv4RxOKkHOQ/PcgPy9H6u2u4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246828},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"8a9b61513b5f64c6449a6a061d9bb6e0ffe7c865","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.8","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/sapphire-core_0.0.0-preview-20260531190529_1780254332854_0.9852951454024208","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-preview-20260531194731":{"name":"@ascendance-hub/sapphire-core","version":"0.0.0-preview-20260531194731","keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","_id":"@ascendance-hub/sapphire-core@0.0.0-preview-20260531194731","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"dist":{"shasum":"ad14c9b280ce2f1473c6166c657c36d083a4602d","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-0.0.0-preview-20260531194731.tgz","fileCount":7,"integrity":"sha512-nCF1riEtjuwK5n1uSQ2kKp/Dx+Pj7YjRocuwUnbpaZry/L1DLlPu66qnsWMAGJ+RhSq4N7Y3SZYqLYXl+3G6JA==","signatures":[{"sig":"MEQCID9PNoy7I0a7KDdzpY3W0W3o0u41Jnz+SL9iCsb1rZPsAiBvEuU+X+0KqpTdL5ItW/uGB5t3Pe4xiU374BhwHR4cVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246828},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"dd7c2b94ce17eb7f2754a707b058e45e23baa1f9","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"repository":{"url":"git+https://github.com/Ascendance-Hub/Sapphire.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.8","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/sapphire-core_0.0.0-preview-20260531194731_1780256854175_0.06259956222618324","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ascendance-hub/sapphire-core","version":"1.2.0","description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"scripts":{"build":"tsup","test":"vitest run","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/Ascendance-Hub/Sapphire.git","directory":"packages/core"},"keywords":["typescript","schema","validation","orm"],"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","publishConfig":{"access":"public"},"engines":{"node":">=20"},"bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","_id":"@ascendance-hub/sapphire-core@1.2.0","gitHead":"c385975185892d170d5f003f45740273bfb29d15","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-SFCRK0c5eWSUa7kYVNtEgb9XE7W6P0ngU4pJO3t7uUXHEo83Q24i6HagOYSACAttcxVyRSKUUKRf/4Nf9c4ryg==","shasum":"6f8ab3a718d2f09e8892a5ba4dc6e61acebb2426","tarball":"https://registry.npmjs.org/@ascendance-hub/sapphire-core/-/sapphire-core-1.2.0.tgz","fileCount":7,"unpackedSize":246805,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEvj9hR5eBWgQCKfCvZgr0WzLxqzW53XrStGvyiEQ1mjAiAMOteTBrL9d0Vti4ZUfS9S/pFYR4LW3k5uDdxkTM2cVA=="}]},"_npmUser":{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"},"directories":{},"maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sapphire-core_1.2.0_1780257338442_0.976400729870293"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-16T21:46:22.048Z","modified":"2026-05-31T19:55:38.727Z","1.0.0":"2026-05-16T21:46:22.265Z","0.0.0-preview-20260518150854":"2026-05-18T15:08:58.079Z","0.0.0-preview-20260518153515":"2026-05-18T15:35:19.316Z","1.1.0":"2026-05-18T15:36:13.845Z","0.0.0-preview-20260531184331":"2026-05-31T18:43:35.630Z","0.0.0-preview-20260531190529":"2026-05-31T19:05:33.018Z","0.0.0-preview-20260531194731":"2026-05-31T19:47:34.347Z","1.2.0":"2026-05-31T19:55:38.607Z"},"bugs":{"url":"https://github.com/Ascendance-Hub/Sapphire/issues"},"author":{"name":"Alexandre Damas Murata","email":"alexandre_murata@hotmail.com"},"license":"MIT","homepage":"https://github.com/Ascendance-Hub/Sapphire#readme","keywords":["typescript","schema","validation","orm"],"repository":{"type":"git","url":"git+https://github.com/Ascendance-Hub/Sapphire.git","directory":"packages/core"},"description":"Core do Sapphire — fields, IR, registry de adapters e geração de tipos.","maintainers":[{"name":"alexandre-murata","email":"alexandre_murata@hotmail.com"}],"readme":"# @ascendance-hub/sapphire-core\n\n> **Schema once, types and adapters everywhere.** The core of\n> [Sapphire](https://github.com/Ascendance-Hub/Sapphire) — a TypeScript schema\n> definition library: a fluent field DSL, a serializable IR\n> (`SapphireSchemaNode`), runtime validation, type inference, and a pluggable\n> adapter registry.\n\nThis package ships no ORM integration on its own. Install it alongside whichever\nadapter(s) you need — Mongoose, Drizzle, JSON Schema, native MongoDB\n`$jsonSchema`.\n\n## Install\n\n```bash\nnpm install @ascendance-hub/sapphire-core\n```\n\n## Quickstart\n\n```ts\nimport { Sapphire, registerAdapter, type Infer } from '@ascendance-hub/sapphire-core'\nimport { toMongooseSchema } from '@ascendance-hub/sapphire-mongoose'\n\n// Register each adapter once, at application startup.\nregisterAdapter('mongoose', toMongooseSchema)\n\nconst a = new Sapphire({ defaultAdapter: 'mongoose' })\n\nconst userSchema = a.object({\n  name: a.string().min(1),\n  email: a.string().email(),\n  age: a.number().int().min(0).optional(),\n})\n\n// 1 — infer the static type\ntype User = Infer<typeof userSchema>\n// { name: string; email: string; age?: number | undefined }\n\n// 2 — validate at runtime\nconst user = userSchema.parse({ name: 'Ada', email: 'ada@example.com' })\n\n// 3 — emit an ORM-specific schema from the same definition\nconst mongoSchema = userSchema.getSchema('mongoose')\n```\n\nThe same `userSchema` drives every registered adapter — `getSchema('mongoose')`,\n`getSchema('drizzle', { dialect: 'pg' })`, `getSchema('json-schema')`,\n`getSchema('bson')`.\n\n## What's in here\n\n- **Field DSL** — `string`, `number`, `boolean`, `date`, `object`, `array`,\n  `tuple`, `record`, `union`, `literal`, `enum`, `ref`, plus modifiers\n  (`optional`, `nullable`, `default`, `min` / `max`, `regex`, …).\n- **IR** — `toSchema()` produces a serializable `SapphireSchemaNode`; adapters\n  are pure functions from that IR to an ORM-specific output.\n- **Validation** — `parse` / `safeParse` with structured issues, custom\n  messages, `abortEarly`, `stripUnknown`.\n- **Type inference** — `Infer<typeof schema>` / `InferInput<typeof schema>`.\n- **Adapter registry** — `registerAdapter(name, fn)`. The registry is\n  process-global; register each adapter once at startup.\n\n## Adapters\n\n| Package                                | Output                                           |\n| -------------------------------------- | ------------------------------------------------ |\n| `@ascendance-hub/sapphire-mongoose`    | `mongoose.Schema`                                |\n| `@ascendance-hub/sapphire-bson`        | MongoDB `$jsonSchema` collection validators      |\n| `@ascendance-hub/sapphire-drizzle`     | Drizzle `pgTable` / `mysqlTable` / `sqliteTable` |\n| `@ascendance-hub/sapphire-json-schema` | JSON Schema 2020-12                              |\n\n## Docs\n\nFull documentation — getting started, concepts, adapters, recipes — lives in the\n[repository `docs/`](https://github.com/Ascendance-Hub/Sapphire/tree/main/docs).\n\n## License\n\nMIT © Alexandre Damas Murata\n","readmeFilename":"README.md"}