Conversion doesn't check types
andy-zhou opened this issue · 1 comments
Please save me some time and use the following template. In 90% of all issues I can't reproduce the problem because I don't know what exactly you are doing, in which environment, or which y-* version is responsible. Just use the following template even if you think the problem is obvious.
Checklist
- Are you reporting a bug? Use github issues for bug reports and feature requests. For general questions, please use https://discuss.yjs.dev/
- Try to report your issue in the correct repository. Yjs consists of many modules. When in doubt, report it to https://github.com/yjs/yjs/issues/
Describe the bug
A clear and concise description of what the bug is.
When converting from a Prosemirror Node to a YXmlFragment, y-prosemirror
doesn't check that attributes it sets are actually strings.
const type = new Y.XmlElement(node.type.name)
for (const key in node.attrs) {
const val = node.attrs[key]
if (val !== null && key !== 'ychange') {
type.setAttribute(key, val)[Kevin Jahns, 2 years ago: • revert toms refactor](https://sourcegraph.com/github.com/yjs/y-prosemirror/-/commit/e39c91e45e113220b5d66311a24c9397b7af0a25)
}
}
This is problematic because a Prosemirror Node can have a non-string attribute, such as a number
. Using YXmlElement.getElement(...)
can therefore return a non-string which claims to be a string.
To Reproduce
Steps to reproduce the behavior:
- Go to '...'
- Click on '....'
- Open console
- See error
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment Information
- Browser / Node.js [e.g. Chrome, Firefox, Node.js]
- Yjs version and the versions of the y-* modules you are using [e.g. yjs v13.0.1, y-webrtc v1.2.1]. Use
npm ls yjs
to find out the exact version you are using.
Additional context
Add any other context about the problem here.
Ping on this. I think there's a bunch of options to fix this, but not sure how you think about backwards compatibility.