OverviewFilesCommitsIssuesDocsReleasesPeers

keet-daemon / schema / state-base / build.cjs

37 lines · javascript ref:
// 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)