UNPKG

launchdarkly-react-client-sdk

Version:
3 lines (2 loc) 7.53 kB
import*as e from"react";import t,{createContext as r,Component as n,useState as o,useEffect as a,useContext as i}from"react";import{initialize as s}from"launchdarkly-js-client-sdk";export*from"launchdarkly-js-client-sdk";import l from"lodash.camelcase";import c from"hoist-non-react-statics";const p=()=>r({flags:{},flagKeyMap:{},ldClient:void 0}),u={useCamelCaseFlagKeys:!0,sendEventsOnFlagRead:!0,reactContext:p()},f=e=>{var t;return null!=(t=e.context)?t:e.user},d=e=>{const t={};for(const r in e)0!==r.indexOf("$")&&(t[l(r)]=e[r]);return t},y=(e,t)=>{const r={};for(const n in e)t&&void 0===t[n]||(r[n]=e[n].current);return r},h=(e,t)=>{const r=e.allFlags();return t?Object.keys(t).reduce(((e,n)=>(e[n]=Object.prototype.hasOwnProperty.call(r,n)?r[n]:t[n],e)),{}):r};function g(e,t,r=u,n){const o=function(e,t){if(void 0===t)return e;return Object.keys(t).reduce(((t,r)=>(O(e,r)&&(t[r]=e[r]),t)),{})}(t,n),{useCamelCaseFlagKeys:a=!0}=r,[i,s={}]=a?function(e){const t={},r={};for(const n in e){if(0===n.indexOf("$"))continue;const o=l(n);t[o]=e[n],r[o]=n}return[t,r]}(o):[o];return{flags:r.sendEventsOnFlagRead?b(e,i,s,a):i,flagKeyMap:s}}function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function b(e,t,r,n){return new Proxy(t,{get(t,o,a){const i=Reflect.get(t,o,a),s=n&&O(r,o)||O(t,o);if("symbol"==typeof o||!s)return i;if(void 0===i)return;const l=n?r[o]:o;return e.variation(l,i)}})}d.camelCaseKeys=d;const m={wrapperName:"react-client-sdk",wrapperVersion:"3.6.1",sendEventsOnlyForVariation:!0};var v=Object.defineProperty,C=Object.defineProperties,x=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable,F=(e,t,r)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))w.call(t,r)&&F(e,r,t[r]);if(j)for(var r of j(t))P.call(t,r)&&F(e,r,t[r]);return e},S=(e,t)=>C(e,x(t)),k=(e,t,r)=>new Promise(((n,o)=>{var a=e=>{try{s(r.next(e))}catch(e){o(e)}},i=e=>{try{s(r.throw(e))}catch(e){o(e)}},s=e=>e.done?n(e.value):Promise.resolve(e.value).then(a,i);s((r=r.apply(e,t)).next())}));class D extends n{constructor(e){super(e),this.getReactOptions=()=>E(E({},u),this.props.reactOptions),this.subscribeToChanges=e=>{const{flags:t}=this.props;e.on("change",(r=>{const n=this.getReactOptions(),o=y(r,t),a=E(E({},this.state.unproxiedFlags),o);Object.keys(o).length>0&&this.setState((r=>E(S(E({},r),{unproxiedFlags:a}),g(e,a,n,t))))}))},this.onFailed=(e,t)=>{this.setState((e=>S(E({},e),{error:t})))},this.onReady=(e,t,r)=>{const n=h(e,r);this.setState((o=>E(S(E({},o),{unproxiedFlags:n}),g(e,n,t,r))))},this.prepareLDClient=()=>k(this,null,(function*(){var e;const{clientSideID:t,flags:r,options:n}=this.props;let o=yield this.props.ldClient;const a=this.getReactOptions();let i,l=this.state.unproxiedFlags;if(o)l=h(o,r);else{const c=null!=(e=f(this.props))?e:{anonymous:!0,kind:"user"};o=s(t,c,E(E({},m),n));try{yield o.waitForInitialization(this.props.timeout),l=h(o,r)}catch(e){i=e,(null==i?void 0:i.name.toLowerCase().includes("timeout"))&&(o.on("failed",this.onFailed),o.on("ready",(()=>{this.onReady(o,a,r)})))}}this.setState((e=>S(E(S(E({},e),{unproxiedFlags:l}),g(o,l,a,r)),{ldClient:o,error:i}))),this.subscribeToChanges(o)}));const{options:t}=e;if(this.state={flags:{},unproxiedFlags:{},flagKeyMap:{}},t){const{bootstrap:e}=t;if(e&&"localStorage"!==e){const{useCamelCaseFlagKeys:t}=this.getReactOptions();this.state={flags:t?d(e):e,unproxiedFlags:e,flagKeyMap:{}}}}}componentDidMount(){return k(this,null,(function*(){const{deferInitialization:e}=this.props;e&&!f(this.props)||(yield this.prepareLDClient())}))}componentDidUpdate(e){return k(this,null,(function*(){const{deferInitialization:t}=this.props,r=!f(e)&&f(this.props);t&&r&&(yield this.prepareLDClient())}))}render(){const{flags:e,flagKeyMap:r,ldClient:n,error:o}=this.state,{reactContext:a}=this.getReactOptions();return t.createElement(a.Provider,{value:{flags:e,flagKeyMap:r,ldClient:n,error:o}},this.props.children)}}var I=Object.defineProperty,K=Object.defineProperties,R=Object.getOwnPropertyDescriptors,M=Object.getOwnPropertySymbols,L=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable,T=(e,t,r)=>t in e?I(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,V=(e,t)=>{for(var r in t||(t={}))L.call(t,r)&&T(e,r,t[r]);if(M)for(var r of M(t))z.call(t,r)&&T(e,r,t[r]);return e};function $(t){return function(r){const{reactOptions:n}=t,o=V(V({},u),n),a=(i=V({},t),K(i,R({reactOptions:o})));var i;function s(t){return e.createElement(D,V({},a),e.createElement(r,V({},t)))}return c(s,r),s}}var N=Object.defineProperty,U=Object.defineProperties,q=Object.getOwnPropertyDescriptors,A=Object.getOwnPropertySymbols,B=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable,H=(e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,J=(e,t)=>{for(var r in t||(t={}))B.call(t,r)&&H(e,r,t[r]);if(A)for(var r of A(t))G.call(t,r)&&H(e,r,t[r]);return e},Q=(e,t)=>U(e,q(t));function W(e){return r=this,n=null,i=function*(){var r,n;const{clientSideID:i,flags:l,options:c,reactOptions:p}=e,d=J(J({},u),p),O=null!=(r=f(e))?r:{anonymous:!0,kind:"user"};let b,v={};const C=null!=(n=yield e.ldClient)?n:s(i,O,J(J({},m),c));try{yield C.waitForInitialization(e.timeout),v=h(C,l)}catch(e){b=e}const x=(null==c?void 0:c.bootstrap)&&"localStorage"!==c.bootstrap?c.bootstrap:v;return({children:e})=>{const[r,n]=o((()=>Q(J({unproxiedFlags:x},g(C,x,d,l)),{ldClient:C,error:b})));a((()=>{function e(e){const t=y(e,l);Object.keys(t).length>0&&n((e=>{const r=J(J({},e.unproxiedFlags),t);return J(Q(J({},e),{unproxiedFlags:r}),g(C,r,d,l))}))}function t(){const e=h(C,l);n((t=>J(Q(J({},t),{unproxiedFlags:e}),g(C,e,d,l))))}function r(e){n((t=>Q(J({},t),{error:e})))}return C.on("change",e),(null==b?void 0:b.name.toLowerCase().includes("timeout"))&&(C.on("failed",r),C.on("ready",t)),function(){C.off("change",e),C.off("failed",r),C.off("ready",t)}}),[]);const i=((e,t)=>{var r={};for(var n in e)B.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&A)for(var n of A(e))t.indexOf(n)<0&&G.call(e,n)&&(r[n]=e[n]);return r})(r,["unproxiedFlags"]),{reactContext:s}=d;return t.createElement(s.Provider,{value:i},e)}},new Promise(((e,t)=>{var o=e=>{try{s(i.next(e))}catch(e){t(e)}},a=e=>{try{s(i.throw(e))}catch(e){t(e)}},s=t=>t.done?e(t.value):Promise.resolve(t.value).then(o,a);s((i=i.apply(r,n)).next())}));var r,n,i}var X=Object.defineProperty,Y=Object.getOwnPropertySymbols,Z=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,ee=(e,t,r)=>t in e?X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,te=(e,t)=>{for(var r in t||(t={}))Z.call(t,r)&&ee(e,r,t[r]);if(Y)for(var r of Y(t))_.call(t,r)&&ee(e,r,t[r]);return e};function re(t={clientOnly:!1}){return function(r){var n;const o=null!=(n=t.reactContext)?n:u.reactContext;return n=>e.createElement(o.Consumer,null,(({flags:o,ldClient:a})=>t.clientOnly?e.createElement(r,te({ldClient:a},n)):e.createElement(r,te({flags:o,ldClient:a},n))))}}const ne=e=>{const{flags:t}=i(null!=e?e:u.reactContext);return t},oe=e=>{const{ldClient:t}=i(null!=e?e:u.reactContext);return t};function ae(e){const{error:t}=i(null!=e?e:u.reactContext);return t}export{D as LDProvider,W as asyncWithLDProvider,d as camelCaseKeys,u as defaultReactOptions,p as reactSdkContextFactory,ne as useFlags,oe as useLDClient,ae as useLDClientError,re as withLDConsumer,$ as withLDProvider}; //# sourceMappingURL=index.js.map