Imported from AntelopeJS/dms-builder (
packages/dms-builder/skills/dms-builder/SKILL.md). Install upstream withnpx skills add AntelopeJS/dms-builder --skill dms-builder. Copyright stays with the author.
dms-builder
The builder has no store of its own: pages are PageController classes, blocks their static fields or .child() calls, tables a Table + DataController + model. Every write is staged in memory, typechecked across the project, and written only if it compiles. User docs: https://dms.antelopejs.com/docs/modules/builder (source: docs/ of this package); interface reference: node_modules/@antelopejs/interface-dms-builder/docs.
Surfaces
- Editor:
CtrlBon any page; Page / Tables / Data workspaces; edits stay a local draft until Save (oneSetPageBlockstransaction). Tables, menu and categories are written at once. - Interface (
@antelopejs/interface-dms-builder):ListPages,GetPageStructure,AddBlock,SetPageBlocks,PreviewLayout,CreateResource,AddQuery… Mutations returnOpResult({ ok, data, changes }/{ ok: false, error }): branch onok. - HTTP:
/api/builder/*, tenant owner only, sameOpResult. Pass the structure'sversionasexpectedVersionto fail withstaleinstead of overwriting.
Config
projectRoot (absolute source root, default the working directory), api.enabled (default: the core's dev flag). factoring was removed in 0.3. Version 0.4+ needs @antelopejs/dms 0.9 (interface-dms 0.7) and @antelopejs/dms-frontend 0.6.
Gotchas
- Off under
ajs project start: no routes (404), no frontend module, no Edit button.api.enabled: trueforces it on. - Blocks are read back by shape: code that leaves the factory-call grammar becomes
opaque, shown but not rewritten. - A block's permission is named after its position: moving or renaming it drops role grants; the change list warns.
- A type error anywhere in the project blocks every write: fix it first.
- A query
AddQuerywrites is a page route served at/dms/pages<pageRef><endpoint>(DMS 0.9); a block'sfetchUrlmust use that address (pageRoutePathfrom@antelopejs/interface-dms/page). - Editor texts live in
frontend-vue/i18n/locales/builder-{en-GB,fr-FR}.json(namespacedms_builder, English fallback); the header button's label is the key$dms_builder.action.edit_page. The entry point, bar, strips and toasts are translated; the panels are still English. App display strings written as$keys (page titles, category names, block headings) are drawn throughdisplayText()(app/runtime/i18n.ts); edit fields keep the raw key. - Page content rules (blocks backend-side, custom only for a missing block,
.meta()on custom blocks) come fromdms-best-practices.
