function createVNode(type, props, key, ref, original) {
	// V8 seems to be better at detecting type shapes if the object is allocated from the same call site
	// Do not inline into createElement and coerceToVNode!
	/** @type {import('./internal').VNode} */
	const vnode = {
		type,
		props,
		key,
		ref,
		_children: NULL,
		_parent: NULL,
		_depth: 0,
		_dom: NULL,
		_component: NULL,
		constructor: UNDEFINED,
		_original: original == NULL ? ++vnodeId : original,
		_index: -1,
		_flags: 0
	};

	// Only invoke the vnode hook if this was *not* a direct copy:
	if (original == NULL && options.vnode != NULL) options.vnode(vnode);

	return vnode;
}
Create a VNode (used internally by Preact)
@param {import('./internal').VNode["type"]} type The node name or Component
Constructor for this virtual node
@param {object | string | number | null} props The properties of this virtual node.
If this virtual node represents a text node, this is the text of the node (string or number).
@param {string | number | null} key The key for this virtual node, used when
diffing it against its children
@param {import('./internal').VNode["ref"]} ref The ref property that will
receive a reference to its created child
@returns {import('./internal').VNode}