UNPKG

@happykit/flags

Version:

Feature Flags for Next.js

10 lines (9 loc) 7.82 kB
var C=TextEncoder.prototype.encode.bind(new TextEncoder),D=Array.from({length:256},(e,t)=>`00${t.toString(16)}`.slice(-2));function E(e=new Uint8Array(0)){let t="";for(let u=0;u<e.byteLength;u++)t+=D[e[u]];return t}function o(e,t){return(e&65535)*t+(((e>>>16)*t&65535)<<16)}function y(e,t){return e<<t|e>>>32-t}function U(e){return e^=e>>>16,e=o(e,2246822507),e^=e>>>13,e=o(e,3266489909),e^=e>>>16,e}var R=3432918353,T=461845907;function V(e,t){return t=o(t,R),t=y(t,15),t=o(t,T),e^=t,e=y(e,13),e=o(e,5)+3864292196,e}function j(e=new Uint8Array(0),t=0,u=!0){typeof e=="string"&&(e=C(e));let a,n,r;if(typeof t=="number")a=t,n=0,r=0;else{({h1:a,len:r}=t);let i=t.rem;if(i.byteLength===0)n=0;else if(i.byteLength+e.byteLength>=4){r+=4,n=4-i.byteLength;let h=new Uint8Array(4),m=new DataView(h.buffer);h.set(i),h.set(e.subarray(0,n),i.byteLength),a=V(a,m.getUint32(0,!0))}else{let h=new Uint8Array(e.byteLength+i.byteLength);h.set(i),h.set(e,i.byteLength),e=h,n=0}}let s=new DataView(e.buffer,e.byteOffset),l=(e.byteLength-n)%4,f=e.byteLength-n-l;for(r+=f;n<f;n+=4)a=V(a,s.getUint32(n,!0));if(u){r+=l;let i=0;switch(l){case 3:i^=e[n+2]<<16;case 2:i^=e[n+1]<<8;case 1:i^=e[n],i=o(i,R),i=y(i,15),i=o(i,T),a^=i}return a^=r&4294967295,a=U(a),a>>>0}else return{h1:a,len:r,rem:e.slice(e.byteLength-l)}}var d=597399067,L=2869860233,A=951274213,F=2716044179;function B(e,t,u,a,n,r,s,l){return n=o(n,d),n=y(n,15),n=o(n,L),e^=n,e=y(e,19),e+=t,e=o(e,5)+1444728091,r=o(r,L),r=y(r,16),r=o(r,A),t^=r,t=y(t,17),t+=u,t=o(t,5)+197830471,s=o(s,A),s=y(s,17),s=o(s,F),u^=s,u=y(u,15),u+=a,u=o(u,5)+2530024501,l=o(l,F),l=y(l,18),l=o(l,d),a^=l,a=y(a,13),a+=e,a=o(a,5)+850148119,[e,t,u,a]}function q(e=new Uint8Array(0),t=0,u=!0){let a;typeof e=="string"?(e=C(e),a=!0):a=!1;let n,r,s,l,f,i;if(typeof t=="number")n=r=s=l=t,f=0,i=0;else{({h1:n,h2:r,h3:s,h4:l,len:i}=t);let x=t.rem;if(x.byteLength===0)f=0;else if(x.byteLength+e.byteLength>=16){i+=16,f=16-x.byteLength;let c=new Uint8Array(16),g=new DataView(c.buffer);c.set(x),c.set(e.subarray(0,f),x.byteLength),[n,r,s,l]=B(n,r,s,l,g.getUint32(0,!0),g.getUint32(4,!0),g.getUint32(8,!0),g.getUint32(12,!0))}else{let c=new Uint8Array(e.byteLength+x.byteLength);c.set(x),c.set(e,x.byteLength),e=c,f=0}}let h=new DataView(e.buffer,e.byteOffset),m=(e.byteLength-f)%16,S=e.byteLength-f-m;for(i+=S;f<S;f+=16)[n,r,s,l]=B(n,r,s,l,h.getUint32(f,!0),h.getUint32(f+4,!0),h.getUint32(f+8,!0),h.getUint32(f+12,!0));if(u){i+=m;let x=0,c=0,g=0,p=0;switch(m){case 15:p^=e[f+14]<<16;case 14:p^=e[f+13]<<8;case 13:p^=e[f+12],p=o(p,F),p=y(p,18),p=o(p,d),l^=p;case 12:g^=e[f+11]<<24;case 11:g^=e[f+10]<<16;case 10:g^=e[f+9]<<8;case 9:g^=e[f+8],g=o(g,A),g=y(g,17),g=o(g,F),s^=g;case 8:c^=e[f+7]<<24;case 7:c^=e[f+6]<<16;case 6:c^=e[f+5]<<8;case 5:c^=e[f+4],c=o(c,L),c=y(c,16),c=o(c,A),r^=c;case 4:x^=e[f+3]<<24;case 3:x^=e[f+2]<<16;case 2:x^=e[f+1]<<8;case 1:x^=e[f],x=o(x,d),x=y(x,15),x=o(x,L),n^=x}n^=i&4294967295,r^=i&4294967295,s^=i&4294967295,l^=i&4294967295,n+=r+s+l,r+=n,s+=n,l+=n,n=U(n),r=U(r),s=U(s),l=U(l),n+=r+s+l,r+=n,s+=n,l+=n;let w=new DataView(new ArrayBuffer(16));return w.setUint32(0,n,!1),w.setUint32(4,r,!1),w.setUint32(8,s,!1),w.setUint32(12,l,!1),a?E(new Uint8Array(w.buffer)):new Uint8Array(w.buffer)}else return{h1:n,h2:r,h3:s,h4:l,len:i,rem:e.subarray(e.byteLength-m)}}var N={hash32:j,hash128:q};function O(e){return N.hash32(e,19088743)}function b(e,t){return e.hasOwnProperty(t)}function W(e,t,u,a){if(e.group==="user"){if(!u||!u.key)return e.operator==="not-authenticated";switch(e.operator){case"equal-to":return String(u[e.lhs])===e.rhs;case"not-equal-to":return String(u[e.lhs])!==e.rhs;case"authenticated":return Boolean(u.key);case"not-authenticated":return!u||!u.key;case"set":return b(u,e.lhs);case"not-set":return!b(u,e.lhs);case"starts-with":{let n=u[e.lhs],r=e.rhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().startsWith(r.toLowerCase())}case"ends-with":{let n=u[e.lhs],r=e.rhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().endsWith(r.toLowerCase())}}}else if(e.group==="visitor")switch(e.operator){case"equal-to":return Boolean(t&&String(t[e.lhs])===e.rhs);case"not-equal-to":return Boolean(t&&String(t[e.lhs])!==e.rhs);case"set":return Boolean(t&&b(t,e.lhs));case"not-set":return!t||!b(t,e.lhs);case"starts-with":{if(!t)return!1;let n=t[e.lhs],r=e.lhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().startsWith(r.toLowerCase())}case"ends-with":{if(!t)return!1;let n=t[e.lhs],r=e.rhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().endsWith(r.toLowerCase())}}else if(e.group==="traits")switch(e.operator){case"equal-to":return Boolean(a&&String(a[e.lhs])===e.rhs);case"not-equal-to":return Boolean(a&&String(a[e.lhs])!==e.rhs);case"set":return Boolean(a&&b(a,e.lhs));case"not-set":return!a||!b(a,e.lhs);case"starts-with":{if(!a)return!1;let n=a[e.lhs],r=e.rhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().startsWith(r.toLowerCase())}case"ends-with":{if(!a)return!1;let n=a[e.lhs],r=e.rhs;return typeof n=="string"&&typeof r=="string"&&n.toLowerCase().endsWith(r.toLowerCase())}}else return!1}function v(e,t,u){let a=t.variants.map(f=>({variant:f,weight:u.variants[f.id].weight})).filter(f=>f.weight>0),r=O(String(e)+t.id)%1e4,s=0,l=a.find(f=>(s+=parseInt(String(f.weight*100),10),r<s));return l?l.variant:null}function P({flag:e,environment:t,visitor:u,user:a,traits:n}){let r=e[t];if(!r.active)return{mode:"variant",variant:r.offVariation};if(a){let s=Object.keys(r.targets).find(l=>r.targets[l].values.includes(a.key));if(s)return{mode:"variant",variant:s}}if(Array.isArray(r.rules)){let s=r.rules.find(l=>l.conditions.every(f=>W(f,u,a,n)));if(s)return s.resolution}return r.fallthrough}function Z({flag:e,environment:t,visitor:u,user:a,traits:n},r){if(r.mode==="variant"){let s=e.variants.find(l=>l.id===r.variant);return s||null}switch(r.bucketByCategory){case"visitor":return u&&u.key?v(u.key,e,r):null;case"user":{if(!a)return null;let s=a[r.bucketByUserAttribute];return s?v(s,e,r):null}case"trait":{if(!n)return null;let s=n[r.bucketByTrait];return s?v(s,e,r):null}default:return null}}function z(e){let t=P(e);return Z(e,t)}function _(e){if(!e||typeof e!="object"||typeof e.key!="string"||e.key.trim().length===0)return null;let t={key:e.key.trim().substring(0,516)};return typeof e.email=="string"&&(t.email=e.email.trim().substring(0,516)),typeof e.name=="string"&&(t.name=e.name.trim().substring(0,516)),typeof e.avatar=="string"&&(t.avatar=e.avatar.trim().substring(0,1024)),typeof e.language=="string"&&(t.language=e.language.trim().substring(0,1024)),typeof e.timeZone=="string"&&(t.timeZone=e.timeZone.trim().substring(0,128)),typeof e.country=="string"&&(t.country=e.country.trim().substring(0,2).toUpperCase()),t}function H(e){return{key:e}}function J(e){return!e||typeof e!="object"?null:Object.entries(e).reduce((t,[u,a])=>{if(String(u).length>1024)return t;try{if(JSON.stringify(a).length>4096)return t}catch{return t}return t[u]=a,t},{})}function M(e){return Object.entries(e).reduce((t,[u,a])=>(t[u]=a?a.value:null,t),{})}function $({flags:e,environment:t,user:u,visitor:a,traits:n}){return e.reduce((r,s)=>{let l=z({flag:s,environment:t,user:u,visitor:a,traits:n});return r[s.slug]=l||null,r},{})}export{_ as a,H as b,J as c,M as d,$ as e}; /*! * +----------------------------------------------------------------------------------+ * | murmurHash3.js v3.0.0 (http://github.com/karanlyons/murmurHash3.js) | * | A TypeScript/JavaScript implementation of MurmurHash3's hashing algorithms. | * |----------------------------------------------------------------------------------| * | Copyright (c) 2012-2020 Karan Lyons. Freely distributable under the MIT license. | * +----------------------------------------------------------------------------------+ */