A VS Code / Kiro IDE extension for editing Mongoose IDO Collection metadata
(ObjectStudioExport XML) through a friendly, visual UI instead of hand-editing deeply
nested XML.
Version 1.0.4. See CHANGELOG.md for release notes and DESIGN.md for the design and roadmap.
Features (v1)
- Visual custom editor for any
**/Collections/**/*.xml IDO file, with tabs:
- Properties — the primary working view: a sticky Identity bar (name, module,
ext-class, revision, inline-editable description), a read-only property grid
(# · Name · Binding badge · Class · Source) that filters, sorts and scrolls
independently, and a resizable, toggleable editor side panel that stays in view.
The panel edits every field with dropdowns/checkboxes, shows inline validation, has
Open ↗ buttons to jump to a referenced IDO, and a read-only inherited
PropertyClass section.
- Overview — edit identity / ext-class / revision fields.
- Tables — fully editable grid (alias, table, type, join) with add/delete rows.
- Properties — master–detail with binding badges, key markers, drag-to-reorder
(auto-renumbers
Sequence), add/delete, and a binding-aware detail form
(BOUND/DERIVED/UNBOUND/SUBCOLLECTION fields + PropertyAttributes) with enum dropdowns.
- Methods — editable method cards (name, type, transactional, stored proc, description)
with an editable parameter grid (seq, name, DB type/length/scale, in/out/message) and
add/delete for methods and parameters.
- IDO Outline — a second sidebar tree showing the structure of the active IDO
(Tables, Properties grouped by binding, Methods → parameters, Data Rules). Clicking a node
navigates the visual editor to that item.
- Labeled enums — "magic number" fields (MethodType, Binding, OperationType,
ActionType, comparison operators, …) render as dropdowns with human labels.
- Validation — semantic + intra-file reference checks surfaced as diagnostics
(Problems panel) and a live footer summary: required fields, invalid enum codes,
duplicate names, BOUND/DERIVED/SUBCOLLECTION requirements,
ColumnTableAlias must
match a real table alias, duplicate sequences, and more.
- IDO Explorer — activity-bar tree of all collections grouped by module, with a
fuzzy Go to Collection… quick-pick.
_IDS variants are flagged.
- Base ⇄ _IDS compare — open a diff between a collection and its
_IDS sibling.
- Clean round-trip — writes are format-conformant (BOM, CRLF, 3-space indent,
self-closing empties) and schema-faithful. 98% of the real corpus round-trips
byte-for-byte; the rest are irregularly-indented files that get normalized by design.
- Always available: one-click Open as XML to drop to the raw text editor.
Configuration
| Setting |
Default |
Description |
mgIdo.collectionsGlob |
**/IdoMetadata/**/Collections/**/*.xml |
Files discovered for the explorer/index. |
mgIdo.indentSize |
3 |
Indent width fallback. |
mgIdo.validateOnSave |
true |
Validate on save. |
mgIdo.openVisualByDefault |
true |
Open matching files in the visual editor by default. |
mgIdo.sequenceMode |
contiguous |
contiguous | preserve | gapped sequence numbering. |
mgIdo.formatScope |
document |
document | touched formatting scope (v1: document). |
mgIdo.referenceScope |
module |
module | workspace cross-reference resolution. |
mgIdo.sytelineInstallPath |
C:\Program Files\Infor\CSI |
Folder with AppMetadataTransport.exe used to import IDO XML for testing. Falls back to …\Setup\WinStudio and the dev …\Mongoose.submod\Setup\WinStudio. |
mgIdo.importConfig |
(empty) |
Target SyteLine configuration for imports (e.g. Demo_DALS). Prompted and saved here on first import if empty. |
mgIdo.bumpRevisionOnSave |
true |
On save of a changed IDO file, increment <RevisionNo> and stamp <RevisionDate> (local time). |
Commands
- IDO: Open in Visual Editor / IDO: Open as XML
- IDO: Validate
- IDO: Go to Collection…
- IDO: Compare base ⇄ _IDS variant — native side-by-side XML diff
- IDO: Compare base ⇄ _IDS (structured) — a readable Markdown report of what differs
(added / removed / changed properties, tables, methods, data rules), ignoring the revision stamp
- IDO: Import to SyteLine (for testing) — deploys the current IDO XML via
AppMetadataTransport.exe
- IDO: Test in MG REST Client — opens a pre-selected quick test form (Load/Update/Invoke/…) using the REST client's active profile; shown only when the
jeking.mg-rest-client extension is installed
- IDO: Enable XSD Validation (Red Hat XML) — binds the bundled official Mongoose
IDODefinition.xsd to **/Collections/**/*.xml so the Red Hat XML extension validates IDO files against the schema
- IDO: Rebuild Index
For other extensions (programmatic)
mgIdo.openIdoByName(name: string): Promise<boolean> — resolve an IDO by name via the
workspace index and open it in the visual editor; returns true if found. Hidden from the
Command Palette. Example:
const ext = vscode.extensions.getExtension('jeking.mg-ido-pro-editor');
await ext.activate();
const ok = await vscode.commands.executeCommand('mgIdo.openIdoByName', 'SLItems');
Architecture
src/
model/ XML tree (parse/serialize), typed projection, enums, sequence, edits
validation/ semantic + reference validation
editor/ CustomTextEditorProvider (hosts the webview, applies edits)
explorer/ workspace index + collections tree + active-IDO outline tree
webview/ UI (framework-free TS) + host/webview message protocol
extension.ts activation: editor, explorer, commands, diagnostics
media/ webview.css + activity-bar icon
test/ node:test suites (core + corpus round-trip)
The open TextDocument is the single source of truth. Webview edits post typed messages;
the host applies them to the XML tree, re-serializes canonically, and replaces the document
via a WorkspaceEdit — so text view, undo/redo, and external edits all stay in sync.
Development
npm install
npm run build # bundle extension + webview (esbuild)
npm run watch # rebuild on change
npm run typecheck # tsc --noEmit
npm test # compile + run node:test suites
Run the extension: open this folder in VS Code / Kiro and press F5 (Extension
Development Host), then open any IDO collection XML.
Tests
test/roundtrip.test.ts — runs against the real corpus (set MG_CORPUS to override the
path, MG_SAMPLE to change the file count). Hard gates: semantic equality (no data
loss) and idempotency (no formatting drift); plus a byte-exact rate metric.
test/core.test.ts — enum catalog, model projection, sequence renumbering, edit ops, and
validation.
test/edits.test.ts — full CRUD edit operations (add/edit/delete for properties, tables,
methods, parameters) with serialization-stability checks.
test/webview.test.ts — jsdom smoke test that runs the real bundled webview, asserts the
Canvas renders, and that inline edits / row-expand / add emit the correct messages.
Status / Roadmap
This is the MVP. Planned next: cross-file reference go-to-definition, the guided DataRule
builder, canvas relationship lines + drag-drop binding conversions, _IDS sync, and editors
for the sibling constructs (PropertyClass, Form/ComponentClass/Validator). See DESIGN.md.
| |