Comparing version 1.0.3 to 1.0.5
@@ -5,2 +5,12 @@ # Change Log | ||
<a name="1.0.5"></a> | ||
## [1.0.5](https://github.com/zerkalica/lom_atom/compare/v1.0.4...v1.0.5) (2018-03-15) | ||
<a name="1.0.4"></a> | ||
## [1.0.4](https://github.com/zerkalica/lom_atom/compare/v1.0.3...v1.0.4) (2018-03-15) | ||
<a name="1.0.3"></a> | ||
@@ -7,0 +17,0 @@ ## [1.0.3](https://github.com/zerkalica/lom_atom/compare/v1.0.2...v1.0.3) (2018-03-09) |
@@ -1,14 +0,18 @@ | ||
var AtomizedComponent = | ||
function _inheritsLoose(subClass, superClass) { | ||
subClass.prototype = Object.create(superClass.prototype); | ||
subClass.prototype.constructor = subClass; | ||
subClass.__proto__ = superClass; | ||
} | ||
var ObserverComponent = | ||
/*#__PURE__*/ | ||
function () { | ||
function AtomizedComponent() {} | ||
function ObserverComponent() {} | ||
var _proto = AtomizedComponent.prototype; | ||
var _proto = ObserverComponent.prototype; | ||
_proto.componentWillMount = function componentWillMount() { | ||
var props = this.props; | ||
this._lastData = null; | ||
this._lastError = null; | ||
if (this.__componentWillMount) this.__componentWillMount(); | ||
this.__atom = new AtomizedComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
this.__atom = new ObserverComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
}; | ||
@@ -55,2 +59,33 @@ | ||
this.__atom = null; | ||
}; | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
return this.__render(this.props, this._getContext(this.constructor, propsChanged)); | ||
}; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return ObserverComponent; | ||
}(); | ||
var CatchableComponent = | ||
/*#__PURE__*/ | ||
function (_ObserverComponent) { | ||
_inheritsLoose(CatchableComponent, _ObserverComponent); | ||
function CatchableComponent() { | ||
return _ObserverComponent.apply(this, arguments) || this; | ||
} | ||
var _proto = CatchableComponent.prototype; | ||
_proto.componentWillUnmount = function componentWillUnmount() { | ||
_ObserverComponent.prototype.componentWillMount.call(this); | ||
this._lastData = null; | ||
@@ -63,3 +98,3 @@ this._lastError = null; | ||
this.__componentDidCatch(error, init); | ||
} else { | ||
} else if (this._renderError) { | ||
this._lastError = error; | ||
@@ -70,6 +105,2 @@ this.forceUpdate(); | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
@@ -99,15 +130,20 @@ var data = null; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return CatchableComponent; | ||
}(ObserverComponent); | ||
return AtomizedComponent; | ||
}(); | ||
function getPropertyNamesDeep(proto) { | ||
var next = proto; | ||
var dest = []; | ||
function mergeKeys(src, dest) { | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
do { | ||
var src = Object.getOwnPropertyNames(next); | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (key !== 'constructor' && dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
next = Object.getPrototypeOf(next); | ||
} while (next && next.constructor !== Object); | ||
return dest; | ||
@@ -120,16 +156,8 @@ } | ||
BaseComponent = _ref.BaseComponent, | ||
MixinComponent = _ref.MixinComponent; | ||
AtomizedComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || AtomizedComponent).prototype; | ||
replacement._renderError = renderError; | ||
var keys = Object.getOwnPropertyNames(AtomizedComponent.prototype); | ||
if (replacement !== AtomizedComponent.prototype) { | ||
mergeKeys(Object.getOwnPropertyNames(replacement), keys); | ||
} | ||
var replacementKeys = keys.filter(function (prop) { | ||
return prop !== 'constructor'; | ||
}); | ||
var names = new Map(); | ||
MixinComponent = _ref.MixinComponent, | ||
normalizeClass = _ref.normalizeClass; | ||
ObserverComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || (renderError ? CatchableComponent : ObserverComponent)).prototype; | ||
if (renderError && !replacement._renderError) replacement._renderError = renderError; | ||
var replacementKeys = getPropertyNamesDeep(replacement); | ||
return function reactConnect(Parent) { | ||
@@ -159,12 +187,2 @@ if (Parent.isConnected) throw new Error((Parent.displayName || Parent.name) + " already connected"); | ||
var prefix = names.get(cls.displayName); | ||
if (prefix !== undefined) { | ||
prefix++; | ||
names.set(cls.displayName, prefix); | ||
cls.displayName = cls.displayName + prefix; | ||
} else { | ||
names.set(cls.displayName, 0); | ||
} | ||
var target = cls.prototype; | ||
@@ -178,7 +196,7 @@ | ||
return cls; | ||
return normalizeClass ? normalizeClass(cls) : cls; | ||
}; | ||
} | ||
export { createConnect, AtomizedComponent }; | ||
export { createConnect, ObserverComponent, CatchableComponent }; | ||
//# sourceMappingURL=urc.es.js.map |
113
dist/urc.js
@@ -5,15 +5,19 @@ 'use strict'; | ||
var AtomizedComponent = | ||
function _inheritsLoose(subClass, superClass) { | ||
subClass.prototype = Object.create(superClass.prototype); | ||
subClass.prototype.constructor = subClass; | ||
subClass.__proto__ = superClass; | ||
} | ||
var ObserverComponent = | ||
/*#__PURE__*/ | ||
function () { | ||
function AtomizedComponent() {} | ||
function ObserverComponent() {} | ||
var _proto = AtomizedComponent.prototype; | ||
var _proto = ObserverComponent.prototype; | ||
_proto.componentWillMount = function componentWillMount() { | ||
var props = this.props; | ||
this._lastData = null; | ||
this._lastError = null; | ||
if (this.__componentWillMount) this.__componentWillMount(); | ||
this.__atom = new AtomizedComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
this.__atom = new ObserverComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
}; | ||
@@ -60,2 +64,33 @@ | ||
this.__atom = null; | ||
}; | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
return this.__render(this.props, this._getContext(this.constructor, propsChanged)); | ||
}; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return ObserverComponent; | ||
}(); | ||
var CatchableComponent = | ||
/*#__PURE__*/ | ||
function (_ObserverComponent) { | ||
_inheritsLoose(CatchableComponent, _ObserverComponent); | ||
function CatchableComponent() { | ||
return _ObserverComponent.apply(this, arguments) || this; | ||
} | ||
var _proto = CatchableComponent.prototype; | ||
_proto.componentWillUnmount = function componentWillUnmount() { | ||
_ObserverComponent.prototype.componentWillMount.call(this); | ||
this._lastData = null; | ||
@@ -68,3 +103,3 @@ this._lastError = null; | ||
this.__componentDidCatch(error, init); | ||
} else { | ||
} else if (this._renderError) { | ||
this._lastError = error; | ||
@@ -75,6 +110,2 @@ this.forceUpdate(); | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
@@ -104,15 +135,20 @@ var data = null; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return CatchableComponent; | ||
}(ObserverComponent); | ||
return AtomizedComponent; | ||
}(); | ||
function getPropertyNamesDeep(proto) { | ||
var next = proto; | ||
var dest = []; | ||
function mergeKeys(src, dest) { | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
do { | ||
var src = Object.getOwnPropertyNames(next); | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (key !== 'constructor' && dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
next = Object.getPrototypeOf(next); | ||
} while (next && next.constructor !== Object); | ||
return dest; | ||
@@ -125,16 +161,8 @@ } | ||
BaseComponent = _ref.BaseComponent, | ||
MixinComponent = _ref.MixinComponent; | ||
AtomizedComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || AtomizedComponent).prototype; | ||
replacement._renderError = renderError; | ||
var keys = Object.getOwnPropertyNames(AtomizedComponent.prototype); | ||
if (replacement !== AtomizedComponent.prototype) { | ||
mergeKeys(Object.getOwnPropertyNames(replacement), keys); | ||
} | ||
var replacementKeys = keys.filter(function (prop) { | ||
return prop !== 'constructor'; | ||
}); | ||
var names = new Map(); | ||
MixinComponent = _ref.MixinComponent, | ||
normalizeClass = _ref.normalizeClass; | ||
ObserverComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || (renderError ? CatchableComponent : ObserverComponent)).prototype; | ||
if (renderError && !replacement._renderError) replacement._renderError = renderError; | ||
var replacementKeys = getPropertyNamesDeep(replacement); | ||
return function reactConnect(Parent) { | ||
@@ -164,12 +192,2 @@ if (Parent.isConnected) throw new Error((Parent.displayName || Parent.name) + " already connected"); | ||
var prefix = names.get(cls.displayName); | ||
if (prefix !== undefined) { | ||
prefix++; | ||
names.set(cls.displayName, prefix); | ||
cls.displayName = cls.displayName + prefix; | ||
} else { | ||
names.set(cls.displayName, 0); | ||
} | ||
var target = cls.prototype; | ||
@@ -183,3 +201,3 @@ | ||
return cls; | ||
return normalizeClass ? normalizeClass(cls) : cls; | ||
}; | ||
@@ -189,3 +207,4 @@ } | ||
exports.createConnect = createConnect; | ||
exports.AtomizedComponent = AtomizedComponent; | ||
exports.ObserverComponent = ObserverComponent; | ||
exports.CatchableComponent = CatchableComponent; | ||
//# sourceMappingURL=urc.js.map |
@@ -7,15 +7,19 @@ (function (global, factory) { | ||
var AtomizedComponent = | ||
function _inheritsLoose(subClass, superClass) { | ||
subClass.prototype = Object.create(superClass.prototype); | ||
subClass.prototype.constructor = subClass; | ||
subClass.__proto__ = superClass; | ||
} | ||
var ObserverComponent = | ||
/*#__PURE__*/ | ||
function () { | ||
function AtomizedComponent() {} | ||
function ObserverComponent() {} | ||
var _proto = AtomizedComponent.prototype; | ||
var _proto = ObserverComponent.prototype; | ||
_proto.componentWillMount = function componentWillMount() { | ||
var props = this.props; | ||
this._lastData = null; | ||
this._lastError = null; | ||
if (this.__componentWillMount) this.__componentWillMount(); | ||
this.__atom = new AtomizedComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
this.__atom = new ObserverComponent.ReactAtom(props && props.id ? props.id : this.constructor.displayName, this); | ||
}; | ||
@@ -62,2 +66,33 @@ | ||
this.__atom = null; | ||
}; | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
return this.__render(this.props, this._getContext(this.constructor, propsChanged)); | ||
}; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return ObserverComponent; | ||
}(); | ||
var CatchableComponent = | ||
/*#__PURE__*/ | ||
function (_ObserverComponent) { | ||
_inheritsLoose(CatchableComponent, _ObserverComponent); | ||
function CatchableComponent() { | ||
return _ObserverComponent.apply(this, arguments) || this; | ||
} | ||
var _proto = CatchableComponent.prototype; | ||
_proto.componentWillUnmount = function componentWillUnmount() { | ||
_ObserverComponent.prototype.componentWillMount.call(this); | ||
this._lastData = null; | ||
@@ -70,3 +105,3 @@ this._lastError = null; | ||
this.__componentDidCatch(error, init); | ||
} else { | ||
} else if (this._renderError) { | ||
this._lastError = error; | ||
@@ -77,6 +112,2 @@ this.forceUpdate(); | ||
_proto._getContext = function _getContext(key, propsChanged) { | ||
return this.context; | ||
}; | ||
_proto.__value = function __value(propsChanged) { | ||
@@ -106,15 +137,20 @@ var data = null; | ||
_proto.render = function render() { | ||
return this.__atom.value(); | ||
}; | ||
return CatchableComponent; | ||
}(ObserverComponent); | ||
return AtomizedComponent; | ||
}(); | ||
function getPropertyNamesDeep(proto) { | ||
var next = proto; | ||
var dest = []; | ||
function mergeKeys(src, dest) { | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
do { | ||
var src = Object.getOwnPropertyNames(next); | ||
for (var i = 0; i < src.length; i++) { | ||
var key = src[i]; | ||
if (key !== 'constructor' && dest.indexOf(key) === -1) dest.push(key); | ||
} | ||
next = Object.getPrototypeOf(next); | ||
} while (next && next.constructor !== Object); | ||
return dest; | ||
@@ -127,16 +163,8 @@ } | ||
BaseComponent = _ref.BaseComponent, | ||
MixinComponent = _ref.MixinComponent; | ||
AtomizedComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || AtomizedComponent).prototype; | ||
replacement._renderError = renderError; | ||
var keys = Object.getOwnPropertyNames(AtomizedComponent.prototype); | ||
if (replacement !== AtomizedComponent.prototype) { | ||
mergeKeys(Object.getOwnPropertyNames(replacement), keys); | ||
} | ||
var replacementKeys = keys.filter(function (prop) { | ||
return prop !== 'constructor'; | ||
}); | ||
var names = new Map(); | ||
MixinComponent = _ref.MixinComponent, | ||
normalizeClass = _ref.normalizeClass; | ||
ObserverComponent.ReactAtom = ReactAtom; | ||
var replacement = (MixinComponent || (renderError ? CatchableComponent : ObserverComponent)).prototype; | ||
if (renderError && !replacement._renderError) replacement._renderError = renderError; | ||
var replacementKeys = getPropertyNamesDeep(replacement); | ||
return function reactConnect(Parent) { | ||
@@ -166,12 +194,2 @@ if (Parent.isConnected) throw new Error((Parent.displayName || Parent.name) + " already connected"); | ||
var prefix = names.get(cls.displayName); | ||
if (prefix !== undefined) { | ||
prefix++; | ||
names.set(cls.displayName, prefix); | ||
cls.displayName = cls.displayName + prefix; | ||
} else { | ||
names.set(cls.displayName, 0); | ||
} | ||
var target = cls.prototype; | ||
@@ -185,3 +203,3 @@ | ||
return cls; | ||
return normalizeClass ? normalizeClass(cls) : cls; | ||
}; | ||
@@ -191,3 +209,4 @@ } | ||
exports.createConnect = createConnect; | ||
exports.AtomizedComponent = AtomizedComponent; | ||
exports.ObserverComponent = ObserverComponent; | ||
exports.CatchableComponent = CatchableComponent; | ||
@@ -194,0 +213,0 @@ Object.defineProperty(exports, '__esModule', { value: true }); |
{ | ||
"name": "urc", | ||
"version": "1.0.3", | ||
"version": "1.0.5", | ||
"description": "Universal react connect decorator builder", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
@@ -66,5 +66,5 @@ # Universal react connect | ||
```js | ||
import {AtomizedComponent, createConnect} from 'urc' | ||
import {ObserverComponent, createConnect} from 'urc' | ||
class MyAtomizedComponent<Props, State, Context, Element> extends AtomizedComponent<Props, State, Context, Element> { | ||
class MyObserverComponent<Props, State, Context, Element> extends ObserverComponent<Props, State, Context, Element> { | ||
static instance: number | ||
@@ -98,3 +98,3 @@ | ||
BaseComponent: React.Component, | ||
MixinComponent: MyAtomizedComponent | ||
MixinComponent: MyObserverComponent | ||
}) | ||
@@ -101,0 +101,0 @@ |
// @flow | ||
import type {IReactAtom, IRenderError, IReactHost} from './interfaces' | ||
import AtomizedComponent from './AtomizedComponent' | ||
import CatchableComponent from './CatchableComponent' | ||
import ObserverComponent from './ObserverComponent' | ||
function mergeKeys(src: string[], dest: string[]): string[] { | ||
for (let i = 0; i < src.length; i++) { | ||
const key = src[i] | ||
if (dest.indexOf(key) === -1) dest.push(key) | ||
} | ||
function getPropertyNamesDeep(proto: Object): string[] { | ||
let next = proto | ||
const dest: string[] = [] | ||
do { | ||
const src = Object.getOwnPropertyNames(next) | ||
for (let i = 0; i < src.length; i++) { | ||
const key = src[i] | ||
if (key !== 'constructor' && dest.indexOf(key) === -1) dest.push(key) | ||
} | ||
next = Object.getPrototypeOf(next) | ||
} while (next && next.constructor !== Object) | ||
return dest | ||
} | ||
export default function createConnect<Element>( | ||
{ReactAtom, renderError, BaseComponent, MixinComponent}: { | ||
export default function createConnect<Element, ComponentClass: Function>( | ||
{ReactAtom, renderError, BaseComponent, MixinComponent, normalizeClass}: { | ||
ReactAtom: Class<IReactAtom<Element>>; | ||
renderError?: IRenderError<Element, *>; | ||
BaseComponent?: Function; | ||
MixinComponent?: Class<IReactHost<Element>> | ||
MixinComponent?: Class<IReactHost<Element>>, | ||
normalizeClass?: (cls: ComponentClass) => ComponentClass | ||
} | ||
) { | ||
AtomizedComponent.ReactAtom = (ReactAtom: Class<IReactAtom<any>>) | ||
const replacement: Object = (MixinComponent || AtomizedComponent).prototype | ||
replacement._renderError = renderError | ||
let keys = Object.getOwnPropertyNames(AtomizedComponent.prototype) | ||
if (replacement !== AtomizedComponent.prototype) { | ||
mergeKeys(Object.getOwnPropertyNames(replacement), keys) | ||
} | ||
ObserverComponent.ReactAtom = (ReactAtom: Class<IReactAtom<any>>) | ||
const replacementKeys: string[] = keys | ||
.filter((prop) => prop !== 'constructor') | ||
const replacement: Object = (MixinComponent || (renderError ? CatchableComponent : ObserverComponent)).prototype | ||
if (renderError && !replacement._renderError) replacement._renderError = renderError | ||
const replacementKeys = getPropertyNamesDeep(replacement) | ||
const names: Map<string, number> = new Map() | ||
return function reactConnect<ComponentClass: Function>( | ||
return function reactConnect( | ||
Parent: ComponentClass | ||
@@ -40,8 +41,8 @@ ): ComponentClass { | ||
let cls = Parent | ||
let cls: ComponentClass = Parent | ||
if (typeof cls.prototype.render !== 'function' && typeof Parent === 'function') { | ||
if (!BaseComponent) throw new Error('Setup createConnect with BaseComponent') | ||
cls = function ConnectedComponent(props, context) { | ||
cls = ((function ConnectedComponent(props, context) { | ||
return BaseComponent.call(this, props, context) || this | ||
} | ||
}: any): ComponentClass) | ||
cls.prototype = Object.create(BaseComponent.prototype) | ||
@@ -54,15 +55,6 @@ cls.prototype.constructor = cls | ||
const key = props[i] | ||
if (!(key in cls)) cls[key] = Parent[key] | ||
if (!(key in (cls: Object))) cls[key] = Parent[key] | ||
} | ||
} | ||
let prefix = names.get(cls.displayName) | ||
if (prefix !== undefined) { | ||
prefix++ | ||
names.set(cls.displayName, prefix) | ||
cls.displayName = cls.displayName + prefix | ||
} else { | ||
names.set(cls.displayName, 0) | ||
} | ||
const target = cls.prototype | ||
@@ -75,4 +67,4 @@ for (let i = 0; i < replacementKeys.length; i++) { | ||
return (cls: any) | ||
return ((normalizeClass ? normalizeClass(cls) : cls): any) | ||
} | ||
} |
@@ -5,2 +5,3 @@ // @flow | ||
export {default as createConnect} from './createConnect' | ||
export {default as AtomizedComponent} from './AtomizedComponent' | ||
export {default as ObserverComponent} from './ObserverComponent' | ||
export {default as CatchableComponent} from './CatchableComponent' |
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
148664
26
1101