Over the past couple of weeks I've been looking into WO's .api format, thinking on how it might be extended to make it more useful and informative. The format can be made far more valuable, for both developers and tooling, by adding both human-readable documentation and a more detailed structural contract — what types bindings accept, how attributes outside the declared API are handled (if at all) and so on. A richer more informative API makes the elements both easier to use, and increases the ability of tools to validate and verify templates statically, catching whole classes of binding errors that can currently go unnoticed.
Of course, like everything I do in WO, this all eventually leads to ng-objects, since this work doubles as the creation of ng's eventual canonical element API.
The format's design is happening in in a designated github repository; github.com/undur/apiext-format. The format's current development version is based on and backwards-compatible with WO's original .api format. But if that compatibility turns out to hinder the design, we might change the design direction.
I encourage anyone with thoughts or ideas to pipe up and let me know, either directly or by filing an issue on the github repo.
.apiext github repository.apiext files..apiext in Eclipse (video, 43sec).apiext documentation on element-hover in Eclipse (video, 2min)| 🤸♀️ wonder-slim | AjaxModalContainer: clicking outside the dialog closes it | Aug 9 |
| 🌶 cayenne | ClassGenerationAction cleanup | Aug 8 |
| 🌶 cayenne | ClassGenerationAction cleanup | Aug 8 |
| 🌶 cayenne | ClassGenerationAction cleanup - maximally immutable state | Aug 8 |
| 🌶 cayenne | ClassGenerationAction cleanup | Aug 8 |
| 🔌 wo-adaptor-jetty | Update jetty v12.1.10 -> v12.1.12 | Aug 8 |
| 🤖 modulo | Update jetty v12.1.10 -> v12.1.12 | Aug 8 |
| 🤸♀️ wonder-slim | Update json v20240303 -> v20260719 | Aug 8 |
| 🦡 vermilingua | Update junit v6.1.0 -> v6.1.3 | Aug 8 |
| ⚙️️ wonder-slim-deployment | Update junit v6.1.0 -> v6.1.3 | Aug 8 |
| 🤸♀️ wonder-slim | 8.0.3 | Jun 26 |
| 🌿 parsley | 1.6.0 | Jun 26 |
| 🌿 parsley | 1.5.0 | Jun 18 |
| 🤸♀️ wonder-slim | 8.0.2 | Jun 18 |
| 🦡 vermilingua | 1.1.5 | Jun 15 |
| 🤸♀️ wonder-slim | 8.0.1 | Jun 1 |
| 🌿 parsley | 1.4.2 | Jun 1 |
| 🦡 vermilingua | 1.1.4 | Apr 24 |
| 🚀 ng-objects | 0.1.1 | Apr 22 |
| 🦡 vermilingua | 1.1.3 | Apr 15 |
| 🤸♀️ wonder-slim | Make ERXWOImage the full <wo:img> replacement (incl. dynamic/data images) | Jul 8 |
| 🌿 parsley | Heat map: make render-tree sibling ordering user-selectable (hottest-first vs source order) | Jul 6 |
| 🚀 ng-objects | Parser: record a SourceRange per binding (not just per element) | Jul 6 |
| 🧩 apiext-format | Generated-from-source authoring mode (annotations + javadoc → .apiext); the file stays canonical | Jul 5 |
| 🤸♀️ wonder-slim | AjaxSlim: remove replaceID (the ajax-replacement mode) | Jul 5 |
| 🧩 apiext-format | Prefix-family bindings (declare a family of bindings by prefix, e.g. ?key query params) | Jul 4 |
| 🧩 apiext-format | Enclosing-context requirement (element must sit inside a form) | Jul 4 |
| 🧩 apiext-format | Severity on <deprecated> (let a deprecation escalate to an error) | Jul 4 |
| 🧩 apiext-format | Structured replacement pointer on <deprecated> (use="...") | Jul 4 |
| 🚀 ng-objects | Tag-alias resolution is global at runtime — a framework's templates should resolve tags in their own context, not the application's | Jul 3 |