Class: Lilac::CLI::PackageStager
- Inherits:
-
Object
- Object
- Lilac::CLI::PackageStager
- Defined in:
- lib/lilac/cli/build/package_stager.rb
Overview
Stages Lilac package .mrb files under dist/packages/ and (for
the :full target) writes the lilac.packages.json manifest the
scaffold-style boot script reads to load each package ahead of
evalScript.
Two input channels merge here (decisions §25 / §26):
1. **Bundler auto-discovery** — `PackageDiscovery.run` finds gems
whose gemspec declares `metadata["lilac_package"] = "true"`.
Each gem's `mrblib/*.rb` is compiled locally to `.mrb` so the
mruby version matches the vendored core wasm.
2. **Explicit `c.packages = [...paths]`** — pre-compiled `.mrb`
files. Useful for advanced overrides (custom package not in
a gem, vendored fork, etc.).
Manifest emission is target-dependent:
- `:full` writes `dist/lilac.packages.json` so the user's hand-
rolled boot script can `fetch` it and `loadBytecode` each entry
- `:compiled` skips the manifest — the generated boot module
inlines `loadBytecode` calls directly
Sibling of BundleAssetWriter / VendorWriter: same shape (a
build phase owning one cluster of file emissions), invoked once
from Builder#build.
Constant Summary collapse
- PACKAGES_DIR =
'packages'- MANIFEST_FILENAME =
'lilac.packages.json'
Instance Method Summary collapse
-
#initialize(packages:, target:, output_dir:, bytecode_builder:) ⇒ PackageStager
constructor
A new instance of PackageStager.
-
#run! ⇒ Object
Returns
Array<String>— page-relative URLs of every staged.mrb.
Constructor Details
#initialize(packages:, target:, output_dir:, bytecode_builder:) ⇒ PackageStager
Returns a new instance of PackageStager.
37 38 39 40 41 42 |
# File 'lib/lilac/cli/build/package_stager.rb', line 37 def initialize(packages:, target:, output_dir:, bytecode_builder:) @packages = packages @target = target @output_dir = output_dir @bytecode_builder = bytecode_builder end |
Instance Method Details
#run! ⇒ Object
Returns Array<String> — page-relative URLs of every staged
.mrb. Empty when no packages are configured or discovered.
46 47 48 49 50 51 52 53 |
# File 'lib/lilac/cli/build/package_stager.rb', line 46 def run! return [] if @packages.empty? && discovered_packages.empty? FileUtils.mkdir_p(File.join(@output_dir, PACKAGES_DIR)) urls = (stage_discovered + stage_explicit).uniq write_manifest!(urls) if @target == :full urls end |