@bildit-platform/template-parser
Parsers and transformers for BILDIT banner templates.
Exports
| Entry point | Template syntax |
|---|---|
@bildit-platform/template-parser/v1 | $(name:Type=default;option=value) expressions, parsed with a Lezer grammar |
@bildit-platform/template-parser/v2 | JSDoc-annotated declarations in templates marked with // @template v2 |
There is no root export; import from /v1 or /v2.
v1 usage
import { parseTemplateMetadata, transformTemplate } from '@bildit-platform/template-parser/v1'
const metadata = parseTemplateMetadata('const title = $(title:String="Hello")')
const code = transformTemplate('const title = $(title:String="Hello")', { title: 'Hi' })
v2 usage
import { isV2Template, parseTemplateMetadata, transformTemplate } from '@bildit-platform/template-parser/v2'
const source = `// @template v2
/**
* Headline shown at the top of the banner.
* @type String
* @mutates content
*/
const title = $(title:String="Hello")
`
isV2Template(source) // true (marker in the first 10 lines, or metadata with `mutates`)
const metadata = parseTemplateMetadata(source)
// [{ name: 'title', type: 'String', defaultValue: 'Hello', mutates: [{ property: null, attribute: 'content' }], ... }]
const replaced = transformTemplate(source, 'jsx', [{ ...metadata[0], value: 'Hi' }])
// ... const title = "Hi"
isV2Template(code, metadata?):codecan be a string or a{ raw }code object.transformTemplate(code, codeType, metadata, components?):codeType: 'html'emits unquoted values.componentsis aMapof published components by name, used to injectComponentfields. Throws when a field declares an invalid@mutatesattribute.
The v2 implementation matches the bildit-cms API (replace-template-values-v2.js, parseMetadataV2.js, is-v2-syntax.js). See src/v2/parity.test.js.
Build (Rollup)
pnpm --filter @bildit-platform/template-parser build
Build output is emitted to dist/, one ESM and one CJS tree with modules preserved:
dist/esm/v1.js,dist/esm/v2.js: ESM entry points (import)dist/cjs/v1.js,dist/cjs/v2.js: CJS entry points (require)dist/esm/v1/index.d.ts,dist/esm/v2/index.d.ts: type declarations
Run dedicated tests
Tests run against the built dist/ output, so build first:
pnpm --filter @bildit-platform/template-parser build
pnpm --filter @bildit-platform/template-parser test
Regenerate parser after grammar changes
pnpm --filter @bildit-platform/template-parser run build:parser
Publish
pnpm --filter @bildit-platform/template-parser publish --access public