reactive-di
Advanced tools
Comparing version 5.0.1 to 5.0.2
@@ -5,2 +5,7 @@ # Change Log | ||
<a name="5.0.2"></a> | ||
## [5.0.2](https://github.com/zerkalica/reactive-di/compare/v5.0.1...v5.0.2) (2017-11-04) | ||
<a name="5.0.1"></a> | ||
@@ -7,0 +12,0 @@ ## [5.0.1](https://github.com/zerkalica/reactive-di/compare/v5.0.0...v5.0.1) (2017-11-04) |
@@ -153,2 +153,5 @@ var ATOM_FORCE_NONE = 0; | ||
var _class2; | ||
var _temp; | ||
var depId = 0; | ||
@@ -162,3 +165,3 @@ var rdiId = Symbol('rdi_id'); | ||
var Injector = function () { | ||
var Injector = (_temp = _class2 = function () { | ||
function Injector(items, sheetProcessor, state, displayName, instance, cache) { | ||
@@ -432,3 +435,3 @@ this._resolved = false; | ||
return Injector; | ||
}(); | ||
}(), _class2.parentContext = undefined, _temp); | ||
@@ -464,83 +467,2 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { | ||
var parentContext = undefined; | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = parentContext; | ||
} | ||
if (parentContext !== undefined) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (parentContext !== undefined && id) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function createReactWrapper(BaseComponent, defaultFromError, detached) { | ||
@@ -608,9 +530,9 @@ var _class; | ||
var render = this._render; | ||
var prevContext = parentContext; | ||
parentContext = this._injector; | ||
var prevContext = Injector.parentContext; | ||
Injector.parentContext = this._injector; | ||
try { | ||
data = parentContext.invokeWithProps(render, this.props, this._propsChanged); | ||
data = this._injector.invokeWithProps(render, this.props, this._propsChanged); | ||
} catch (error) { | ||
data = parentContext.invokeWithProps(render.onError || defaultFromError, { | ||
data = this._injector.invokeWithProps(render.onError || defaultFromError, { | ||
error: error | ||
@@ -621,3 +543,3 @@ }); | ||
parentContext = prevContext; | ||
Injector.parentContext = prevContext; | ||
@@ -662,2 +584,83 @@ if (!this._propsChanged) { | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: Injector.parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = Injector.parentContext; | ||
} | ||
if (Injector.parentContext !== undefined) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (Injector.parentContext !== undefined && id) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function dn(fn) { | ||
@@ -783,7 +786,7 @@ if (!fn) return 'null'; | ||
var reactions = new WeakMap(); | ||
proto[name + '()'] = function getAtom() { | ||
return reactions.get(this); | ||
}; | ||
Object.defineProperty(proto, name + "()", { | ||
get: function get() { | ||
return reactions.get(this); | ||
} | ||
}); | ||
proto[name + '$'] = value; | ||
@@ -790,0 +793,0 @@ return { |
@@ -157,2 +157,5 @@ 'use strict'; | ||
var _class2; | ||
var _temp; | ||
var depId = 0; | ||
@@ -166,3 +169,3 @@ var rdiId = Symbol('rdi_id'); | ||
var Injector = function () { | ||
var Injector = (_temp = _class2 = function () { | ||
function Injector(items, sheetProcessor, state, displayName, instance, cache) { | ||
@@ -436,3 +439,3 @@ this._resolved = false; | ||
return Injector; | ||
}(); | ||
}(), _class2.parentContext = undefined, _temp); | ||
@@ -468,83 +471,2 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { | ||
var parentContext = undefined; | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = parentContext; | ||
} | ||
if (parentContext !== undefined) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (parentContext !== undefined && id) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function createReactWrapper(BaseComponent, defaultFromError, detached) { | ||
@@ -612,9 +534,9 @@ var _class; | ||
var render = this._render; | ||
var prevContext = parentContext; | ||
parentContext = this._injector; | ||
var prevContext = Injector.parentContext; | ||
Injector.parentContext = this._injector; | ||
try { | ||
data = parentContext.invokeWithProps(render, this.props, this._propsChanged); | ||
data = this._injector.invokeWithProps(render, this.props, this._propsChanged); | ||
} catch (error) { | ||
data = parentContext.invokeWithProps(render.onError || defaultFromError, { | ||
data = this._injector.invokeWithProps(render.onError || defaultFromError, { | ||
error: error | ||
@@ -625,3 +547,3 @@ }); | ||
parentContext = prevContext; | ||
Injector.parentContext = prevContext; | ||
@@ -666,2 +588,83 @@ if (!this._propsChanged) { | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: Injector.parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = Injector.parentContext; | ||
} | ||
if (Injector.parentContext !== undefined) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (Injector.parentContext !== undefined && id) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function dn(fn) { | ||
@@ -787,7 +790,7 @@ if (!fn) return 'null'; | ||
var reactions = new WeakMap(); | ||
proto[name + '()'] = function getAtom() { | ||
return reactions.get(this); | ||
}; | ||
Object.defineProperty(proto, name + "()", { | ||
get: function get() { | ||
return reactions.get(this); | ||
} | ||
}); | ||
proto[name + '$'] = value; | ||
@@ -794,0 +797,0 @@ return { |
@@ -159,2 +159,5 @@ (function (global, factory) { | ||
var _class2; | ||
var _temp; | ||
var depId = 0; | ||
@@ -168,3 +171,3 @@ var rdiId = Symbol('rdi_id'); | ||
var Injector = function () { | ||
var Injector = (_temp = _class2 = function () { | ||
function Injector(items, sheetProcessor, state, displayName, instance, cache) { | ||
@@ -438,3 +441,3 @@ this._resolved = false; | ||
return Injector; | ||
}(); | ||
}(), _class2.parentContext = undefined, _temp); | ||
@@ -470,83 +473,2 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { | ||
var parentContext = undefined; | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = parentContext; | ||
} | ||
if (parentContext !== undefined) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (parentContext !== undefined && id) { | ||
newEl = parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function createReactWrapper(BaseComponent, defaultFromError, detached) { | ||
@@ -614,9 +536,9 @@ var _class; | ||
var render = this._render; | ||
var prevContext = parentContext; | ||
parentContext = this._injector; | ||
var prevContext = Injector.parentContext; | ||
Injector.parentContext = this._injector; | ||
try { | ||
data = parentContext.invokeWithProps(render, this.props, this._propsChanged); | ||
data = this._injector.invokeWithProps(render, this.props, this._propsChanged); | ||
} catch (error) { | ||
data = parentContext.invokeWithProps(render.onError || defaultFromError, { | ||
data = this._injector.invokeWithProps(render.onError || defaultFromError, { | ||
error: error | ||
@@ -627,3 +549,3 @@ }); | ||
parentContext = prevContext; | ||
Injector.parentContext = prevContext; | ||
@@ -668,2 +590,83 @@ if (!this._propsChanged) { | ||
function createCreateElement(atomize, createElement) { | ||
function lomCreateElement() { | ||
var el = arguments[0]; | ||
var attrs = arguments[1]; | ||
var newEl = void 0; | ||
var isAtomic = typeof el === 'function' && el.constructor.render === undefined; | ||
var id = attrs ? attrs.id : undefined; | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = { | ||
__lom_ctx: Injector.parentContext | ||
}; | ||
} else { | ||
attrs.__lom_ctx = Injector.parentContext; | ||
} | ||
if (Injector.parentContext !== undefined) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el); | ||
} | ||
newEl = el.__lom; | ||
} else { | ||
if (Injector.parentContext !== undefined && id) { | ||
newEl = Injector.parentContext.alias(el, id); | ||
if (newEl === null) return null; | ||
if (newEl !== undefined) el = newEl; | ||
} | ||
newEl = el; | ||
} | ||
switch (arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs); | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]); | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]); | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]); | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]); | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]); | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments); | ||
} | ||
var args = [newEl, attrs]; | ||
for (var i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]); | ||
} | ||
return createElement.apply(null, args); | ||
} | ||
} | ||
return lomCreateElement; | ||
} | ||
function dn(fn) { | ||
@@ -789,7 +792,7 @@ if (!fn) return 'null'; | ||
var reactions = new WeakMap(); | ||
proto[name + '()'] = function getAtom() { | ||
return reactions.get(this); | ||
}; | ||
Object.defineProperty(proto, name + "()", { | ||
get: function get() { | ||
return reactions.get(this); | ||
} | ||
}); | ||
proto[name + '$'] = value; | ||
@@ -796,0 +799,0 @@ return { |
{ | ||
"name": "reactive-di", | ||
"version": "5.0.1", | ||
"version": "5.0.2", | ||
"description": "Reactive dependency injection", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
@@ -9,3 +9,3 @@ # Reactive DI [](http://travis-ci.org/zerkalica/reactive-di) | ||
* With this DI you can forget about [HOC](https://reactjs.org/docs/higher-order-components.html) and any decorators around component. | ||
* Atomatic isolated error and loading status handling for each component. Error exception in component breaks only this component. | ||
* Atomatic isolated error and loading status handling for each component. | ||
* ReactiveDI helps you to follow [open/closed principle](https://en.wikipedia.org/wiki/Open/closed_principle) via slots (like [vue slots](https://vuejs.org/v2/guide/components.html#Content-Distribution-with-Slots)). | ||
@@ -18,4 +18,10 @@ * [Hierarchical Dependency Injectors](https://angular.io/guide/hierarchical-dependency-injection). | ||
[example source](https://github.com/zerkalica/rdi-examples), [demo](http://zerkalica.github.io/rdi-examples/), [todomvc benchmark](http://mol.js.org/app/bench/#bench=https%3A%2F%2Fzerkalica.github.io%2Ftodomvc%2Fbenchmark%2F/sample=preact-lom-rdi~preact-raw~preact-mobx) | ||
## Links | ||
* [example source](https://github.com/zerkalica/rdi-examples), [demo](http://zerkalica.github.io/rdi-examples/) | ||
* [todomvc benchmark](http://mol.js.org/app/bench/#bench=https%3A%2F%2Fzerkalica.github.io%2Futb%2Fbenchmark%2F/sample=preact-lom_atom~preact-mobx~preact-raw~preact-reactive-di) | ||
* [fiddle](https://jsfiddle.net/zerkalica/jxo6hqf8/) example with loading and error handling demo. | ||
## TOC | ||
<!-- TOC depthFrom:2 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 --> | ||
@@ -157,3 +163,3 @@ | ||
import {Reaction} from 'mobx' | ||
import {createReactWrapper, createCreateElement, creteMobxDetached} from 'reactive-di' | ||
import {createReactWrapper, createCreateElement, createMobxDetached} from 'reactive-di' | ||
import {createElement, Component} from 'react' | ||
@@ -183,3 +189,3 @@ import {render} from 'react-dom' | ||
ErrorableView, | ||
creteMobxDetached(Reaction) | ||
createMobxDetached(Reaction) | ||
), | ||
@@ -684,3 +690,3 @@ createElement | ||
Not ReactiveDi part, in state management libraries you can monitor state changes and user actions. | ||
Not ReactiveDI part, in state management libraries you can monitor state changes and user actions. | ||
@@ -687,0 +693,0 @@ Console logger in lom_atom: |
@@ -78,5 +78,7 @@ // @flow | ||
proto[name + '()'] = function getAtom() { | ||
return reactions.get(this) | ||
} | ||
Object.defineProperty(proto, `${name}()`, { | ||
get() { | ||
return reactions.get(this) | ||
} | ||
}) | ||
proto[name + '$'] = value | ||
@@ -83,0 +85,0 @@ |
@@ -6,81 +6,5 @@ // @flow | ||
import Injector from './Injector' | ||
import type {IFromError, IRenderFn, IReactComponent, IProvideItem, IArg, IPropsWithContext} from './interfaces' | ||
import type {IAtomize, IFromError, IRenderFn, IReactComponent, IProvideItem, IArg, IPropsWithContext} from './interfaces' | ||
import {renderedKey} from './interfaces' | ||
type IAtomize<IElement, State> = ( | ||
render: IRenderFn<IElement, State> | ||
) => Class<IReactComponent<IElement>> | ||
let parentContext: Injector | void = undefined | ||
export function createCreateElement<IElement, State, CreateElement: Function>( | ||
atomize: IAtomize<IElement, State>, | ||
createElement: CreateElement | ||
): CreateElement { | ||
function lomCreateElement() { | ||
let el = arguments[0] | ||
let attrs = arguments[1] | ||
let newEl | ||
const isAtomic = typeof el === 'function' && el.constructor.render === undefined | ||
const id = attrs ? attrs.id : undefined | ||
if (isAtomic) { | ||
if (!attrs) { | ||
attrs = {__lom_ctx: parentContext} | ||
} else { | ||
attrs.__lom_ctx = parentContext | ||
} | ||
if (parentContext !== undefined) { | ||
newEl = parentContext.alias(el, id) | ||
if (newEl === null) return null | ||
if (newEl !== undefined) el = newEl | ||
} | ||
if (el.__lom === undefined) { | ||
el.__lom = atomize(el) | ||
} | ||
newEl = el.__lom | ||
} else { | ||
if (parentContext !== undefined && id) { | ||
newEl = parentContext.alias(el, id) | ||
if (newEl === null) return null | ||
if (newEl !== undefined) el = newEl | ||
} | ||
newEl = el | ||
} | ||
switch(arguments.length) { | ||
case 2: | ||
return createElement(newEl, attrs) | ||
case 3: | ||
return createElement(newEl, attrs, arguments[2]) | ||
case 4: | ||
return createElement(newEl, attrs, arguments[2], arguments[3]) | ||
case 5: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4]) | ||
case 6: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], arguments[4], arguments[5]) | ||
case 7: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], | ||
arguments[4], arguments[5], arguments[6]) | ||
case 8: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], | ||
arguments[4], arguments[5], arguments[6], arguments[7]) | ||
case 9: | ||
return createElement(newEl, attrs, arguments[2], arguments[3], | ||
arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]) | ||
default: | ||
if (isAtomic === false) { | ||
return createElement.apply(null, arguments) | ||
} | ||
const args = [newEl, attrs] | ||
for (let i = 2, l = arguments.length; i < l; i++) { | ||
args.push(arguments[i]) | ||
} | ||
return createElement.apply(null, args) | ||
} | ||
} | ||
return (lomCreateElement: any) | ||
} | ||
export default function createReactWrapper<IElement>( | ||
@@ -161,11 +85,11 @@ BaseComponent: Class<*>, | ||
const prevContext = parentContext | ||
parentContext = this._injector | ||
const prevContext = Injector.parentContext | ||
Injector.parentContext = this._injector | ||
try { | ||
data = parentContext.invokeWithProps(render, this.props, this._propsChanged) | ||
data = this._injector.invokeWithProps(render, this.props, this._propsChanged) | ||
} catch (error) { | ||
data = parentContext.invokeWithProps(render.onError || defaultFromError, {error}) | ||
data = this._injector.invokeWithProps(render.onError || defaultFromError, {error}) | ||
error[renderedKey] = true | ||
} | ||
parentContext = prevContext | ||
Injector.parentContext = prevContext | ||
@@ -172,0 +96,0 @@ if (!this._propsChanged) { |
// @flow | ||
export {default as createReactWrapper, createCreateElement} from './createReactWrapper' | ||
export {default as createReactWrapper} from './createReactWrapper' | ||
export {default as createCreateElement} from './createCreateElement' | ||
export {default as Injector} from './Injector' | ||
@@ -5,0 +6,0 @@ export {default as cloneComponent} from './cloneComponent' |
@@ -27,2 +27,4 @@ // @flow | ||
static parentContext: Injector | void = undefined | ||
_cache: ICache | ||
@@ -29,0 +31,0 @@ _state: IState | void |
@@ -71,1 +71,5 @@ // @flow | ||
} | ||
export type IAtomize<IElement, State> = ( | ||
render: IRenderFn<IElement, State> | ||
) => Class<IReactComponent<IElement>> |
@@ -31,3 +31,3 @@ // @flow | ||
_sheetProcessor: IProcessor | ||
_cache: Map<string, IDisposableSheet<*>> = new Map() | ||
_cache: Map<string, DisposableSheet<any>> = new Map() | ||
@@ -39,7 +39,7 @@ constructor(sheetProcessor: IProcessor) { | ||
sheet<V: Object>(key: string, css: V, memoized: boolean): IDisposableSheet<V> { | ||
let result: ?IDisposableSheet<V> = memoized ? null : this._cache.get(key) | ||
let result: ?DisposableSheet<V> = memoized ? null : this._cache.get(key) | ||
if (!result) { | ||
const sheet: ISheet<V> = this._sheetProcessor.createStyleSheet(css) | ||
sheet.attach() | ||
result = (new DisposableSheet(key, sheet, this): Object) | ||
result = (new DisposableSheet(key, sheet, this)) | ||
if (!memoized) { | ||
@@ -50,3 +50,3 @@ this._cache.set(key, result) | ||
return result | ||
return (result: Object) | ||
} | ||
@@ -53,0 +53,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
253424
26
2605
754