Skip to content

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

Merged
pkaminski merged 1 commit into
masterfrom
wrap-observed
Jul 8, 2026
Merged

Keep properties reactive when a model gets instrumented by Vue mid-constructor.#38
pkaminski merged 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!

@earlAchromatic earlAchromatic left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

@earlAchromatic reviewed 10 files and all commit messages, and made 1 comment.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved (waiting on pkaminski).

@pkaminski
pkaminski merged commit 7888b1e into master Jul 8, 2026
4 checks passed
@pkaminski
pkaminski deleted the wrap-observed branch July 8, 2026 04:27
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.

2 participants