Project & Schemas
Built-in and generated schemas, merge rules, and schema-driven compile behavior.
Quire validates projects against a schema extension plus built-in StretchPress content and commerce types.
Schema discovery
check and compile search up from the source file for:
quire.schema.jsonstretchpress.schema.json
Use --schema path/to/schema.json to force one schema for a command.
Built-in + project schema
Built-in schema covers base StretchPress content and commerce model roots. Projects extend it via:
- primitive type names
- object types/fields
- capabilities
- formatters
- view props
- block definitions
Generated schema extension shape (conceptual):
{
"primitives": ["CampaignID"],
"types": {
"Review": {
"fields": {
"id": "String",
"rating": "Number"
}
}
},
"capabilities": {
"reviews.open": { "args": ["ReviewID"], "returns": "Action" }
},
"blocks": {
"reviewCard": {
"props": { "rating": "Number", "body": "String" },
"required": ["rating", "body"],
"children": false
}
}
}
Merge behavior
- primitive names: unioned
- object types: overwritten by type name
- capabilities/formatters/blocks: overwritten by name/path
- view props: overwritten by name
Malformed extensions are rejected before compile.
Live schema generation
Generated extensions are created from a platform live model:
quire generate-schema live-model.json --out quire.schema.json
live-model.json must satisfy schemas/quire-live-model.v1.json. The generated output must satisfy schemas/quire-project-schema.v1.json.
The generated contract can include project content, commerce types, and block/capability additions:
{
"types": {
"Customer": {
"fields": { "id": "String", "email": "String" }
}
},
"capabilities": {
"commerce.discount.apply": {
"args": ["String"],
"returns": "Action"
}
},
"blocks": {
"discountBanner": {
"props": { "code": "String", "action": "Action" },
"required": ["code", "action"],
"children": false
}
}
}
Project builds and manifests
quire build compiles all discovered .quire files under a directory:
quire build ./views --out ./dist
Directories that contain quire.package.json are treated as packages and skipped as views; their components remain importable.
Ignored directories include:
.gitnode_modulestmpdistcoverage