function createVNode(type, props, key, isStaticChildren, __source, __self) {
	if (!props) props = {};
	// We'll want to preserve `ref` in props to get rid of the need for
	// forwardRef components in the future, but that should happen via
	// a separate PR.
	let normalizedProps = props,
		ref,
		i;

	if ('ref' in normalizedProps && typeof type != 'function') {
		normalizedProps = {};
		for (i in props) {
			if (i == 'ref') {
				ref = props[i];
			} else {
				normalizedProps[i] = props[i];
			}
		}
	}

	/** @type {import('../../src/internal').VNode & { __source: any; __self: any }} */
	const vnode = {
		type,
		props: normalizedProps,
		key,
		ref,
		_children: null,
		_parent: null,
		_depth: 0,
		_dom: null,
		_component: null,
		constructor: undefined,
		_original: --vnodeId,
		_index: -1,
		_flags: 0,
		__source,
		__self
	};

	if (options.vnode) options.vnode(vnode);
	return vnode;
}
JSX.Element factory used by Babel's {runtime:"automatic"} JSX transform
@param {import('../../src/internal').VNode['type']} type
@param {import('preact').VNode['props']} props
@param {import('preact').VNode['key']} [key]
@param {unknown} [isStaticChildren]
@param {unknown} [__source]
@param {unknown} [__self]