Skip to content

v0.15.49

Choose a tag to compare

@Goldziher Goldziher released this 12 May 16:42
· 8458 commits to main since this release
v0.15.49
668b65d

Added

  • TraitBridgeConfig gains context_type and result_type fields (plus a ResolvedCrateConfig::bridge_associated_types() helper that aggregates them across all configured bridges). Backends use this to skip generic record/POJO codegen for the bridge's associated types instead of hardcoding literal "NodeContext" / "VisitResult" checks. Any project with a callback-style trait can now wire its own context/result types through the bridge codegen.
  • feat(alef-core,alef-backend-ffi): ffi_skip_methods on TraitBridgeConfig filters individual methods from the FFI vtable struct and impl Trait for KreuzbergXBridge. Methods whose signatures can't traverse the C FFI boundary (e.g. Option<&dyn Trait> returns) are dropped, falling back to the trait's default implementation.
  • feat(alef-backend-swift): trait-bridge support for trait methods that take excluded internal types by reference (e.g. Renderer::render(&self, doc: &InternalDocument)). Outbound trampolines now deserialise the JSON-bridged `String` parameter back to the source type using its fully-qualified Rust path.

Fixed

Codegen (cross-cutting)

  • fix(codegen): scope cfg-gated trait-bridge field detection to fields whose type references an opaque wrapper (per `cfg.opaque_type_names`). The previous logic in `gen_from_core_to_binding_cfg` + the struct emitters forced `Default::default()` / `#[serde(skip)]` for any cfg-gated field listed in `never_skip_cfg_field_names`, which incorrectly defaulted regular convertible fields like `metadata: HtmlMetadata` on `ConversionResult`. Restores `result.metadata.document.*` access in the Python binding.
  • fix(backend-pyo3,backend-wasm): drive trait-bridge post-process from `core_import` instead of hardcoded crate names. The pyo3 visitor-fallback rewrite and the wasm `From<Wasm*>` impl rewrite previously matched the literal string `html_to_markdown_rs`. Both now build their search/replace patterns via the configured `core_import` plus the per-bridge `type_alias` / `options_type` / `resolved_options_field`.
  • fix(alef-backend-extendr): trait-bridge codegen now compiles for R bindings. Six end-to-end issues fixed (Result generic arity, RwLock map_err, Send/Sync for Robj, SendRobj wrapper for tokio::spawn_blocking, JSON-bridged Robj args, Named param branch in build_extendr_arg). Unblocks removing `exclude_languages = ["r"]` from OcrBackend/PostProcessor/Validator/EmbeddingBackend/DocumentExtractor/Renderer.
  • fix(alef-backend-ffi): stop duplicating the `Plugin` super-trait impl in `gen_ffi_trait_impl`.

WASM trait bridge

  • fix(wasm-backend): WASM trait bridge constructor now correctly reads the JS object's `name` property as a plain string (was always falling through to the default).
  • fix(wasm-backend): `build_wasm_arg` no longer uses Rust `{:?}` Debug formatting for non-primitive JS bridge arguments. `TypeRef::Bytes` emits `js_sys::Uint8Array::from(...)`; `Named`/`Vec`/`Map` use `serde_wasm_bindgen::to_value(...)`.
  • fix(wasm-backend): async WASM trait bridge methods now correctly await the `Promise` returned by the JS function (was treating the Promise as the resolved value).

Per-backend codegen

  • fix(alef-e2e/swift): `[].` traversal element accessor resolves field aliases before computing the Swift method name; enum elements call `.toString()` not `.to_string().toString()`.
  • fix(alef-backend-dart): add `rust_input: crate` to the generated `flutter_rust_bridge.yaml`.
  • fix(alef-backend-go): filter `ffi_skip_methods` in trait bridge generation.
  • fix(alef-backend-java): post-generation line-length wrapping pass for Checkstyle.
  • fix(alef-backend-napi): skip opaque-struct methods whose return type is a capsule type; napi capsule passthrough now runtime-compatible with the `tree-sitter` npm package (raw `napi_create_external`, optional `napi_type_tag_object`, configurable property name).
  • fix(alef-backend-rustler): refactor method-call rendering to use a single `core_path` template variable.
  • fix(alef-e2e/kotlin): resolve `options_type` across language overrides (csharp/c/go/php/python); bareword imports fallback to `kotlin_pkg_id`.
  • fix(alef-e2e/java,alef-e2e/go,alef-e2e/php,alef-e2e/streaming_assertions): extensive streaming-test codegen fixes across all four — see CHANGELOG for the full breakdown.
  • fix(alef-e2e/c,alef-e2e/swift,alef-e2e/zig,alef-e2e/dart,alef-backend-zig): five codegen bugs that broke c/swift/zig/dart e2e tests.

See CHANGELOG.md for the complete per-fix breakdown.