Skip to content

Keep properties reactive when a model gets instrumented by Vue mid-constructor.#38

Open
pkaminski wants to merge 1 commit into
masterfrom
wrap-observed
Open

Keep properties reactive when a model gets instrumented by Vue mid-constructor.#38
pkaminski wants to merge 1 commit into
masterfrom
wrap-observed

Conversation

@pkaminski

@pkaminski pkaminski commented Jun 9, 2026

Copy link
Copy Markdown
Member

Typically we'd add and wrap all properties before Vue instruments a model. However, if the model gets passed into a call while the constructor is still running, and the call happens to add it to previously- instrumented object, then Vue will instrument the model early. We must then be very careful not to overwrite Vue's accessors with our own wrappers or the property will stop being reactive. We must also make sure that any properties added afterwards (such as computed ones) get instrumented by Vue and trigger any watchers already installed on the model.

I'm honestly not sure I would've figured this out without Codex.


This change is Reviewable

@pkaminski pkaminski requested a review from earlAchromatic June 9, 2026 07:01
@pkaminski

Copy link
Copy Markdown
Member Author

@codex review

Triggered automatically because this PR was opened ready for review or was marked ready for review.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@pkaminski pkaminski changed the title Preserve instrumented Vue accessors when wrapping properties. Keep properties reactive when a model gets instrumented by Vue mid-constructor. Jun 9, 2026
Typically we'd wrap all properties before Vue instruments a model.
However, if the model gets passed into a call while the constructor
is still running, and the call happens to add it to previously-
instrumented object, then Vue will instrument the model early.  We
must then be very careful not to overwrite Vue's accessors with
our own wrappers or the property will stop being reactive!
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.

1 participant