react-decoupler
Advanced tools
Comparing version 0.2.0 to 0.2.1
@@ -146,2 +146,6 @@ (function (global, factory) { | ||
_proto.clearDependencyCache = function clearDependencyCache() { | ||
this._boundLookups = new Map(); | ||
}; | ||
_proto.register = function register(key, service, options) { | ||
@@ -148,0 +152,0 @@ if (options === void 0) { |
@@ -1,2 +0,2 @@ | ||
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],r):r((e=e||self).ReactDecoupler={},e.React,e.PropTypes)}(this,(function(e,r,t){"use strict";function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(){return(n=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e}).apply(this,arguments)}function i(e,r){e.prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r}r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var s=function(e){return e.toString?e.toString():e},c=Symbol("Injector Lookup Symbol"),a=function(){function e(){var e=this;o(this,"_lookup",(function(r){e._deps.has(r),s(r);var t=e._deps.get(r),o=t.service,n=t.options;if(n.withParams){if(!e._boundLookups.has(r)){var i=e._makeDepArgs(n);e._boundLookups.set(r,o.bind.apply(o,[null].concat(i)))}var c=e._boundLookups.get(r);return n.asInstance?new c:c}return n.asInstance?new o:o})),o(this,"_makeDepArgs",(function(r){return Array.isArray(r.withParams)?r.withParams.map((function(r){return"object"==typeof r&&null!=r[c]?e._lookup(r[c]):r})):[]})),this._deps=new Map,this._boundLookups=new Map}e.fromServices=function(r){var t=new e;return Object.keys(r).forEach((function(e){t.register(e,r[e])})),t};var r=e.prototype;return r.register=function(e,r,t){if(void 0===t&&(t={}),this._deps.has(e)&&!t.allowOverwrite)throw new Error("Service key already used: "+s(e));if(t.withParams&&"function"!=typeof r)throw new Error('Cannot use "withParams" option with '+e+" of type "+typeof r+"; must be function or class.");this._deps.set(e,{service:r,options:t})},r.resolve=function(e){var r=this;if(Array.isArray(e))return e.map(this._lookup);if(e&&"object"==typeof e)return Object.entries(e).reduce((function(e,t){var o=t[0];return e[t[1]]=r._lookup(o),e}),{});throw new Error("Unsupported dependency list. Only Arrays and Objects are supported. Got: "+JSON.stringify(e))},e}();function u(e,r){return e(r={exports:{}},r.exports),r.exports | ||
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],r):r((e=e||self).ReactDecoupler={},e.React,e.PropTypes)}(this,(function(e,r,t){"use strict";function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(){return(n=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e}).apply(this,arguments)}function i(e,r){e.prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r}r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var s=function(e){return e.toString?e.toString():e},c=Symbol("Injector Lookup Symbol"),a=function(){function e(){var e=this;o(this,"_lookup",(function(r){e._deps.has(r),s(r);var t=e._deps.get(r),o=t.service,n=t.options;if(n.withParams){if(!e._boundLookups.has(r)){var i=e._makeDepArgs(n);e._boundLookups.set(r,o.bind.apply(o,[null].concat(i)))}var c=e._boundLookups.get(r);return n.asInstance?new c:c}return n.asInstance?new o:o})),o(this,"_makeDepArgs",(function(r){return Array.isArray(r.withParams)?r.withParams.map((function(r){return"object"==typeof r&&null!=r[c]?e._lookup(r[c]):r})):[]})),this._deps=new Map,this._boundLookups=new Map}e.fromServices=function(r){var t=new e;return Object.keys(r).forEach((function(e){t.register(e,r[e])})),t};var r=e.prototype;return r.clearDependencyCache=function(){this._boundLookups=new Map},r.register=function(e,r,t){if(void 0===t&&(t={}),this._deps.has(e)&&!t.allowOverwrite)throw new Error("Service key already used: "+s(e));if(t.withParams&&"function"!=typeof r)throw new Error('Cannot use "withParams" option with '+e+" of type "+typeof r+"; must be function or class.");this._deps.set(e,{service:r,options:t})},r.resolve=function(e){var r=this;if(Array.isArray(e))return e.map(this._lookup);if(e&&"object"==typeof e)return Object.entries(e).reduce((function(e,t){var o=t[0];return e[t[1]]=r._lookup(o),e}),{});throw new Error("Unsupported dependency list. Only Arrays and Objects are supported. Got: "+JSON.stringify(e))},e}();function u(e,r){return e(r={exports:{}},r.exports),r.exports | ||
/** @license React v16.13.1 | ||
@@ -9,3 +9,3 @@ * react-is.production.min.js | ||
* LICENSE file in the root directory of this source tree. | ||
*/}var p="function"==typeof Symbol&&Symbol.for,f=p?Symbol.for("react.element"):60103,y=p?Symbol.for("react.portal"):60106,l=p?Symbol.for("react.fragment"):60107,d=p?Symbol.for("react.strict_mode"):60108,m=p?Symbol.for("react.profiler"):60114,v=p?Symbol.for("react.provider"):60109,b=p?Symbol.for("react.context"):60110,h=p?Symbol.for("react.async_mode"):60111,w=p?Symbol.for("react.concurrent_mode"):60111,S=p?Symbol.for("react.forward_ref"):60112,P=p?Symbol.for("react.suspense"):60113,g=p?Symbol.for("react.suspense_list"):60120,j=p?Symbol.for("react.memo"):60115,O=p?Symbol.for("react.lazy"):60116,$=p?Symbol.for("react.block"):60121,x=p?Symbol.for("react.fundamental"):60117,_=p?Symbol.for("react.responder"):60118,C=p?Symbol.for("react.scope"):60119;function M(e){if("object"==typeof e&&null!==e){var r=e.$$typeof;switch(r){case f:switch(e=e.type){case h:case w:case l:case m:case d:case P:return e;default:switch(e=e&&e.$$typeof){case b:case S:case O:case j:case v:return e;default:return r}}case y:return r}}}function E(e){return M(e)===w}var k={AsyncMode:h,ConcurrentMode:w,ContextConsumer:b,ContextProvider:v,Element:f,ForwardRef:S,Fragment:l,Lazy:O,Memo:j,Portal:y,Profiler:m,StrictMode:d,Suspense:P,isAsyncMode:function(e){return E(e)||M(e)===h},isConcurrentMode:E,isContextConsumer:function(e){return M(e)===b},isContextProvider:function(e){return M(e)===v},isElement:function(e){return"object"==typeof e&&null!==e&&e.$$typeof===f},isForwardRef:function(e){return M(e)===S},isFragment:function(e){return M(e)===l},isLazy:function(e){return M(e)===O},isMemo:function(e){return M(e)===j},isPortal:function(e){return M(e)===y},isProfiler:function(e){return M(e)===m},isStrictMode:function(e){return M(e)===d},isSuspense:function(e){return M(e)===P},isValidElementType:function(e){return"string"==typeof e||"function"==typeof e||e===l||e===w||e===m||e===d||e===P||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===O||e.$$typeof===j||e.$$typeof===v||e.$$typeof===b||e.$$typeof===S||e.$$typeof===x||e.$$typeof===_||e.$$typeof===C||e.$$typeof===$)},typeOf:M},A=u((function(e,r){0})),T=(A.AsyncMode,A.ConcurrentMode,A.ContextConsumer,A.ContextProvider,A.Element,A.ForwardRef,A.Fragment,A.Lazy,A.Memo,A.Portal,A.Profiler,A.StrictMode,A.Suspense,A.isAsyncMode,A.isConcurrentMode,A.isContextConsumer,A.isContextProvider,A.isElement,A.isForwardRef,A.isFragment,A.isLazy,A.isMemo,A.isPortal,A.isProfiler,A.isStrictMode,A.isSuspense,A.isValidElementType,A.typeOf,u((function(e){e.exports=k}))),F={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},L={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},I={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},R={};function D(e){return T.isMemo(e)?I:R[e.$$typeof]||F}R[T.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},R[T.Memo]=I;var N=Object.defineProperty,z=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,V=Object.getOwnPropertyDescriptor,G=Object.getPrototypeOf,H=Object.prototype;var J=function e(r,t,o){if("string"!=typeof t){if(H){var n=G(t);n&&n!==H&&e(r,n,o)}var i=z(t);q&&(i=i.concat(q(t)));for(var s=D(r),c=D(t),a=0;a<i.length;++a){var u=i[a];if(!(L[u]||o&&o[u]||c&&c[u]||s&&s[u])){var p=V(t,u);try{N(r,u,p)}catch(e){}}}}return r},U=r.createContext(),B=function(e){function r(){return e.apply(this,arguments)||this}return i(r,e),r.prototype.render=function(){var e=this.context;if(!e)throw new Error("Must be used inside a InjectorProvider");var r=this.props,t=r.children,o=r.deps;return t(e.resolve(o))},r}(r.Component);o(B,"contextType",U),o(B,"propTypes",{children:t.func.isRequired,deps:t.oneOfType([t.arrayOf(t.String),t.objectOf(t.String)])});var K=function(){if(!r.useContext)throw new Error("Hooks not found on React. Are you using React v16.8 or greater?");var e=r.useContext(U);if(!e)throw new Error("Must be used inside a InjectorProvider");return e};e.InjectServices=B,e.InjectorProvider=function(e){var t=e.services,o=e.injector,n=(e.value,e.children);if(!t&&!o)throw new Error("Must provide services or injector prop to InjectorProvider.");var i=o||a.fromServices(t);return r.createElement(U.Provider,{value:i},n)},e.Lookup=function(e){var r;if(null==e)throw new Error("Lookup() does not support nullish values");return(r={})[c]=e,r},e.ServiceInjector=a,e.useInjector=K,e.useServices=function(e){return K().resolve(e)},e.withServices=function(e){var t=e.displayName||e.name||e.constructor&&e.constructor.name||"Component",s=function(t){function o(){return t.apply(this,arguments)||this}return i(o,t),o.prototype.render=function(){var t=e.dependencies||[],o={};return Array.isArray(t)?o.services=this.context.resolve(t):o=this.context.resolve(t),r.createElement(e,n({},this.props,o))},o}(r.Component);return o(s,"displayName","withServices("+t+")"),o(s,"contextType",U),J(s,e)},Object.defineProperty(e,"__esModule",{value:!0})})); | ||
*/}var p="function"==typeof Symbol&&Symbol.for,f=p?Symbol.for("react.element"):60103,y=p?Symbol.for("react.portal"):60106,l=p?Symbol.for("react.fragment"):60107,d=p?Symbol.for("react.strict_mode"):60108,m=p?Symbol.for("react.profiler"):60114,v=p?Symbol.for("react.provider"):60109,b=p?Symbol.for("react.context"):60110,h=p?Symbol.for("react.async_mode"):60111,w=p?Symbol.for("react.concurrent_mode"):60111,S=p?Symbol.for("react.forward_ref"):60112,P=p?Symbol.for("react.suspense"):60113,g=p?Symbol.for("react.suspense_list"):60120,j=p?Symbol.for("react.memo"):60115,O=p?Symbol.for("react.lazy"):60116,$=p?Symbol.for("react.block"):60121,x=p?Symbol.for("react.fundamental"):60117,_=p?Symbol.for("react.responder"):60118,C=p?Symbol.for("react.scope"):60119;function M(e){if("object"==typeof e&&null!==e){var r=e.$$typeof;switch(r){case f:switch(e=e.type){case h:case w:case l:case m:case d:case P:return e;default:switch(e=e&&e.$$typeof){case b:case S:case O:case j:case v:return e;default:return r}}case y:return r}}}function k(e){return M(e)===w}var E={AsyncMode:h,ConcurrentMode:w,ContextConsumer:b,ContextProvider:v,Element:f,ForwardRef:S,Fragment:l,Lazy:O,Memo:j,Portal:y,Profiler:m,StrictMode:d,Suspense:P,isAsyncMode:function(e){return k(e)||M(e)===h},isConcurrentMode:k,isContextConsumer:function(e){return M(e)===b},isContextProvider:function(e){return M(e)===v},isElement:function(e){return"object"==typeof e&&null!==e&&e.$$typeof===f},isForwardRef:function(e){return M(e)===S},isFragment:function(e){return M(e)===l},isLazy:function(e){return M(e)===O},isMemo:function(e){return M(e)===j},isPortal:function(e){return M(e)===y},isProfiler:function(e){return M(e)===m},isStrictMode:function(e){return M(e)===d},isSuspense:function(e){return M(e)===P},isValidElementType:function(e){return"string"==typeof e||"function"==typeof e||e===l||e===w||e===m||e===d||e===P||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===O||e.$$typeof===j||e.$$typeof===v||e.$$typeof===b||e.$$typeof===S||e.$$typeof===x||e.$$typeof===_||e.$$typeof===C||e.$$typeof===$)},typeOf:M},A=u((function(e,r){0})),T=(A.AsyncMode,A.ConcurrentMode,A.ContextConsumer,A.ContextProvider,A.Element,A.ForwardRef,A.Fragment,A.Lazy,A.Memo,A.Portal,A.Profiler,A.StrictMode,A.Suspense,A.isAsyncMode,A.isConcurrentMode,A.isContextConsumer,A.isContextProvider,A.isElement,A.isForwardRef,A.isFragment,A.isLazy,A.isMemo,A.isPortal,A.isProfiler,A.isStrictMode,A.isSuspense,A.isValidElementType,A.typeOf,u((function(e){e.exports=E}))),L={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},F={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},I={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},R={};function D(e){return T.isMemo(e)?I:R[e.$$typeof]||L}R[T.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},R[T.Memo]=I;var N=Object.defineProperty,z=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,V=Object.getOwnPropertyDescriptor,G=Object.getPrototypeOf,H=Object.prototype;var J=function e(r,t,o){if("string"!=typeof t){if(H){var n=G(t);n&&n!==H&&e(r,n,o)}var i=z(t);q&&(i=i.concat(q(t)));for(var s=D(r),c=D(t),a=0;a<i.length;++a){var u=i[a];if(!(F[u]||o&&o[u]||c&&c[u]||s&&s[u])){var p=V(t,u);try{N(r,u,p)}catch(e){}}}}return r},U=r.createContext(),B=function(e){function r(){return e.apply(this,arguments)||this}return i(r,e),r.prototype.render=function(){var e=this.context;if(!e)throw new Error("Must be used inside a InjectorProvider");var r=this.props,t=r.children,o=r.deps;return t(e.resolve(o))},r}(r.Component);o(B,"contextType",U),o(B,"propTypes",{children:t.func.isRequired,deps:t.oneOfType([t.arrayOf(t.String),t.objectOf(t.String)])});var K=function(){if(!r.useContext)throw new Error("Hooks not found on React. Are you using React v16.8 or greater?");var e=r.useContext(U);if(!e)throw new Error("Must be used inside a InjectorProvider");return e};e.InjectServices=B,e.InjectorProvider=function(e){var t=e.services,o=e.injector,n=(e.value,e.children);if(!t&&!o)throw new Error("Must provide services or injector prop to InjectorProvider.");var i=o||a.fromServices(t);return r.createElement(U.Provider,{value:i},n)},e.Lookup=function(e){var r;if(null==e)throw new Error("Lookup() does not support nullish values");return(r={})[c]=e,r},e.ServiceInjector=a,e.useInjector=K,e.useServices=function(e){return K().resolve(e)},e.withServices=function(e){var t=e.displayName||e.name||e.constructor&&e.constructor.name||"Component",s=function(t){function o(){return t.apply(this,arguments)||this}return i(o,t),o.prototype.render=function(){var t=e.dependencies||[],o={};return Array.isArray(t)?o.services=this.context.resolve(t):o=this.context.resolve(t),r.createElement(e,n({},this.props,o))},o}(r.Component);return o(s,"displayName","withServices("+t+")"),o(s,"contextType",U),J(s,e)},Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=react-decoupler.production.min.js.map |
{ | ||
"name": "react-decoupler", | ||
"version": "0.2.0", | ||
"version": "0.2.1", | ||
"author": "Tommy Groshong <tom@groshong.software> (https://tommygroshong.com)", | ||
@@ -5,0 +5,0 @@ "description": "Simple Dependency Injection for React", |
@@ -309,8 +309,15 @@ # React Decoupler | ||
static fromServices(services) | ||
register(key, service, options) | ||
resolve(dependencies) | ||
clearDependencyCache() | ||
static fromServices(services) | ||
``` | ||
- `static fromServices(services: {})`: Factory function to create a ServiceInjector | ||
instance filled with the services from the provided vanilla JS object. Each | ||
key-value entry of the service object becomes a registered service in the | ||
injector. | ||
- `register(key, service, options = {})`: Register a single service with a given | ||
@@ -333,2 +340,3 @@ key. Any value may be used as a key or a service. Supported options: | ||
- `resolve(dependencies: {} | [])`: Accepts an array or object of service keys | ||
@@ -340,7 +348,13 @@ and returns a matching collection of resolved services. | ||
- `static fromServices(services: {})`: Factory function to create a ServiceInjector | ||
instance filled with the services from the provided vanilla JS object. Each | ||
key-value entry of the service object becomes a registered service in the | ||
injector. | ||
- `clearDependencyCache()`: Clears the resolution cache of all parameter bound | ||
services. When is this useful? If you are dynamically registering services | ||
(e.g. calling `injector.register()` inside a component or function) and want | ||
to force all future resolutions to forget the previous value of that | ||
registered service key, call this method to delete the previously cached | ||
services. The drawback to calling this function is that it forces certain | ||
service functions/classes to resolve as new object references (i.e. | ||
`useEffect` and `useMemo` that were relying on consistent reference in some | ||
consumers will misbehave) so you need to be careful when you call it. | ||
#### Usage | ||
@@ -347,0 +361,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
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
218789
1326
575