node_modules/preact/compat/src/render.js in isomorfeus-preact-10.6.14 vs node_modules/preact/compat/src/render.js in isomorfeus-preact-10.6.15
- old
+ new
@@ -1,230 +1,229 @@
-import {
- render as preactRender,
- hydrate as preactHydrate,
- options,
- toChildArray,
- Component
-} from 'preact';
-
-export const REACT_ELEMENT_TYPE =
- (typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||
- 0xeac7;
-
-const CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;
-
-const IS_DOM = typeof document !== 'undefined';
-
-// Input types for which onchange should not be converted to oninput.
-// type="file|checkbox|radio", plus "range" in IE11.
-// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches "range")
-const onChangeInputType = type =>
- (typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'
- ? /fil|che|rad/i
- : /fil|che|ra/i
- ).test(type);
-
-// Some libraries like `react-virtualized` explicitly check for this.
-Component.prototype.isReactComponent = {};
-
-// `UNSAFE_*` lifecycle hooks
-// Preact only ever invokes the unprefixed methods.
-// Here we provide a base "fallback" implementation that calls any defined UNSAFE_ prefixed method.
-// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.
-// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.
-// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.
-// See https://github.com/preactjs/preact/issues/1941
-[
- 'componentWillMount',
- 'componentWillReceiveProps',
- 'componentWillUpdate'
-].forEach(key => {
- Object.defineProperty(Component.prototype, key, {
- configurable: true,
- get() {
- return this['UNSAFE_' + key];
- },
- set(v) {
- Object.defineProperty(this, key, {
- configurable: true,
- writable: true,
- value: v
- });
- }
- });
-});
-
-/**
- * Proxy render() since React returns a Component reference.
- * @param {import('./internal').VNode} vnode VNode tree to render
- * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into
- * @param {() => void} [callback] Optional callback that will be called after rendering
- * @returns {import('./internal').Component | null} The root component reference or null
- */
-export function render(vnode, parent, callback) {
- // React destroys any existing DOM nodes, see #1727
- // ...but only on the first render, see #1828
- if (parent._children == null) {
- parent.textContent = '';
- }
-
- preactRender(vnode, parent);
- if (typeof callback == 'function') callback();
-
- return vnode ? vnode._component : null;
-}
-
-export function hydrate(vnode, parent, callback) {
- preactHydrate(vnode, parent);
- if (typeof callback == 'function') callback();
-
- return vnode ? vnode._component : null;
-}
-
-let oldEventHook = options.event;
-options.event = e => {
- if (oldEventHook) e = oldEventHook(e);
- e.persist = empty;
- e.isPropagationStopped = isPropagationStopped;
- e.isDefaultPrevented = isDefaultPrevented;
- return (e.nativeEvent = e);
-};
-
-function empty() {}
-
-function isPropagationStopped() {
- return this.cancelBubble;
-}
-
-function isDefaultPrevented() {
- return this.defaultPrevented;
-}
-
-let classNameDescriptor = {
- configurable: true,
- get() {
- return this.class;
- }
-};
-
-let oldVNodeHook = options.vnode;
-options.vnode = vnode => {
- let type = vnode.type;
- let props = vnode.props;
- let normalizedProps = props;
-
- // only normalize props on Element nodes
- if (typeof type === 'string') {
- const nonCustomElement = type.indexOf('-') === -1;
- normalizedProps = {};
-
- for (let i in props) {
- let value = props[i];
-
- if (IS_DOM && i === 'children' && type === 'noscript') {
- // Emulate React's behavior of not rendering the contents of noscript tags on the client.
- continue;
- }
- else if (i === 'value' && 'defaultValue' in props && value == null) {
- // Skip applying value if it is null/undefined and we already set
- // a default value
- continue;
- } else if (
- i === 'defaultValue' &&
- 'value' in props &&
- props.value == null
- ) {
- // `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.
- // `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.
- i = 'value';
- } else if (i === 'download' && value === true) {
- // Calling `setAttribute` with a truthy value will lead to it being
- // passed as a stringified value, e.g. `download="true"`. React
- // converts it to an empty string instead, otherwise the attribute
- // value will be used as the file name and the file will be called
- // "true" upon downloading it.
- value = '';
- } else if (/ondoubleclick/i.test(i)) {
- i = 'ondblclick';
- } else if (
- /^onchange(textarea|input)/i.test(i + type) &&
- !onChangeInputType(props.type)
- ) {
- i = 'oninput';
- } else if (/^onfocus$/i.test(i)) {
- i = 'onfocusin';
- } else if (/^onblur$/i.test(i)) {
- i = 'onfocusout';
- } else if (/^on(Ani|Tra|Tou|BeforeInp)/.test(i)) {
- i = i.toLowerCase();
- } else if (nonCustomElement && CAMEL_PROPS.test(i)) {
- i = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();
- } else if (value === null) {
- value = undefined;
- }
-
- normalizedProps[i] = value;
- }
-
- // Add support for array select values: <select multiple value={[]} />
- if (
- type == 'select' &&
- normalizedProps.multiple &&
- Array.isArray(normalizedProps.value)
- ) {
- // forEach() always returns undefined, which we abuse here to unset the value prop.
- normalizedProps.value = toChildArray(props.children).forEach(child => {
- child.props.selected =
- normalizedProps.value.indexOf(child.props.value) != -1;
- });
- }
-
- // Adding support for defaultValue in select tag
- if (type == 'select' && normalizedProps.defaultValue != null) {
- normalizedProps.value = toChildArray(props.children).forEach(child => {
- if (normalizedProps.multiple) {
- child.props.selected =
- normalizedProps.defaultValue.indexOf(child.props.value) != -1;
- } else {
- child.props.selected =
- normalizedProps.defaultValue == child.props.value;
- }
- });
- }
-
- vnode.props = normalizedProps;
-
- if (props.class != props.className) {
- classNameDescriptor.enumerable = 'className' in props;
- if (props.className != null) normalizedProps.class = props.className;
- Object.defineProperty(normalizedProps, 'className', classNameDescriptor);
- }
- }
-
- vnode.$$typeof = REACT_ELEMENT_TYPE;
-
- if (oldVNodeHook) oldVNodeHook(vnode);
-};
-
-// Only needed for react-relay
-let currentComponent;
-const oldBeforeRender = options._render;
-options._render = function(vnode) {
- if (oldBeforeRender) {
- oldBeforeRender(vnode);
- }
- currentComponent = vnode._component;
-};
-
-// This is a very very private internal function for React it
-// is used to sort-of do runtime dependency injection. So far
-// only `react-relay` makes use of it. It uses it to read the
-// context value.
-export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
- ReactCurrentDispatcher: {
- current: {
- readContext(context) {
- return currentComponent._globalContext[context._id].props.value;
- }
- }
- }
-};
+import {
+ render as preactRender,
+ hydrate as preactHydrate,
+ options,
+ toChildArray,
+ Component
+} from 'preact';
+
+export const REACT_ELEMENT_TYPE =
+ (typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||
+ 0xeac7;
+
+const CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;
+
+const IS_DOM = typeof document !== 'undefined';
+
+// Input types for which onchange should not be converted to oninput.
+// type="file|checkbox|radio", plus "range" in IE11.
+// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches "range")
+const onChangeInputType = type =>
+ (typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'
+ ? /fil|che|rad/i
+ : /fil|che|ra/i
+ ).test(type);
+
+// Some libraries like `react-virtualized` explicitly check for this.
+Component.prototype.isReactComponent = {};
+
+// `UNSAFE_*` lifecycle hooks
+// Preact only ever invokes the unprefixed methods.
+// Here we provide a base "fallback" implementation that calls any defined UNSAFE_ prefixed method.
+// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.
+// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.
+// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.
+// See https://github.com/preactjs/preact/issues/1941
+[
+ 'componentWillMount',
+ 'componentWillReceiveProps',
+ 'componentWillUpdate'
+].forEach(key => {
+ Object.defineProperty(Component.prototype, key, {
+ configurable: true,
+ get() {
+ return this['UNSAFE_' + key];
+ },
+ set(v) {
+ Object.defineProperty(this, key, {
+ configurable: true,
+ writable: true,
+ value: v
+ });
+ }
+ });
+});
+
+/**
+ * Proxy render() since React returns a Component reference.
+ * @param {import('./internal').VNode} vnode VNode tree to render
+ * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into
+ * @param {() => void} [callback] Optional callback that will be called after rendering
+ * @returns {import('./internal').Component | null} The root component reference or null
+ */
+export function render(vnode, parent, callback) {
+ // React destroys any existing DOM nodes, see #1727
+ // ...but only on the first render, see #1828
+ if (parent._children == null) {
+ parent.textContent = '';
+ }
+
+ preactRender(vnode, parent);
+ if (typeof callback == 'function') callback();
+
+ return vnode ? vnode._component : null;
+}
+
+export function hydrate(vnode, parent, callback) {
+ preactHydrate(vnode, parent);
+ if (typeof callback == 'function') callback();
+
+ return vnode ? vnode._component : null;
+}
+
+let oldEventHook = options.event;
+options.event = e => {
+ if (oldEventHook) e = oldEventHook(e);
+ e.persist = empty;
+ e.isPropagationStopped = isPropagationStopped;
+ e.isDefaultPrevented = isDefaultPrevented;
+ return (e.nativeEvent = e);
+};
+
+function empty() {}
+
+function isPropagationStopped() {
+ return this.cancelBubble;
+}
+
+function isDefaultPrevented() {
+ return this.defaultPrevented;
+}
+
+let classNameDescriptor = {
+ configurable: true,
+ get() {
+ return this.class;
+ }
+};
+
+let oldVNodeHook = options.vnode;
+options.vnode = vnode => {
+ let type = vnode.type;
+ let props = vnode.props;
+ let normalizedProps = props;
+
+ // only normalize props on Element nodes
+ if (typeof type === 'string') {
+ const nonCustomElement = type.indexOf('-') === -1;
+ normalizedProps = {};
+
+ for (let i in props) {
+ let value = props[i];
+
+ if (IS_DOM && i === 'children' && type === 'noscript') {
+ // Emulate React's behavior of not rendering the contents of noscript tags on the client.
+ continue;
+ } else if (i === 'value' && 'defaultValue' in props && value == null) {
+ // Skip applying value if it is null/undefined and we already set
+ // a default value
+ continue;
+ } else if (
+ i === 'defaultValue' &&
+ 'value' in props &&
+ props.value == null
+ ) {
+ // `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.
+ // `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.
+ i = 'value';
+ } else if (i === 'download' && value === true) {
+ // Calling `setAttribute` with a truthy value will lead to it being
+ // passed as a stringified value, e.g. `download="true"`. React
+ // converts it to an empty string instead, otherwise the attribute
+ // value will be used as the file name and the file will be called
+ // "true" upon downloading it.
+ value = '';
+ } else if (/ondoubleclick/i.test(i)) {
+ i = 'ondblclick';
+ } else if (
+ /^onchange(textarea|input)/i.test(i + type) &&
+ !onChangeInputType(props.type)
+ ) {
+ i = 'oninput';
+ } else if (/^onfocus$/i.test(i)) {
+ i = 'onfocusin';
+ } else if (/^onblur$/i.test(i)) {
+ i = 'onfocusout';
+ } else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {
+ i = i.toLowerCase();
+ } else if (nonCustomElement && CAMEL_PROPS.test(i)) {
+ i = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();
+ } else if (value === null) {
+ value = undefined;
+ }
+
+ normalizedProps[i] = value;
+ }
+
+ // Add support for array select values: <select multiple value={[]} />
+ if (
+ type == 'select' &&
+ normalizedProps.multiple &&
+ Array.isArray(normalizedProps.value)
+ ) {
+ // forEach() always returns undefined, which we abuse here to unset the value prop.
+ normalizedProps.value = toChildArray(props.children).forEach(child => {
+ child.props.selected =
+ normalizedProps.value.indexOf(child.props.value) != -1;
+ });
+ }
+
+ // Adding support for defaultValue in select tag
+ if (type == 'select' && normalizedProps.defaultValue != null) {
+ normalizedProps.value = toChildArray(props.children).forEach(child => {
+ if (normalizedProps.multiple) {
+ child.props.selected =
+ normalizedProps.defaultValue.indexOf(child.props.value) != -1;
+ } else {
+ child.props.selected =
+ normalizedProps.defaultValue == child.props.value;
+ }
+ });
+ }
+
+ vnode.props = normalizedProps;
+
+ if (props.class != props.className) {
+ classNameDescriptor.enumerable = 'className' in props;
+ if (props.className != null) normalizedProps.class = props.className;
+ Object.defineProperty(normalizedProps, 'className', classNameDescriptor);
+ }
+ }
+
+ vnode.$$typeof = REACT_ELEMENT_TYPE;
+
+ if (oldVNodeHook) oldVNodeHook(vnode);
+};
+
+// Only needed for react-relay
+let currentComponent;
+const oldBeforeRender = options._render;
+options._render = function(vnode) {
+ if (oldBeforeRender) {
+ oldBeforeRender(vnode);
+ }
+ currentComponent = vnode._component;
+};
+
+// This is a very very private internal function for React it
+// is used to sort-of do runtime dependency injection. So far
+// only `react-relay` makes use of it. It uses it to read the
+// context value.
+export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
+ ReactCurrentDispatcher: {
+ current: {
+ readContext(context) {
+ return currentComponent._globalContext[context._id].props.value;
+ }
+ }
+ }
+};