{"_id":"@bladelabs/dmn-zod","_rev":"9-c4cd3da15e9c167b6174144d97f9c18a","name":"@bladelabs/dmn-zod","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.0":{"name":"@bladelabs/dmn-zod","version":"0.1.0","license":"Apache-2.0","_id":"@bladelabs/dmn-zod@0.1.0","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"samikichi","email":"sami@bladelabs.io"}],"dist":{"shasum":"e5c60a9c19a2583c123a12bade9c506e236bef35","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.1.0.tgz","fileCount":22,"integrity":"sha512-uDckYqHy8jlskVsAJ9vXBBdli/5WtEq41d4uKi+/r+MOyBMhPDM2vx40QpS02bJlpsE0K4U9sxfWessicD3+kQ==","signatures":[{"sig":"MEUCIQDYDuNk9FVf+Cp0dBSbBtm8jCybCf3PAgiz4FCWv+gSRgIgUBKNj+WjXGAklnaI9Sq5jv23PUaLKEruAiKMz9BdseI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":664408},"type":"module","exports":{".":"./src/schema.ts","./schema":"./src/schema.ts","./metamodel":"./src/metamodel.ts","./package.json":"./package.json"},"gitHead":"186c258598156d8cb940f310fe69dc0fba430b6d","private":false,"scripts":{"test":"vitest run","build":"tsup","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports","test:watch":"vitest","type-check":"tsc --noEmit","test:exports":"publint --pack npm --strict","prepublishOnly":"pnpm build","generate:overloads":"tsx scripts/generate-overloads.ts"},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"_npmVersion":"11.9.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"}},"_hasShrinkwrap":false,"devDependencies":{"zod":"catalog:","tsup":"^8.0.0","vitest":"catalog:","publint":"^0.3.0","dmn-moddle":"^12.0.0","typescript":"catalog:","@zeroh/tsconfig":"workspace:*","@arethetypeswrong/cli":"^0.17.0"},"peerDependencies":{"zod":"^3.25.0"},"_npmOperationalInternal":{"tmp":"tmp/dmn-zod_0.1.0_1775477745894_0.325844608226312","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bladelabs/dmn-zod","version":"0.1.1","license":"Apache-2.0","_id":"@bladelabs/dmn-zod@0.1.1","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"samikichi","email":"sami@bladelabs.io"}],"dist":{"shasum":"9edb378d2f6105ec4a231e8ad0027e0500b95c19","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.1.1.tgz","fileCount":22,"integrity":"sha512-H4/lxHHBl0GVHYPwwRX/4pg3wfT8j2D/izlXZNibUNqmuJQz17zigjKWSRx42x2ffB0a1Bsqg/zv2wToWzCNUw==","signatures":[{"sig":"MEUCIQCUZfuBxQcVe+uNj7xVP1ugMNct3YfNTbNtSmLWTdbS4wIgNRfu995CfO64mmXOVhblPcrI3STNZIvs65HZ2t2OFAM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":664094},"type":"module","_from":"file:bladelabs-dmn-zod-0.1.1.tgz","exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"},"private":false,"scripts":{"test":"vitest run","build":"tsup","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports","test:watch":"vitest","type-check":"tsc --noEmit","test:exports":"publint --pack npm --strict","generate:overloads":"tsx scripts/generate-overloads.ts"},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"_resolved":"/tmp/dede4efd601b6175439683cc1359e966/bladelabs-dmn-zod-0.1.1.tgz","_integrity":"sha512-H4/lxHHBl0GVHYPwwRX/4pg3wfT8j2D/izlXZNibUNqmuJQz17zigjKWSRx42x2ffB0a1Bsqg/zv2wToWzCNUw==","_npmVersion":"11.9.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","tsup":"^8.0.0","vitest":"^4.0.18","publint":"^0.3.0","dmn-moddle":"^12.0.0","typescript":"^5.9.3","@arethetypeswrong/cli":"^0.17.0"},"peerDependencies":{"zod":"^3.25.0"},"_npmOperationalInternal":{"tmp":"tmp/dmn-zod_0.1.1_1775479624045_0.663780520330832","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bladelabs/dmn-zod","version":"0.2.0","license":"Apache-2.0","_id":"@bladelabs/dmn-zod@0.2.0","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"samikichi","email":"sami@bladelabs.io"}],"dist":{"shasum":"10e66b5bbde9a23883f3c341bf733714fc35520f","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.2.0.tgz","fileCount":22,"integrity":"sha512-5TnMvFwO2s8cEY2hRXbKh0skDE6hnFaivxoGLJ4URdL6ebf4kBXk5NPNp+K5WFKWGVOX1suz0JOjiKbxLyORAw==","signatures":[{"sig":"MEQCIFZOvlt6fC1u/AvlqXe3G3ipn9kMSAu5IsuTgvqv6dKUAiB7xF0/+DfBMVx5euOqq3kH6vGc1+n7y+rkTXwMjOzBOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":670122},"type":"module","_from":"file:bladelabs-dmn-zod-0.2.0.tgz","exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"},"private":false,"scripts":{"test":"vitest run","build":"tsup","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports","test:watch":"vitest","type-check":"tsc --noEmit","test:exports":"publint --pack npm --strict","generate:overloads":"tsx scripts/generate-overloads.ts"},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"_resolved":"/tmp/e2c470bfc330839a7f15a3292e616f6b/bladelabs-dmn-zod-0.2.0.tgz","_integrity":"sha512-5TnMvFwO2s8cEY2hRXbKh0skDE6hnFaivxoGLJ4URdL6ebf4kBXk5NPNp+K5WFKWGVOX1suz0JOjiKbxLyORAw==","_npmVersion":"11.9.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","tsup":"^8.0.0","vitest":"^4.0.18","publint":"^0.3.0","dmn-moddle":"^12.0.0","typescript":"^5.9.3","@arethetypeswrong/cli":"^0.17.0"},"peerDependencies":{"zod":"^3.25.0"},"_npmOperationalInternal":{"tmp":"tmp/dmn-zod_0.2.0_1775486694497_0.5040694091970588","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bladelabs/dmn-zod","version":"0.3.0","license":"Apache-2.0","_id":"@bladelabs/dmn-zod@0.3.0","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"samikichi","email":"sami@bladelabs.io"}],"dist":{"shasum":"61b3c5f270c8b37c244c81514cf5b6f5f36ca99a","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.3.0.tgz","fileCount":22,"integrity":"sha512-rT0jKiFh7vOSrf6ZpHD+pwtRPzBeNZS/OtG8oZ4T4unp/TIYoK0rWYuGlXqqU1rfSD69ldibiXYlB/t9pR4Wvg==","signatures":[{"sig":"MEYCIQDmwAkBcJBORIjM6XEgueJka9wu5l8gBwuebpAp3xGWmQIhAIvmRNaf1E/LpHEY1wLtcVUsOp3Cg7wMOcX98of/uktf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":787714},"type":"module","_from":"file:bladelabs-dmn-zod-0.3.0.tgz","exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"},"private":false,"scripts":{"test":"vitest run","build":"tsup","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports","test:watch":"vitest","type-check":"tsc --noEmit","test:exports":"publint --pack npm --strict","generate:overloads":"tsx scripts/generate-overloads.ts"},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"_resolved":"/tmp/c074296507141c2ea20f592892b9a090/bladelabs-dmn-zod-0.3.0.tgz","_integrity":"sha512-rT0jKiFh7vOSrf6ZpHD+pwtRPzBeNZS/OtG8oZ4T4unp/TIYoK0rWYuGlXqqU1rfSD69ldibiXYlB/t9pR4Wvg==","_npmVersion":"11.9.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.6","tsup":"^8.0.0","vitest":"^4.0.18","publint":"^0.3.0","dmn-moddle":"^12.0.0","typescript":"^5.9.3","@arethetypeswrong/cli":"^0.17.0"},"peerDependencies":{"zod":"^3.25.0"},"_npmOperationalInternal":{"tmp":"tmp/dmn-zod_0.3.0_1775551701655_0.15029508041631434","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bladelabs/dmn-zod","version":"0.4.0","license":"Apache-2.0","_id":"@bladelabs/dmn-zod@0.4.0","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"happypatrik","email":"patrik@bladelabs.io"},{"name":"samikichi","email":"sami@bladelabs.io"}],"dist":{"shasum":"80ecd4e3bfdd423b37f8cdf7ce3dd14d319f5681","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.4.0.tgz","fileCount":22,"integrity":"sha512-dZQR2I0Mz+s1wOboCBbEoxEgGe5agKYhBg7dEsKhwhwGyoOiw29SsxhHB4gLceht6PymNpT8gzbhhNgAEahgSg==","signatures":[{"sig":"MEUCIQCRbirIDoaV0U4I6zoU2lfQcALtxdEcphYP/tOfMJuJwgIgJ+dT5v0dJjNGzZgB59wka0HT31oPwhBVu5UXZqvny1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":789556},"type":"module","exports":{".":"./src/schema.ts","./schema":"./src/schema.ts","./metamodel":"./src/metamodel.ts","./package.json":"./package.json"},"gitHead":"a6d082654ea684e1c99bfcd0c98ab36c8f43cd57","private":false,"scripts":{"test":"vitest run","build":"tsup","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports","test:watch":"vitest","type-check":"tsc --noEmit","test:exports":"publint --pack npm --strict","prepublishOnly":"pnpm build","generate:overloads":"tsx scripts/generate-overloads.ts"},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"_npmVersion":"11.9.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"}},"_hasShrinkwrap":false,"devDependencies":{"zod":"catalog:","tsup":"^8.0.0","vitest":"catalog:","publint":"^0.3.0","dmn-moddle":"^12.0.0","typescript":"catalog:","@zeroh/tsconfig":"workspace:*","@arethetypeswrong/cli":"^0.17.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dmn-zod_0.4.0_1777324805312_0.45135959400804593","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@bladelabs/dmn-zod","version":"0.4.1","private":false,"license":"Apache-2.0","sideEffects":false,"type":"module","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","exports":{".":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./schema":{"import":{"types":"./dist/schema.d.ts","default":"./dist/schema.js"},"require":{"types":"./dist/schema.d.cts","default":"./dist/schema.cjs"}},"./metamodel":{"import":{"types":"./dist/metamodel.d.ts","default":"./dist/metamodel.js"},"require":{"types":"./dist/metamodel.d.cts","default":"./dist/metamodel.cjs"}},"./package.json":"./package.json"},"scripts":{"build":"tsup","type-check":"tsc --noEmit","test":"vitest run","test:watch":"vitest","generate:overloads":"tsx scripts/generate-overloads.ts","prepublishOnly":"pnpm build","test:exports":"publint --pack npm --strict","check":"pnpm build && pnpm test && pnpm type-check && pnpm test:exports"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0"},"dependencies":{},"devDependencies":{"@arethetypeswrong/cli":"^0.17.0","@zeroh/tsconfig":"workspace:*","dmn-moddle":"^12.0.0","publint":"^0.3.0","tsup":"^8.0.0","typescript":"catalog:","vitest":"catalog:","zod":"catalog:"},"gitHead":"3d5314632ff83a6634a6f068e9b71f5a33d2a29f","_id":"@bladelabs/dmn-zod@0.4.1","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-89zGCsDzmMcdNhvJWdQeiUuzvQ8VHBei0Eam5Zbz6SCxos8Gceq6qN00Gq/ZragB+FLfP4A11GVc/Z2tIh7gUQ==","shasum":"e86941cba6b22e6db18baf67e1c60a96854ed1f2","tarball":"https://registry.npmjs.org/@bladelabs/dmn-zod/-/dmn-zod-0.4.1.tgz","fileCount":22,"unpackedSize":789302,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAyeEPRZ7o7WbVr5v/RGIe8RD5PKztYZpWl5Tv+rona/AiEAuWFqibJN9JuylCs6JGzL3fVCMVCmWZTKFMdsHf+5gyY="}]},"_npmUser":{"name":"samikichi","email":"sami@bladelabs.io"},"directories":{},"maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"happypatrik","email":"patrik@bladelabs.io"},{"name":"samikichi","email":"sami@bladelabs.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dmn-zod_0.4.1_1777325185236_0.631790424076565"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-06T12:15:45.746Z","modified":"2026-04-27T21:26:25.667Z","0.1.0":"2026-04-06T12:15:46.091Z","0.1.1":"2026-04-06T12:47:04.203Z","0.2.0":"2026-04-06T14:44:54.652Z","0.3.0":"2026-04-07T08:48:21.805Z","0.4.0":"2026-04-27T21:20:05.441Z","0.4.1":"2026-04-27T21:26:25.393Z"},"license":"Apache-2.0","description":"Generate Zod schemas from OMG DMN 1.4 metamodel — like drizzle-zod but for decision models","maintainers":[{"name":"valera-bad","email":"valera@bladelabs.io"},{"name":"volodymyr.r","email":"volodymyr@bladelabs.io"},{"name":"garydu","email":"the.gary.du@gmail.com"},{"name":"happypatrik","email":"patrik@bladelabs.io"},{"name":"samikichi","email":"sami@bladelabs.io"}],"readme":"# @bladelabs/dmn-zod\n\nGenerate Zod schemas from the OMG DMN 1.4 metamodel — like `drizzle-zod` but for decision models.\n\n## Install\n\n```bash\nnpm install @bladelabs/dmn-zod dmn-moddle\n# or\npnpm add @bladelabs/dmn-zod dmn-moddle\n```\n\n`dmn-moddle` provides the `dmn13.json` metamodel. `zod` is a peer dependency.\n\n## Usage\n\n### Golden shapes (pure absorption)\n\n```typescript\nimport { createDmnSchema, createDmnEnumSchema } from '@bladelabs/dmn-zod'\n\n// Generate a complete DecisionTable schema from the metamodel\nexport const DecisionTableShape = createDmnSchema('DecisionTable')\n\n// Generate an enum schema\nexport const HitPolicyShape = createDmnEnumSchema('HitPolicy')\n```\n\n**Before (hand-authored — 190 lines):**\n\n```typescript\nimport { z } from 'zod/v4'\nimport { InputClauseShape } from './input-clause.shape.js'\nimport { OutputClauseShape } from './output-clause.shape.js'\nimport { DecisionRuleShape } from './decision-rule.shape.js'\n// ... 7 more imports\n\nexport const DecisionTableShape = z\n  .object({\n    id: z.string().describe('Unique identifier...'),\n    description: z.string().optional().describe('Human-readable...'),\n    extensionElements: ExtensionElementsShape.optional().describe('Container for...'),\n    extensionAttribute: z.array(ExtensionAttributeShape).optional().describe('Array of...'),\n    label: z.string().optional().describe('Display label...'),\n    typeRef: z.string().optional().describe('Reference to...'),\n    input: z.array(InputClauseShape).optional().describe('Array of input clauses...'),\n    output: z.array(OutputClauseShape).optional().describe('Array of output clauses...'),\n    annotation: z.array(RuleAnnotationClauseShape).optional().describe('...'),\n    rule: z.array(DecisionRuleShape).optional().describe('Array of decision rules...'),\n    hitPolicy: HitPolicyShape.optional().describe('Hit policy governing...'),\n    aggregation: BuiltinAggregatorShape.optional().describe('Aggregation function...'),\n    preferredOrientation: DecisionTableOrientationShape.optional().describe('Visual layout...'),\n    outputLabel: z.string().optional().describe('Display label for...'),\n  })\n  .describe('DMN decision table...')\n  .meta({\n    id: 'zeroh:dmn/decision-table',\n    prefLabel: 'DMN Decision Table',\n    definition: '...',\n    broader: ['zeroh:dmn/expression'],\n    related: ['zeroh:dmn/input-clause', ...],\n    exactMatch: ['omg-dmn:DecisionTable'],\n    wasDerivedFrom: ['https://www.omg.org/spec/DMN/1.4/PDF', ...],\n    cascadeGroup: 'dmn',\n    name: 'DecisionTableShape',\n    description: '...',\n    version: '1.0.0',\n    category: 'dmn',\n    standards_provenance: { ... },\n  }) satisfies z.ZodType<DmnDecisionTable>\n```\n\n**After (generated — 1 line):**\n\n```typescript\nimport { createDmnSchema } from '@bladelabs/dmn-zod'\n\nexport const DecisionTableShape = createDmnSchema('DecisionTable')\n```\n\nSame fields. Same .describe() text. Same .meta() with provenance. One line.\n\n### Domain shapes (refined + extended)\n\n```typescript\nimport { z } from 'zod/v4'\nimport { createDmnSchema } from '@bladelabs/dmn-zod'\n\n// Mudarabah compliance decision — extends golden DMN shape\nexport const MudarabahDecisionShape = createDmnSchema('DecisionTable', {\n  // Refine: tighten hitPolicy for Islamic finance\n  refinements: {\n    hitPolicy: (s) => s.default('FIRST'),\n  },\n  // Extend: add domain-specific fields\n  extensions: {\n    obligation_refs: z.array(z.string()).describe('AAOIFI SS-13 obligations'),\n    is_hard_gate: z.boolean().describe('Blocks workflow if failed'),\n  },\n  // Override meta for domain identity\n  metaOverrides: {\n    id: 'zeroh:grc-islamic/mudarabah-decision',\n    cascadeGroup: 'grc-islamic-finance',\n  },\n})\n```\n\n### Explicit metamodel path\n\nIf `dmn-moddle` isn't in `node_modules`, provide the path:\n\n```typescript\nimport { initDmnMetamodel, createDmnSchema } from '@bladelabs/dmn-zod'\n\ninitDmnMetamodel('/path/to/dmn13.json')\nconst schema = createDmnSchema('DecisionTable')\n```\n\n### Subpath imports\n\n```typescript\n// Main API\nimport { createDmnSchema } from '@bladelabs/dmn-zod'\n\n// Schema module directly\nimport { createDmnSchema } from '@bladelabs/dmn-zod/schema'\n\n// Metamodel types and reader\nimport type { ModdleDescriptor } from '@bladelabs/dmn-zod/metamodel'\n```\n\n## Architecture\n\nFollows `drizzle-zod`'s 6-layer pattern:\n\n1. **Entry** — `createDmnSchema(typeName, options?)`\n2. **Introspect** — reads `dmn13.json` metamodel\n3. **Map types** — moddle types to Zod (String to z.string(), Enum to z.enum(), etc.)\n4. **Inheritance** — flattens superClass chain (DMNElement to NamedElement to Expression to ...)\n5. **Refinements** — callbacks or overrides per field (drizzle-zod pattern)\n6. **Meta** — auto-populates `.meta()` with OMG DMN 1.4 provenance\n\nPlus a description layer from `descriptions.ts` — hand-authored semantic descriptions for every field, since the metamodel has no annotations.\n\n## API\n\n| Function | Input | Output |\n|---|---|---|\n| `createDmnSchema(type, opts?)` | DMN type name | `z.ZodObject` with `.meta()` |\n| `createDmnEnumSchema(enum, opts?)` | DMN enum name | `z.ZodEnum` with `.meta()` |\n| `initDmnMetamodel(path)` | File path or object | void (configures reader) |\n| `getDmnTypeNames()` | — | string[] of all type names |\n| `getDmnEnumNames()` | — | string[] of all enum names |\n| `getDmnTypeProperties(type)` | DMN type name | ModdleProperty[] |\n| `registerDmnSchema(type, schema)` | Name + schema | void (for cross-type refs) |\n\n## Test\n\n```bash\npnpm test          # 124 tests\n```\n\n- 28 schema smoke tests (fields, meta, refinements, parse)\n- 96 gold-set parity tests (generated vs hand-authored for all 49 types)\n\n## Upgrading (when OMG releases a new DMN version)\n\nWhen `dmn-moddle` ships a new version (e.g., DMN 1.5):\n\n```bash\n# 1. Update the moddle dependency\npnpm update dmn-moddle\n\n# 2. Copy the new descriptor into the package\ncp node_modules/dmn-moddle/resources/dmn/json/*.json src/data/\n\n# 3. Update the spec constants (one file, ~5 fields)\n#    Edit src/standard-config.ts:\n#      version: '1.5'\n#      fullName: 'OMG Decision Model and Notation 1.5'\n#      specPdfUrl: 'https://www.omg.org/spec/DMN/1.5/PDF'\n\n# 4. Regenerate types and verify\npnpm generate:overloads   # regenerates types.generated.ts\npnpm check                # build + test + type-check + publint\n```\n\nThe package derives metadata from the moddle JSON descriptor at runtime (`prefix`, `uri`, type names, inheritance chains). Only the declared constants in `standard-config.ts` need manual updating — everything else regenerates automatically.\n\n## Architecture\n\n```\nsrc/\n  data/dmn13.json          # Bundled moddle descriptor (copied from dmn-moddle)\n  standard-config.ts       # Spec constants — the ONE file to edit on upgrade\n  metamodel.ts             # Reads descriptor, resolves inheritance chains\n  descriptions.ts          # Hand-authored field descriptions from OMG spec\n  schema.ts                # Schema factory — derives all meta from config + descriptor\n  types.generated.ts       # Auto-generated: type names, interfaces, TYPE_CHAINS\nscripts/\n  generate-overloads.ts    # Codegen: reads descriptor → emits types.generated.ts\n```\n","readmeFilename":"README.md"}