// state-base contract build — generates the versioned bundle into
// keet-daemon/spec/state-base/contract/{hyperschema,hyperdb,hyperdispatch}/.
// Mirrors keet's schema/builder/index.js m() (contract layer only).
// Run: node schema/state-base/build.cjs (CJS — the package is "type":"module")
const path = require('path')
const Hyperschema = require('hyperschema') // exports '.' → builder
const HyperdbBuilder = require('hyperdb/builder')
const Hyperdispatch = require('hyperdispatch') // exports '.' → builder
const SPEC = path.join(__dirname, '..', '..', 'spec', 'state-base')
const dirs = {
hyperschema: path.join(SPEC, 'contract', 'hyperschema'),
hyperdb: path.join(SPEC, 'contract', 'hyperdb'),
hyperdispatch: path.join(SPEC, 'contract', 'hyperdispatch')
}
const defineTypes = require('./contract/types.cjs')
const defineCollections = require('./contract/hyperdb.cjs')
const defineOps = require('./contract/hyperdispatch.cjs')
// 1) hyperschema (types)
const schema = Hyperschema.from(dirs.hyperschema)
defineTypes(schema)
Hyperschema.toDisk(schema)
// 2) hyperdb (collections) — reads the hyperschema dir for type resolution
const db = HyperdbBuilder.from(dirs.hyperschema, dirs.hyperdb)
defineCollections(db)
HyperdbBuilder.toDisk(db)
// 3) hyperdispatch (ops)
const dispatch = Hyperdispatch.from(dirs.hyperschema, dirs.hyperdispatch, { offset: 0 })
defineOps(dispatch)
Hyperdispatch.toDisk(dispatch)
console.log('[state-base build] generated contract bundle ->', SPEC)