extend
Type: object
Signature: object.extend(shape)
What It Is
This method page uses object.extend(shape) to enforce document-level structure checks, explicit section targeting, and typed field extraction over markdown content in extend use cases. In practice, 1 h1 heading and 1 h2 section is validated and emitted as top-level keys title and data using object(), string(), min(), and extend() under extend rules. When constraints are broken, issue codes like invalid_type identify exactly which extend node failed and why.
When to Use
Apply object.extend(shape) when your document flow requires composing reusable object contracts across related markdown schemas for extend and strict schema adherence over permissive parsing. It is less suitable for one-off payloads where object composition adds no reuse value under extend, because teams must accept key-level strictness that improves typing but rejects ad-hoc variations. Use object(), string(), min(), and extend() around object.extend(shape) to keep extend contracts transparent and reduce ambiguity in validation behavior.
object.extend(shape)
Input Markdown
# RUNBOOK: Object Extend
## 0. META
- service: fraud-api
- owner: risk-platform
- region: us-east-1Schema
import { md } from '@markschema/mdshape'
const base = md.object({
service: md.string().min(3),
owner: md.string().min(3),
})
const extended = base.extend({
region: md.string().min(3),
})
const schema = md.document({
title: md.heading(1),
data: md
.section('0. META')
.fields({
service: md.string().min(3),
owner: md.string().min(3),
region: md.string().min(3),
})
.pipeline(extended),
})Result
Success
{
"success": true,
"data": {
"title": "RUNBOOK: Object Extend",
"data": {
"service": "fraud-api",
"owner": "risk-platform",
"region": "us-east-1"
}
}
}Error
Failure trigger: remove region from 0. META; the field added by extend() is required and parsing fails.
{
"success": false,
"error": {
"issues": [
{
"code": "missing_heading",
"message": "Missing heading with depth 1",
"path": [
"title"
],
"line": 1,
"position": {
"start": {
"line": 1,
"column": 1
}
}
}
]
}
}