Skip to content

Update dependency Jint to 4.15.3 - #1185

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/jint-4.x
Open

Update dependency Jint to 4.15.3#1185
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/jint-4.x

Conversation

@renovate

@renovate renovate Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
Jint 4.14.04.15.3 age confidence

Release Notes

sebastienros/jint (Jint)

v4.15.3

Jint 4.15.3 rounds out the 4.15 embedder line: every item here answers friction a real integration reported while adopting the host-integration surface 4.15.0 introduced. Everything is additive — no option defaults changed and no behavior changes for existing code.

  • Engine.Advanced.AddLazyGlobal (#​2862) — install a lazy global on a live engine, so a host whose globals are computed from per-request data can defer building them until script reads the name; the same PR adds Engine.Advanced.WithRestoredGlobals(snapshot, action), the try/finally every snapshot-reusing host was writing by hand.
  • PropertyDescriptor.CreateLazy (#​2865) — a public lazy property descriptor that materializes once and then rejoins the read and write inline caches, which a hand-rolled CustomJsValue descriptor never could; it is the sanctioned way to build for any host object property what AddLazyGlobal does for a global.
  • Options.AddImmutableCrossing(params Type[]) (#​2863) — a host promise that instances of the declared CLR types do not change while they are exposed to the engine, in exchange for which a wrapped object memoizes its resolved reads. On the nested-document walk it was built for that measures −43% to −84% time and −99% allocation against the undeclared path, with dictionary and JsonNode sources converging to identical steady-state cost. It is a promise: a declared object mutated anyway will serve stale reads.
  • Host-contract verification from the shipped package (#​2864) — set the Jint.EnableHostContractVerification AppContext switch before the first use of any Jint type and the checks that catch a host answering one extension point in a way that contradicts another run in Release, throwing with a descriptive message. Embedders can now run their suites against the exact package they deploy instead of building a Debug Jint from source, and CI now runs this repository's own host suites that way too (#​2866).
  • Engine.Advanced.HasSharedShape (#​2861) — a stable, pinnable predicate for whether JsObject.Create, CreateFromEntries or JsObjectShape.Instantiate actually produced a shared-layout object, which the explicitly non-contractual ObjectRepresentation diagnostic could never be.
  • JsString.Create(string) is now public (#​2860) — the counterpart of JsNumber.Create, answering the empty string and single-character ASCII from interned instances instead of allocating.
  • Documentation (#​2859) — an unresolvable reference's Base holds an internal sentinel rather than undefined, and resolver authors returning it were leaking that sentinel string into scripts; the docs and the in-repo sample now show the right idiom.

What's Changed

  • Make JsString.Create(string) public by @​lahma in #​2860
  • Document that an unresolvable reference's base is a sentinel, not undefined by @​lahma in #​2859
  • Add engine-reuse ergonomics: post-construction lazy globals and a snapshot scope by @​lahma in #​2862
  • Give hosts a stable predicate for "did the shaping actually happen" by @​lahma in #​2861
  • Make the host-contract verifiers reachable, and complete by @​lahma in #​2864
  • Give hosts a lazy descriptor that rejoins the caches once it holds a value by @​lahma in #​2865
  • Let a host promise a wrapped object is immutable and have its reads memoized by @​lahma in #​2863

Full Changelog: sebastienros/jint@v4.15.2...v4.15.3

v4.15.2

Jint 4.15.2 is a fix release.

  • Async and generator suspension — loop iteration state is preserved across suspensions in async generators and for await...of (#​2852), an await suspending a right-hand side no longer stores the suspension sentinel into the target (#​2855), and suspension-node resolution unwraps correctly (#​2856).
  • Correctness — calling and instanceof work on bound functions whose target is itself bound (#​2853), and inherited accessors reached through ObjectInstance.TryGetValue receive the original receiver (#​2854).
  • Performance — the builtin-shape probe lane answers an authoritative miss without falling back to the slow path, which named-index misses on shaped objects were paying on every probe (#​2858); and the JsObject.Create values span is now nullable-annotated so a lazy slot's required null needs no suppression (#​2851).

What's Changed

New Contributors

Full Changelog: sebastienros/jint@v4.15.1...v4.15.2

v4.15.1

Jint 4.15.1 is a small refinement release shaped by the first real-world adoptions of 4.15.0's host-integration surface — every change answers a need a shipping embedder hit within days of the release. No behavior changes for existing code, with one deliberate spec-path improvement: Object.freeze no longer forces lazily-declared properties into existence just to validate attribute-only redefinitions (so freezing globalThis no longer materializes every lazy global).

  • JsObjectLayout lazy slots (#​2850) — a fresh shaped object per item can now defer expensive members: declare AddLazy(name, factory) on the layout, pass per-instance state to JsObject.Create, and the member materializes on first read while every item keeps sharing one hidden class. In the motivating host shape (a 15-member event envelope with 4 expensive members), builds measure ~3.6× faster with 4× fewer allocations than the eager layout, and ~1.6× faster than the dictionary-mode workaround it replaces.
  • Observability for host testsEngine.Advanced.GetPropertyAccessSemantics (#​2847) lets a test pin the access semantics the engine derived for a host type, and GetInteropConversionDiagnostics (#​2848) counts CLR array crossings so a host can audit its ArrayConversion exposure — including through dependencies it doesn't own. Both carry the same non-contractual, diagnostics-only framing as GetObjectRepresentation.
  • PropertyFlag.NonWritable / OnlyConfigurable (#​2849) complete the named combination lattice for the descriptor shapes hosts actually build.
  • Documentation (#​2846) — the contracts a real adoption tripped over, stated where an embedder will find them: JsonSerializer reuse and its Undefined sentinel, the BigInt.prototype.toJSON escape hatch, what does not route through GetOwnProperties(), and the snapshot reuse recipe.

What's Changed

  • Document the contracts a real adoption tripped over by @​lahma in #​2846
  • Let a test observe the access semantics the engine derived for a host type by @​lahma in #​2847
  • Name the two PropertyFlag combinations hosts actually build by @​lahma in #​2849
  • Count CLR array conversions so a host can audit its crossing semantics by @​lahma in #​2848
  • Let a layout declare lazy slots so a shaped object can defer expensive members by @​lahma in #​2850

Full Changelog: sebastienros/jint@v4.15.0...v4.15.1

v4.15.0

Jint 4.15.0 is an embedder-focused release: the host-integration surface was widened after auditing six real-world integrations, engine reuse got first-class support, and an adversarial pre-release review verified every change since 4.14.0 test-first. No option defaults changed. One behavior change to note: re-importing a module whose evaluation failed now rethrows the recorded error instead of returning a namespace (#​2827).

Highlights

Host objects

  • Answer reads value-direct with TryGetOwnPropertyValue (#​2808) and existence/enumerability questions without materializing descriptors with ProbeOwnProperty (#​2803); access semantics are derived from the type automatically (#​2804). Warm host reads cost zero probes, and Debug builds verify every answer.
  • ArrayLikeObject (#​2835, #​2841) projects a live indexed collection by implementing two members — indexed reads, for-of, spread, generics and JSON.stringify cost one virtual call per element.
  • JsObjectShape (#​2830, #​2836, #​2840) declares shared prototypes once per process with lazily materialized per-realm members — and a shaped prototype can serve the prototype-method inline cache, which no host subclass can.
  • First adopter: a DOM binding cut indexed-read allocations by 60% and existence probes to zero.

Engine reuse

  • CaptureGlobalSnapshot / RestoreGlobalSnapshot (#​2834) restore a configured global between evaluations: top-level let/const cleared (nothing else can), stale promise continuations fenced, warm per-engine caches kept. Configuration reuse — deliberately not an isolation boundary.
  • Fresh-engine hosts register globals lazily (AddLazyGlobal, #​2805) or selectively via Prepared<T>.ReferencedGlobals (#​2831). The two compose with the snapshot.

Interop

  • CLR member accessors are shared process-wide (#​2798, made effective for extension-method hosts in #​2829); compiled lanes cover dictionary writes, indexers, statics and omitted optional arguments (#​2839); host delegates invoke through arity-typed thunks with no argument array (#​2799, #​2843).
  • Typed converter registration (#​2794) and EnumConversionMode.Name (#​2796) keep the lanes a blanket converter used to cost.
  • JSON parses from char and UTF-8 spans (#​2832) and serializes into IBufferWriter<byte> (#​2822).
  • NullPropagatingReferenceResolver.Instance (#​2833) makes nullish member reads yield undefined through a recognized inline lane.

Performance, gated

  • Against 4.14.0 on idle hardware: every Dromaeo row improved (object-regexp −25% with 48% fewer allocations, object-string −21%, string-base64 −15%); SunSpider improved on eleven scripts, zero regressions.
  • Fast-call coverage widened across dozens of built-ins, with per-argument guards and register-based rest calls: Math.max(a,b) −22%, push(x,y) −19% (#​2828, #​2843, #​2844).
  • encodeURI on clean input −85%; dense toReversed/with up to −86% (#​2843).

On the engine comparison benchmarks, Jint 4.15.0 is the fastest engine outright on 5 of 12 scripts — taking dromaeo-object-regexp-modern from native V8 at −42% — the fastest managed engine on 10 of 12, the fastest interpreter on all 12, and 8.9×–11.6× ahead of ClearScript (native V8) on every interop row.

What's Changed

  • Replace xUnit Assert.* with AwesomeAssertions across the test suites by @​lahma in #​2742
  • Cache interop invokers process-wide instead of per-Engine by @​lahma in #​2743
  • Compile CLR property and field access instead of reflecting per hit by @​lahma in #​2744
  • Convert an indexer hit by the indexer type, not the member type by @​lahma in #​2746
  • Measure the execution timeout against an inline deadline by @​lahma in #​2747
  • Consult reference resolver for a call to an unresolvable identifier by @​poissoncorp in #​2750
  • Trim per-call overhead from the interop method fast lane by @​lahma in #​2745
  • Bypass the array-covariance check on exact-JsValue[] dense element stores by @​lahma in #​2751
  • Sort integer-index property keys by value instead of re-parsing each key by @​lahma in #​2752
  • Bypass the array-covariance check on JsValueListBuilder element stores by @​lahma in #​2753
  • Bypass the array-covariance check on JsObject overflow slot stores by @​lahma in #​2754
  • Bypass the array-covariance check on callback argument arrays (sort, groupBy, array iteration) by @​lahma in #​2755
  • Memoize the converted value of a stable reference-typed interop property by @​lahma in #​2756
  • Replace StrictModeScope with a Strict flag on the execution context by @​lahma in #​2757
  • CI: reliably seed the cross-OS Test262 cache and bump actions to latest by @​lahma in #​2758
  • Bump the testing group with 2 updates by @​dependabot[bot] in #​2760
  • Bump the analyzers group with 1 update by @​dependabot[bot] in #​2759
  • Bump the js-engine-comparisons group with 1 update by @​dependabot[bot] in #​2761
  • Refresh the engine comparison benchmark README against latest main by @​lahma in #​2762
  • Update Test262 suite to 5f1f06f by @​lahma in #​2763
  • Enable MA0212 and use MemoryMarshal.GetReference in the sum-of-products lane by @​lahma in #​2764
  • Enable MA0089 and use char separators/args for string methods by @​lahma in #​2766
  • Enable MA0209 and pass in-parameters explicitly at call sites by @​lahma in #​2768
  • Promote zero-violation Meziantou performance rules to warning by @​lahma in #​2765
  • Enable MA0168 (readonly struct for in/ref readonly parameter) by @​lahma in #​2767
  • Stop DromaeoBenchmark from measuring its own JIT warmup by @​lahma in #​2769
  • Hoist per-call constants out of the call and assignment fast paths by @​lahma in #​2770
  • Decide callability and receiver kind by type flag instead of type check by @​lahma in #​2771
  • Settle validated hops 1-3 slot hits inline by @​lahma in #​2772
  • Resolve the assignment slot store from one element ref and one context read by @​lahma in #​2773
  • Reinterpret non-Reference evaluation results without a checked cast by @​lahma in #​2774
  • Publish to nuget.org with trusted publishing instead of an API key by @​lahma in #​2748
  • Vectorize the special-casing pre-scans by @​lahma in #​2775
  • Search backwards for lastIndexOf with the vectorized span search by @​lahma in #​2776
  • Decide call-stack framing by type flag instead of a class-hierarchy walk by @​lahma in #​2777
  • Stop toWellFormed from rebuilding already well-formed strings by @​lahma in #​2778
  • Give the callback-free array methods a dense fast path, and make fill throw as the spec requires by @​lahma in #​2779
  • Hoist the separator decision out of Array.prototype.join's loop by @​lahma in #​2780
  • Cut dromaeo-object-regexp allocations by 47% via string-concat and RegExp fixes by @​lahma in #​2781
  • Add a fast-call lane for built-in function calls by @​lahma in #​2783
  • Stop the shared static member accessor cache from pinning engines by @​lahma in #​2784
  • Bump the testing group with 1 update by @​dependabot[bot] in #​2782
  • Box a coerced JS integer as the declared CLR type, not always as int by @​lahma in #​2785
  • Make TimeoutInterval replace the previous timeout instead of accumulating by @​lahma in #​2788
  • Remove the unreachable enum branch from the default object converter by @​lahma in #​2790
  • Refuse writes to read-only CLR members instead of shadowing them by @​lahma in #​2786
  • Document the constraint helpers' unlimited sentinels by @​lahma in #​2789
  • Keep the compiled invoker lane for return types object converters cannot observe by @​lahma in #​2791
  • Thread the member resolution requirement through the API it came from by @​lahma in #​2787
  • Add an option to expose CLR enums to script as their name by @​lahma in #​2796
  • Give every engine its own constraint instances so Options can be shared by @​lahma in #​2795
  • Stop the custom reference resolver from disabling the property-write fast path by @​lahma in #​2797
  • Add benchmark lanes for the host-object and interop shapes integrators run by @​lahma in #​2800
  • Widen two host-bridging members to public by @​lahma in #​2801
  • Route JsString's value-observing members through ToString() by @​lahma in #​2793
  • Document what the Fast* property setters actually skip by @​lahma in #​2802
  • Add Options.AddLazyGlobal for deferred host global registration by @​lahma in #​2805
  • Make the own-property probe overridable by host objects by @​lahma in #​2803
  • Compile the dictionary TryGetValue lane instead of invoking it reflectively by @​lahma in #​2792
  • Let a reference resolver declare which situations it wants to be consulted for by @​lahma in #​2807
  • Stop re-reflecting and re-binding on every host delegate call by @​lahma in #​2799
  • Let an object converter declare its types so unrelated members keep the fast lane by @​lahma in #​2794
  • Stop execution constraints from disarming the tight-loop lane by @​lahma in #​2809
  • Hash a concatenated string by its content, not by its buffer identity by @​lahma in #​2811
  • Stop a concatenation from growing and mutating its own receiver by @​lahma in #​2812
  • Compare set values the same way everywhere a set is stored or copied by @​lahma in #​2813
  • Let host code build objects directly in the hidden-class representation by @​lahma in #​2810
  • Enable the three benchmark lanes whose features have since shipped by @​lahma in #​2814
  • Share the resolved CLR member accessors through the type resolver by @​lahma in #​2798
  • Document the third-party integration surface for future agent sessions by @​lahma in #​2815
  • Give the pooled Reference back when a reference resolver claims the read by @​lahma in #​2816
  • Return the rented callee Reference on every exit from a call by @​lahma in #​2817
  • Let a host see which representation an object actually got by @​lahma in #​2818
  • Let host objects declare their property-access semantics by @​lahma in #​2804
  • Correct the array-bridging note and read length through JsArray by @​lahma in #​2820
  • Consolidate the agent-instruction files into one canonical AGENTS.md, and correct the integration surface by @​lahma in #​2819
  • Correct three comments that contradict current behaviour by @​lahma in #​2821
  • Add a UTF-8 IBufferWriter<byte> overload to JsonSerializer.Serialize by @​lahma in #​2822
  • Stop the prototype-method cache trusting a version that cannot witness the name by @​lahma in #​2823
  • Correct the host-object probe count #​2823 invalidated by @​lahma in #​2824
  • Let a host answer an own read without materializing a descriptor by @​lahma in #​2808
  • Fix eval var destructuring in direct eval by @​lahma in #​2826
  • v4.15.0 pre-release review: verified fixes across the engine by @​lahma in #​2829
  • Let hosts build shared prototype shapes by @​lahma in #​2830
  • Make the cyclic-module error state machine match the spec by @​lahma in #​2827
  • Expose the globals a prepared program actually references by @​lahma in #​2831
  • Parse JSON from char spans and UTF-8 bytes by @​lahma in #​2832
  • Ship the null-propagating reference resolver and serve it inline by @​lahma in #​2833
  • Fix the unsound Leaf annotations and extend fast-call coverage by @​lahma in #​2828
  • Answer shape-layout probes without materializing, and let shape-mode receivers hold cache entries by @​lahma in #​2836
  • Create ModuleOperations before configuration callbacks run by @​lahma in #​2837
  • Let a host project a live indexed collection without re-deriving the property model by @​lahma in #​2835
  • Answer existence questions on in-box exotics without materializing descriptors by @​lahma in #​2838
  • Let a host reuse a configured engine instead of rebuilding one by @​lahma in #​2834
  • Extend the compiled interop lanes to keyed writes, indexers, statics and optional arguments by @​lahma in #​2839
  • Let a host attach per-instance state to a shaped object by @​lahma in #​2840
  • Let an array-like host answer existence without producing the element by @​lahma in #​2841
  • Close the four doc gaps the API-necessity audit found by @​lahma in #​2842
  • Measured micro-optimizations from the pre-release review by @​lahma in #​2843
  • Declared per-argument Leaf guards and site-arity-bounded rest fast calls by @​lahma in #​2844
  • Refresh engine comparison benchmarks for 4.15.0 by @​lahma in #​2845

New Contributors

Full Changelog: sebastienros/jint@v4.14.0...v4.15.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested a review from a team as a code owner July 23, 2026 00:20
@renovate renovate Bot changed the title Update dependency Jint to 4.14.0 Update dependency Jint to 4.14.0 - autoclosed Jul 23, 2026
@renovate renovate Bot closed this Jul 23, 2026
@renovate
renovate Bot deleted the renovate/jint-4.x branch July 23, 2026 00:21
@renovate renovate Bot changed the title Update dependency Jint to 4.14.0 - autoclosed Update dependency Jint to 4.15.0 Jul 28, 2026
@renovate renovate Bot reopened this Jul 28, 2026
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch 3 times, most recently from c7b53ad to 16275b9 Compare July 28, 2026 16:36
@renovate renovate Bot changed the title Update dependency Jint to 4.15.0 Update dependency Jint to 4.15.1 Jul 28, 2026
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch from 16275b9 to 6760fc5 Compare July 28, 2026 23:04
@renovate renovate Bot changed the title Update dependency Jint to 4.15.1 Update dependency Jint to 4.15.2 Jul 28, 2026
@renovate
renovate Bot force-pushed the renovate/jint-4.x branch from 6760fc5 to f57eb87 Compare July 29, 2026 12:57
@renovate renovate Bot changed the title Update dependency Jint to 4.15.2 Update dependency Jint to 4.15.3 Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants