feat(spa): vendor Vue frontend + emit bundle in both output modes - #26
Merged
Conversation
ronaldtse
force-pushed
the
feat/spa-frontend-bundle
branch
5 times, most recently
from
July 26, 2026 01:31
54f1015 to
222c23d
Compare
| end | ||
|
|
||
| # Collection ->exists(...) or ->forAll(...) | ||
| if (m = s.match(/^(.+?)->(exists|forAll)\s*\(\s*(\w+)\s*\|\s*(.+?)\s*\)\z/)) |
| end | ||
|
|
||
| # String.matches('regex') | ||
| if (m = s.match(/^(.+?)\.matches\(\s*['"](.+?)['"]\s*\)\z/)) |
Comment on lines
+45
to
+46
| clean = source.gsub(%r{//[^\n]*}, "") | ||
| .gsub(/\/\*.*?\*\//m, "") |
| def parse_color_value(value) | ||
| return {} if value.nil? || value.empty? | ||
|
|
||
| value.scan(/#([^#=]+)#=([^;]*);/).each_with_object({}) do |(k, v), acc| |
Comment on lines
+121
to
+123
| stripped = description | ||
| .gsub(/@STEREO;.*?(?:@ENDSTEREO;|\z)/m, "") | ||
| .gsub(/@PROP=.*?@ENDPROP;/m, "") |
Major expansion of the ea gem toward a drop-in headless replacement for Sparx Enterprise Architect. CLI commands added (13 new): - ea diff OLD NEW (--format=html for color-coded HTML report) - ea render NAME FILE (svg/png/pdf via rsvg-convert/ImageMagick) - ea export SUB FILE (xmi|json|json-schema|plantuml|xsd) - ea mdg ACTION (list|show NAME|stereotypes) - ea lint FILE (5 rules: naming, orphan, duplicate, cyclic, missing-stereo) - ea query FILE (chainable Ea::Query::Builder DSL) - ea info NAME FILE (single-element details) New subsystems: - Ea::Sources::Qea::Xref parser (@Stereo, @prop=@name..@ENDPROP;, legends) - Ea::Mdg::StereotypeAliasRegistry (GMLStereotypes.xml canonicalizer) - Ea::Export::Xsd::Generator (GMLClassMapping-driven XSD) - Ea::Export::JsonSchema::Generator (draft 2020-12) - Ea::Export::Xmi/Json/PlantUml generators - Ea::Image::EmfRenderer (lazy emfsvg adapter) - Ea::Render::ImageConverter (svg→png/pdf) - Ea::Lint engine + 5 rules - Ea::Ocl parser + evaluator (exists, forAll, matches, and/or/not) - Ea::Shapescript with variables, arithmetic, conditionals, labels - Ea::Svg::EaEmitter::Element::HeaderLinePipeline (OCP provider chain) - Ea::Svg::EaEmitter::Element::StereotypeIconRenderer QEA table coverage: 24 → 43 tables (added glossary, lists, versions, phase, authors, image, secrypt, palette, paletteitem, implement, roleconstraint, objectproblems/risks/tests/efforts/resources/ scenarios/requires/trx). Code quality: - HeaderLines refactored to OCP provider chain (legacy module aliased) - Xsd::CliBridge glue removed (defaults folded into Generator) - 1974 specs, 0 failures, 55 pending Version: 0.4.0 → 0.5.0
ronaldtse
force-pushed
the
feat/spa-frontend-bundle
branch
from
August 3, 2026 00:13
6c7f578 to
9121168
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The native SPA pipeline landed without a frontend —
ea spaproduced a 405-byte shell withwindow.__SPA_SKELETON_URL__set but no JS to mount, so opening the output rendered a blank page. BothSingleFileStrategyandShardedMultiFileStrategyhad the same hole.Vendor the full lutaml-uml frontend (source + dist + build pipeline) so the ea gem ships with a working SPA bundle and no longer depends on lutaml-uml for rendering. Dist is committed so
gem install eagets a working SPA without needing npm at install time.What landed
lutaml-uml/lutaml-uml@0.5.2wholesale:src/,dist/,tests/e2e/,package.json,vite.config.ts,tsconfig.json,vitest.config.ts,package-lock.json(package renamedlutaml-uml-spa→ea-spa)/frontend/node_modules/(local only)dist/drifts fromsrc/FRONTEND_APP_JS/FRONTEND_STYLE_CSSconstants +assert_frontend_bundle!helper that raises a clear error if the bundle is missing<style>and<script>into the single HTML file (stays self-contained)app.jsandstyle.cssnext toindex.html; shell now has<link href="style.css">and<script src="app.js" defer>Test plan
output_strategy_spec.rbspecs green (4 rewritten to assert bundle presence)ea spa models/.../plateau_v5.0.qea --mode=shardedproduces:index.html(487 B shell with<link>/<script src>tags),app.js(109 KB Vue IIFE),style.css(24.9 KB),skeleton.json,search.json,data/{packages,classes,enumerations}/*.jsonapp.jscontains Vue markers (createApp,pinia,Vue.)