From 38acabfa6089ab8ac469c12b5f55022fb96935e5 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 23 Aug 2021 16:46:06 -0300 Subject: added web vendors --- preact/jsx-runtime/src/index.js | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 preact/jsx-runtime/src/index.js (limited to 'preact/jsx-runtime/src/index.js') diff --git a/preact/jsx-runtime/src/index.js b/preact/jsx-runtime/src/index.js new file mode 100644 index 0000000..82c7b33 --- /dev/null +++ b/preact/jsx-runtime/src/index.js @@ -0,0 +1,77 @@ +import { options, Fragment } from 'preact'; + +/** @typedef {import('preact').VNode} VNode */ + +let vnodeId = 0; + +/** + * @fileoverview + * This file exports various methods that implement Babel's "automatic" JSX runtime API: + * - jsx(type, props, key) + * - jsxs(type, props, key) + * - jsxDEV(type, props, key, __source, __self) + * + * The implementation of createVNode here is optimized for performance. + * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3 + */ + +/** + * JSX.Element factory used by Babel's {runtime:"automatic"} JSX transform + * @param {VNode['type']} type + * @param {VNode['props']} props + * @param {VNode['key']} [key] + * @param {string} [__source] + * @param {string} [__self] + */ +function createVNode(type, props, key, __source, __self) { + // 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 = {}, + ref, + i; + for (i in props) { + if (i == 'ref') { + ref = props[i]; + } else { + normalizedProps[i] = props[i]; + } + } + + const vnode = { + type, + props: normalizedProps, + key, + ref, + _children: null, + _parent: null, + _depth: 0, + _dom: null, + _nextDom: undefined, + _component: null, + _hydrating: null, + constructor: undefined, + _original: --vnodeId, + __source, + __self + }; + + // If a Component VNode, check for and apply defaultProps. + // Note: `type` is often a String, and can be `undefined` in development. + if (typeof type === 'function' && (ref = type.defaultProps)) { + for (i in ref) + if (typeof normalizedProps[i] === 'undefined') { + normalizedProps[i] = ref[i]; + } + } + + if (options.vnode) options.vnode(vnode); + return vnode; +} + +export { + createVNode as jsx, + createVNode as jsxs, + createVNode as jsxDEV, + Fragment +}; -- cgit v1.2.3