Test demonstrates the issue.
connection.id requires props to be an object, otherwise it will throw. This is correct behavior, however it is not correct for hydrate to assume new DefineMap will have a property passed to it. DefineMap does not require a property to be passed, so hydrate should make a check before making any calls to functions that require props.
I went one step beyond and used can-reflect.isMapLike to ensure that the props was an object that an id could potentially be extracted from (this excludes nullish values and primitives).
Test demonstrates the issue. connection.id requires props to be an object, otherwise it will throw. This is correct behavior, however it is not correct for hydrate to assume new DefineMap will have a property passed to it. DefineMap does not require a property to be passed, so hydrate should make a check before making any calls to functions that require props.