@ojolowoblue/lamba 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lamba.min.js CHANGED
@@ -1,8 +1,8 @@
1
- "use strict";var lamba=(()=>{var O=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var j=(s,e)=>{for(var r in e)O(s,r,{get:e[r],enumerable:!0})},F=(s,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of B(e))!q.call(s,a)&&a!==r&&O(s,a,{get:()=>e[a],enumerable:!(t=_(e,a))||t.enumerable});return s};var U=s=>F(O({},"__esModule",{value:!0}),s);var D={};j(D,{LambaManager:()=>S,default:()=>z,lamba:()=>L,parseEnvString:()=>u,stringifyEnv:()=>f});var R="__lamba_presets__",P="__lamba_active_preset__",g=class{constructor(){this.presets=[];this.activePresetId=null;this.loadFromStorage()}loadFromStorage(){if(!(typeof localStorage>"u"))try{let e=localStorage.getItem(R);e&&(this.presets=JSON.parse(e)),this.activePresetId=localStorage.getItem(P)}catch(e){console.warn("[lamba] Failed to parse presets from localStorage",e)}}saveToStorage(){if(!(typeof localStorage>"u"))try{localStorage.setItem(R,JSON.stringify(this.presets)),this.activePresetId?localStorage.setItem(P,this.activePresetId):localStorage.removeItem(P)}catch(e){console.warn("[lamba] Failed to save presets to localStorage",e)}}getPresets(){return[...this.presets]}getActivePresetId(){return this.activePresetId}createPreset(e,r){let t={id:"preset_"+Math.random().toString(36).substring(2,9),name:e.trim()||"Untitled Preset",overrides:{...r},createdAt:Date.now()};return this.presets.push(t),this.saveToStorage(),t}deletePreset(e){this.presets=this.presets.filter(r=>r.id!==e),this.activePresetId===e&&(this.activePresetId=null),this.saveToStorage()}setActivePreset(e){if(!e)return this.activePresetId=null,this.saveToStorage(),null;let r=this.presets.find(t=>t.id===e);return r?(this.activePresetId=e,this.saveToStorage(),r):null}};function u(s){let e={},r=s.split(`
2
- `);for(let t of r){if(t=t.trim(),!t||t.startsWith("#"))continue;t.startsWith("export ")&&(t=t.slice(7).trim());let a=t.indexOf("=");if(a===-1)continue;let i=t.slice(0,a).trim(),n=t.slice(a+1).trim();(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))&&(n=n.slice(1,-1)),n=n.replace(/\\n/g,`
3
- `),i&&(e[i]=n)}return e}function f(s){return Object.entries(s).map(([e,r])=>{let a=r.includes(" ")||r.includes(`
4
- `)||r.includes("#")?`"${r.replace(/"/g,'\\"')}"`:r;return`${e}=${a}`}).join(`
5
- `)}function M(){let s={};if(typeof window>"u")return s;try{let e=window.process;if(e&&e.env&&typeof e.env=="object")for(let[r,t]of Object.entries(e.env))(typeof t=="string"||typeof t=="number"||typeof t=="boolean")&&(s[r]=String(t))}catch{}try{let e=window.__ENV__||window.ENV;if(e&&typeof e=="object")for(let[r,t]of Object.entries(e))(typeof t=="string"||typeof t=="number"||typeof t=="boolean")&&(s[r]=String(t))}catch{}try{document.querySelectorAll("meta").forEach(r=>{let t=r.getAttribute("name"),a=r.getAttribute("content");if(!(!t||a===null))if(t.startsWith("env:")){let i=t.slice(4);s[i]=a}else t==="lamba-env"&&new URLSearchParams(a).forEach((n,l)=>{s[l]=n})})}catch{}return s}async function T(){let s=["/.env","/.env.local","/.env.example"];for(let e of s)try{let r=await fetch(e,{headers:{Accept:"text/plain"}});if(r.ok){let t=await r.text();if(t&&t.includes("="))return u(t)}}catch{}return{}}var H="__lamba_overrides__",N=/(KEY|SECRET|TOKEN|PASSWORD|AUTH|PRIVATE|CREDENTIAL|SIGNATURE)/i,x=class{constructor(e={}){this.variables=new Map;this.overrides={};this.envChangeListeners=new Set;this.storeChangeListeners=new Set;this.secretPattern=e.secretKeysPattern||N,this.presetManager=new g,this.loadOverridesFromStorage(),e.env&&this.mergeDefaults(e.env);let r=M();this.mergeDefaults(r),e.autoFetchEnvFile===!0&&typeof window<"u"&&T().then(t=>{Object.keys(t).length>0&&this.mergeDefaults(t)}),this.patchProcessEnv()}loadOverridesFromStorage(){if(!(typeof localStorage>"u"))try{let e=localStorage.getItem(H);e&&(this.overrides=JSON.parse(e))}catch(e){console.warn("[lamba] Failed to parse overrides from localStorage",e)}}saveOverridesToStorage(){if(!(typeof localStorage>"u"))try{localStorage.setItem(H,JSON.stringify(this.overrides))}catch(e){console.warn("[lamba] Failed to save overrides to localStorage",e)}}patchProcessEnv(){if(typeof window>"u")return;let e=window;e.process?e.process.env||(e.process.env={}):e.process={env:{}};let r=this,t=e.process.env;try{e.process.env=new Proxy(t,{get(a,i){if(typeof i=="string"){let n=r.get(i);if(n!==void 0)return n}return a[i]},set(a,i,n){return a[i]=n,!0}})}catch{}}mergeDefaults(e){let r=!1;for(let[t,a]of Object.entries(e)){let i=t in this.overrides,n=i?this.overrides[t]:a,l=this.secretPattern.test(t),c=this.variables.get(t);c?c.defaultValue!==a&&(c.defaultValue=a,c.isOverridden||(c.value=a),r=!0):(this.variables.set(t,{key:t,value:n,defaultValue:a,isOverridden:i,isSecret:l}),r=!0)}r&&this.notifyStoreChanged()}get(e,r){if(e in this.overrides)return this.overrides[e];let t=this.variables.get(e);return t?t.value:r}getAll(){let e={};return this.variables.forEach((r,t)=>{e[t]={...r}}),e}getOverrides(){return{...this.overrides}}setOverride(e,r){let t=e.trim();if(!t)return;this.overrides[t]=r,this.saveOverridesToStorage();let a=this.variables.get(t);a?(a.value=r,a.isOverridden=!0):(a={key:t,value:r,defaultValue:"",isOverridden:!0,isSecret:this.secretPattern.test(t)},this.variables.set(t,a)),this.emitEnvChange(t,r,!0),this.notifyStoreChanged()}removeOverride(e){if(e in this.overrides){delete this.overrides[e],this.saveOverridesToStorage();let r=this.variables.get(e);r&&(r.value=r.defaultValue,r.isOverridden=!1,this.emitEnvChange(e,r.value,!1)),this.notifyStoreChanged()}}resetAllOverrides(){let e=Object.keys(this.overrides);this.overrides={},this.saveOverridesToStorage(),this.presetManager.setActivePreset(null),e.forEach(r=>{let t=this.variables.get(r);t&&(t.value=t.defaultValue,t.isOverridden=!1,this.emitEnvChange(r,t.value,!1))}),this.notifyStoreChanged()}applyPreset(e){let r=this.presetManager.setActivePreset(e);if(this.overrides=r?{...r.overrides}:{},this.saveOverridesToStorage(),this.variables.forEach((t,a)=>{a in this.overrides?(t.value=this.overrides[a],t.isOverridden=!0):(t.value=t.defaultValue,t.isOverridden=!1),this.emitEnvChange(a,t.value,t.isOverridden)}),r)for(let[t,a]of Object.entries(r.overrides))this.variables.has(t)||(this.variables.set(t,{key:t,value:a,defaultValue:"",isOverridden:!0,isSecret:this.secretPattern.test(t)}),this.emitEnvChange(t,a,!0));this.notifyStoreChanged()}subscribeEnvChange(e){return this.envChangeListeners.add(e),()=>this.envChangeListeners.delete(e)}subscribeStoreChange(e){return this.storeChangeListeners.add(e),()=>this.storeChangeListeners.delete(e)}emitEnvChange(e,r,t){this.envChangeListeners.forEach(a=>a(e,r,t)),typeof window<"u"&&window.dispatchEvent(new CustomEvent("lamba:env-change",{detail:{key:e,value:r,isOverridden:t}}))}notifyStoreChanged(){let e=this.getAll(),r=this.presetManager.getPresets(),t=this.presetManager.getActivePresetId();this.storeChangeListeners.forEach(a=>a(e,r,t))}};var y=class{constructor(e){this.originalFetch=null;this.originalXHRPost=null;this.isIntercepting=!1;this.store=e}enable(){typeof window>"u"||this.isIntercepting||(this.patchFetch(),this.patchXHR(),this.isIntercepting=!0)}disable(){typeof window>"u"||!this.isIntercepting||(this.originalFetch&&(window.fetch=this.originalFetch,this.originalFetch=null),this.originalXHRPost&&(XMLHttpRequest.prototype.open=this.originalXHRPost,this.originalXHRPost=null),this.isIntercepting=!1)}rewriteUrl(e){if(typeof e!="string")return e;let r=this.store.getAll(),t=e;for(let a of Object.values(r))if(a.isOverridden&&a.defaultValue&&a.value){let i=a.defaultValue.replace(/\/+$/,""),n=a.value.replace(/\/+$/,"");i&&t.includes(i)&&(t=t.replace(i,n))}return t}patchFetch(){if(!window.fetch)return;this.originalFetch=window.fetch;let e=this;window.fetch=function(r,t){let a=r;if(typeof r=="string")a=e.rewriteUrl(r);else if(r instanceof URL){let i=e.rewriteUrl(r.toString());a=new URL(i)}else if(r instanceof Request){let i=e.rewriteUrl(r.url);i!==r.url&&(a=new Request(i,r))}return e.originalFetch.call(this,a,t)}}patchXHR(){if(!window.XMLHttpRequest)return;this.originalXHRPost=XMLHttpRequest.prototype.open;let e=this;XMLHttpRequest.prototype.open=function(r,t,a=!0,i,n){let l=typeof t=="string"?t:t.toString(),c=e.rewriteUrl(l);return e.originalXHRPost.call(this,r,c,a,i??null,n??null)}}};var A=`
1
+ "use strict";var lamba=(()=>{var C=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var j=(s,e)=>{for(var t in e)C(s,t,{get:e[t],enumerable:!0})},q=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of B(e))!U.call(s,a)&&a!==t&&C(s,a,{get:()=>e[a],enumerable:!(r=V(e,a))||r.enumerable});return s};var N=s=>q(C({},"__esModule",{value:!0}),s);var D={};j(D,{LambaManager:()=>S,default:()=>z,lamba:()=>L,parseEnvString:()=>v,stringifyEnv:()=>f});var R="__lamba_presets__",O="__lamba_active_preset__",g=class{constructor(){this.presets=[];this.activePresetId=null;this.loadFromStorage()}loadFromStorage(){if(!(typeof localStorage>"u"))try{let e=localStorage.getItem(R);e&&(this.presets=JSON.parse(e)),this.activePresetId=localStorage.getItem(O)}catch(e){console.warn("[lamba] Failed to parse presets from localStorage",e)}}saveToStorage(){if(!(typeof localStorage>"u"))try{localStorage.setItem(R,JSON.stringify(this.presets)),this.activePresetId?localStorage.setItem(O,this.activePresetId):localStorage.removeItem(O)}catch(e){console.warn("[lamba] Failed to save presets to localStorage",e)}}getPresets(){return[...this.presets]}getActivePresetId(){return this.activePresetId}createPreset(e,t){let r={id:"preset_"+Math.random().toString(36).substring(2,9),name:e.trim()||"Untitled Preset",overrides:{...t},createdAt:Date.now()};return this.presets.push(r),this.saveToStorage(),r}deletePreset(e){this.presets=this.presets.filter(t=>t.id!==e),this.activePresetId===e&&(this.activePresetId=null),this.saveToStorage()}setActivePreset(e){if(!e)return this.activePresetId=null,this.saveToStorage(),null;let t=this.presets.find(r=>r.id===e);return t?(this.activePresetId=e,this.saveToStorage(),t):null}};function v(s){let e={},t=s.split(`
2
+ `);for(let r of t){if(r=r.trim(),!r||r.startsWith("#"))continue;r.startsWith("export ")&&(r=r.slice(7).trim());let a=r.indexOf("=");if(a===-1)continue;let i=r.slice(0,a).trim(),n=r.slice(a+1).trim();(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))&&(n=n.slice(1,-1)),n=n.replace(/\\n/g,`
3
+ `),i&&(e[i]=n)}return e}function f(s){return Object.entries(s).map(([e,t])=>{let a=t.includes(" ")||t.includes(`
4
+ `)||t.includes("#")?`"${t.replace(/"/g,'\\"')}"`:t;return`${e}=${a}`}).join(`
5
+ `)}function T(){let s={};if(typeof window>"u")return s;let e=t=>{if(!(!t||typeof t!="object"))for(let[r,a]of Object.entries(t))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(s[r]=String(a))};try{let t=window.process;t&&t.env&&typeof t.env=="object"&&e(t.env)}catch{}try{let t=window.__NEXT_DATA__;t&&(t.env&&e(t.env),t.runtimeConfig?.public&&e(t.runtimeConfig.public))}catch{}try{let t=window.__NUXT__;t?.config?.public&&e(t.config.public)}catch{}try{let t=window,r=t.__ENV__||t.ENV||t.PUBLIC_ENV||t.__LAMBA_ENV__;r&&e(r)}catch{}try{document.querySelectorAll("meta").forEach(r=>{let a=r.getAttribute("name"),i=r.getAttribute("content");if(!(!a||i===null))if(a.startsWith("env:")){let n=a.slice(4);s[n]=i}else a==="lamba-env"&&new URLSearchParams(i).forEach((c,l)=>{s[l]=c})})}catch{}return s}async function M(){let s=["/.env","/.env.local","/.env.example"];for(let e of s)try{let t=await fetch(e,{headers:{Accept:"text/plain"}});if(t.ok){let r=await t.text();if(r&&r.includes("="))return v(r)}}catch{}return{}}var A="__lamba_overrides__",F=/(KEY|SECRET|TOKEN|PASSWORD|AUTH|PRIVATE|CREDENTIAL|SIGNATURE)/i,x=class{constructor(e={}){this.variables=new Map;this.overrides={};this.envChangeListeners=new Set;this.storeChangeListeners=new Set;this.secretPattern=e.secretKeysPattern||F,this.allowedPrefixes=e.allowedPrefixes,this.presetManager=new g,this.loadOverridesFromStorage(),e.env&&this.mergeDefaults(e.env);let t=T();this.mergeDefaults(t),e.autoFetchEnvFile===!0&&typeof window<"u"&&M().then(r=>{Object.keys(r).length>0&&this.mergeDefaults(r)}),this.patchProcessEnv()}loadOverridesFromStorage(){if(!(typeof localStorage>"u"))try{let e=localStorage.getItem(A);e&&(this.overrides=JSON.parse(e))}catch(e){console.warn("[lamba] Failed to parse overrides from localStorage",e)}}saveOverridesToStorage(){if(!(typeof localStorage>"u"))try{localStorage.setItem(A,JSON.stringify(this.overrides))}catch(e){console.warn("[lamba] Failed to save overrides to localStorage",e)}}patchProcessEnv(){if(typeof window>"u")return;let e=window;e.process?e.process.env||(e.process.env={}):e.process={env:{}};let t=this,r=e.process.env;try{e.process.env=new Proxy(r,{get(a,i){if(typeof i=="string"){let n=t.get(i);if(n!==void 0)return n}return a[i]},set(a,i,n){return a[i]=n,!0}})}catch{}}isAllowedKey(e){return this.allowedPrefixes?typeof this.allowedPrefixes=="string"?e.startsWith(this.allowedPrefixes):Array.isArray(this.allowedPrefixes)?this.allowedPrefixes.length===0?!0:this.allowedPrefixes.some(t=>e.startsWith(t)):this.allowedPrefixes instanceof RegExp?this.allowedPrefixes.test(e):!0:!0}mergeDefaults(e){let t=!1;for(let[r,a]of Object.entries(e)){if(!this.isAllowedKey(r))continue;let i=r in this.overrides,n=i?this.overrides[r]:a,c=this.secretPattern.test(r),l=this.variables.get(r);l?l.defaultValue!==a&&(l.defaultValue=a,l.isOverridden||(l.value=a),t=!0):(this.variables.set(r,{key:r,value:n,defaultValue:a,isOverridden:i,isSecret:c}),t=!0)}t&&this.notifyStoreChanged()}get(e,t){if(e in this.overrides)return this.overrides[e];let r=this.variables.get(e);return r?r.value:t}getAll(){let e={};return this.variables.forEach((t,r)=>{e[r]={...t}}),e}getOverrides(){return{...this.overrides}}setOverride(e,t){let r=e.trim();if(!r)return;this.overrides[r]=t,this.saveOverridesToStorage();let a=this.variables.get(r);a?(a.value=t,a.isOverridden=!0):(a={key:r,value:t,defaultValue:"",isOverridden:!0,isSecret:this.secretPattern.test(r)},this.variables.set(r,a)),this.emitEnvChange(r,t,!0),this.notifyStoreChanged()}removeOverride(e){if(e in this.overrides){delete this.overrides[e],this.saveOverridesToStorage();let t=this.variables.get(e);t&&(t.value=t.defaultValue,t.isOverridden=!1,this.emitEnvChange(e,t.value,!1)),this.notifyStoreChanged()}}resetAllOverrides(){let e=Object.keys(this.overrides);this.overrides={},this.saveOverridesToStorage(),this.presetManager.setActivePreset(null),e.forEach(t=>{let r=this.variables.get(t);r&&(r.value=r.defaultValue,r.isOverridden=!1,this.emitEnvChange(t,r.value,!1))}),this.notifyStoreChanged()}applyPreset(e){let t=this.presetManager.setActivePreset(e);if(this.overrides=t?{...t.overrides}:{},this.saveOverridesToStorage(),this.variables.forEach((r,a)=>{a in this.overrides?(r.value=this.overrides[a],r.isOverridden=!0):(r.value=r.defaultValue,r.isOverridden=!1),this.emitEnvChange(a,r.value,r.isOverridden)}),t)for(let[r,a]of Object.entries(t.overrides))this.variables.has(r)||(this.variables.set(r,{key:r,value:a,defaultValue:"",isOverridden:!0,isSecret:this.secretPattern.test(r)}),this.emitEnvChange(r,a,!0));this.notifyStoreChanged()}subscribeEnvChange(e){return this.envChangeListeners.add(e),()=>this.envChangeListeners.delete(e)}subscribeStoreChange(e){return this.storeChangeListeners.add(e),()=>this.storeChangeListeners.delete(e)}emitEnvChange(e,t,r){this.envChangeListeners.forEach(a=>a(e,t,r)),typeof window<"u"&&window.dispatchEvent(new CustomEvent("lamba:env-change",{detail:{key:e,value:t,isOverridden:r}}))}notifyStoreChanged(){let e=this.getAll(),t=this.presetManager.getPresets(),r=this.presetManager.getActivePresetId();this.storeChangeListeners.forEach(a=>a(e,t,r))}};var y=class{constructor(e){this.originalFetch=null;this.originalXHRPost=null;this.isIntercepting=!1;this.store=e}enable(){typeof window>"u"||this.isIntercepting||(this.patchFetch(),this.patchXHR(),this.isIntercepting=!0)}disable(){typeof window>"u"||!this.isIntercepting||(this.originalFetch&&(window.fetch=this.originalFetch,this.originalFetch=null),this.originalXHRPost&&(XMLHttpRequest.prototype.open=this.originalXHRPost,this.originalXHRPost=null),this.isIntercepting=!1)}rewriteUrl(e){if(typeof e!="string")return e;let t=this.store.getAll(),r=e;for(let a of Object.values(t))if(a.isOverridden&&a.defaultValue&&a.value){let i=a.defaultValue.replace(/\/+$/,""),n=a.value.replace(/\/+$/,"");i&&r.includes(i)&&(r=r.replace(i,n))}return r}patchFetch(){if(!window.fetch)return;this.originalFetch=window.fetch;let e=this;window.fetch=function(t,r){let a=t;if(typeof t=="string")a=e.rewriteUrl(t);else if(t instanceof URL){let i=e.rewriteUrl(t.toString());a=new URL(i)}else if(t instanceof Request){let i=e.rewriteUrl(t.url);i!==t.url&&(a=new Request(i,t))}return e.originalFetch.call(this,a,r)}}patchXHR(){if(!window.XMLHttpRequest)return;this.originalXHRPost=XMLHttpRequest.prototype.open;let e=this;XMLHttpRequest.prototype.open=function(t,r,a=!0,i,n){let c=typeof r=="string"?r:r.toString(),l=e.rewriteUrl(c);return e.originalXHRPost.call(this,t,l,a,i??null,n??null)}}};var _=`
6
6
  :host {
7
7
  --lamba-bg-main: #0f172a;
8
8
  --lamba-bg-card: #1e293b;
@@ -465,12 +465,12 @@
465
465
  .lamba-btn-danger:hover {
466
466
  background: rgba(239, 68, 68, 0.3);
467
467
  }
468
- `;function I(){if(typeof document>"u")throw new Error("[lamba] Document object not available.");let s=document.getElementById("lamba-root");s||(s=document.createElement("lamba-widget"),s.id="lamba-root",document.body.appendChild(s));let e=s.shadowRoot;if(!e){e=s.attachShadow({mode:"open"});let r=document.createElement("style");r.textContent=A,e.appendChild(r)}return{host:s,shadowRoot:e}}var w=class{constructor(e,r="bottom-right",t){this.onClickCallback=t,this.element=document.createElement("div"),this.element.className=`lamba-launcher lamba-launcher-${r}`,this.element.title="Open lamba Environment Controls",this.element.innerHTML=`
468
+ `;function H(){if(typeof document>"u")throw new Error("[lamba] Document object not available.");let s=document.getElementById("lamba-root");s||(s=document.createElement("lamba-widget"),s.id="lamba-root",document.body.appendChild(s));let e=s.shadowRoot;if(!e){e=s.attachShadow({mode:"open"});let t=document.createElement("style");t.textContent=_,e.appendChild(t)}return{host:s,shadowRoot:e}}var w=class{constructor(e,t="bottom-right",r){this.onClickCallback=r,this.element=document.createElement("div"),this.element.className=`lamba-launcher lamba-launcher-${t}`,this.element.title="Open lamba Environment Controls",this.element.innerHTML=`
469
469
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
470
470
  <path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/>
471
471
  <circle cx="12" cy="12" r="3"/>
472
472
  </svg>
473
- `,this.badgeElement=document.createElement("div"),this.badgeElement.className="lamba-badge",this.badgeElement.style.display="none",this.element.appendChild(this.badgeElement),this.element.addEventListener("click",()=>this.onClickCallback()),e.appendChild(this.element)}updateBadgeCount(e){e>0?(this.badgeElement.textContent=String(e),this.badgeElement.style.display="flex"):this.badgeElement.style.display="none"}setVisible(e){this.element.style.display=e?"flex":"none"}};var E=class{constructor(e,r,t){this.activeTab="all";this.searchQuery="";this.secretVisibilityMap=new Map;this.isOpen=!1;this.store=r,this.overlay=document.createElement("div"),this.overlay.className="lamba-overlay",this.modal=document.createElement("div"),this.modal.className="lamba-modal";let a=document.createElement("div");a.className="lamba-header",a.innerHTML=`
473
+ `,this.badgeElement=document.createElement("div"),this.badgeElement.className="lamba-badge",this.badgeElement.style.display="none",this.element.appendChild(this.badgeElement),this.element.addEventListener("click",()=>this.onClickCallback()),e.appendChild(this.element)}updateBadgeCount(e){e>0?(this.badgeElement.textContent=String(e),this.badgeElement.style.display="flex"):this.badgeElement.style.display="none"}setVisible(e){this.element.style.display=e?"flex":"none"}};var E=class{constructor(e,t,r){this.activeTab="all";this.searchQuery="";this.secretVisibilityMap=new Map;this.isOpen=!1;this.store=t,this.overlay=document.createElement("div"),this.overlay.className="lamba-overlay",this.modal=document.createElement("div"),this.modal.className="lamba-modal";let a=document.createElement("div");a.className="lamba-header",a.innerHTML=`
474
474
  <div class="lamba-brand">
475
475
  <div class="lamba-logo">
476
476
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
@@ -486,17 +486,17 @@
486
486
  <line x1="6" y1="6" x2="18" y2="18"></line>
487
487
  </svg>
488
488
  </button>
489
- `,a.querySelector(".lamba-close-btn")?.addEventListener("click",()=>{this.close(),t()});let i=document.createElement("div");i.className="lamba-controls";let n=document.createElement("div");n.className="lamba-search-box",n.innerHTML=`
489
+ `,a.querySelector(".lamba-close-btn")?.addEventListener("click",()=>{this.close(),r()});let i=document.createElement("div");i.className="lamba-controls";let n=document.createElement("div");n.className="lamba-search-box",n.innerHTML=`
490
490
  <svg class="lamba-search-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
491
491
  <circle cx="11" cy="11" r="8"></circle>
492
492
  <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
493
493
  </svg>
494
494
  <input type="text" class="lamba-search-input" placeholder="Search environment keys or values..." />
495
- `,this.searchInput=n.querySelector(".lamba-search-input"),this.searchInput.addEventListener("input",o=>{this.searchQuery=o.target.value.toLowerCase(),this.render()});let l=document.createElement("div");l.className="lamba-tabs",l.innerHTML=`
495
+ `,this.searchInput=n.querySelector(".lamba-search-input"),this.searchInput.addEventListener("input",o=>{this.searchQuery=o.target.value.toLowerCase(),this.render()});let c=document.createElement("div");c.className="lamba-tabs",c.innerHTML=`
496
496
  <button class="lamba-tab active" data-tab="all">All</button>
497
497
  <button class="lamba-tab" data-tab="overridden">Modified</button>
498
498
  <button class="lamba-tab" data-tab="secrets">Secrets</button>
499
- `,this.tabAllBtn=l.querySelector('[data-tab="all"]'),this.tabOverriddenBtn=l.querySelector('[data-tab="overridden"]'),this.tabSecretsBtn=l.querySelector('[data-tab="secrets"]'),l.querySelectorAll(".lamba-tab").forEach(o=>{o.addEventListener("click",d=>{l.querySelectorAll(".lamba-tab").forEach(h=>h.classList.remove("active"));let b=d.currentTarget;b.classList.add("active"),this.activeTab=b.getAttribute("data-tab"),this.render()})}),i.appendChild(n),i.appendChild(l);let c=document.createElement("div");c.className="lamba-presets-bar",c.innerHTML=`
499
+ `,this.tabAllBtn=c.querySelector('[data-tab="all"]'),this.tabOverriddenBtn=c.querySelector('[data-tab="overridden"]'),this.tabSecretsBtn=c.querySelector('[data-tab="secrets"]'),c.querySelectorAll(".lamba-tab").forEach(o=>{o.addEventListener("click",d=>{c.querySelectorAll(".lamba-tab").forEach(h=>h.classList.remove("active"));let b=d.currentTarget;b.classList.add("active"),this.activeTab=b.getAttribute("data-tab"),this.render()})}),i.appendChild(n),i.appendChild(c);let l=document.createElement("div");l.className="lamba-presets-bar",l.innerHTML=`
500
500
  <div class="lamba-preset-selector">
501
501
  <span style="color: var(--lamba-text-secondary); font-weight: 600;">Preset Profile:</span>
502
502
  <select class="lamba-select lamba-preset-dropdown">
@@ -511,7 +511,7 @@
511
511
  </svg>
512
512
  Save as Preset
513
513
  </button>
514
- `,this.presetSelect=c.querySelector(".lamba-preset-dropdown"),this.presetSelect.addEventListener("change",()=>{let o=this.presetSelect.value||null;this.store.applyPreset(o)}),this.savePresetBtn=c.querySelector(".lamba-save-preset-btn"),this.savePresetBtn.addEventListener("click",()=>{let o=prompt("Enter a name for this Environment Preset Profile:","Staging Environment");if(o){let d=this.store.getOverrides();this.store.presetManager.createPreset(o,d),this.updatePresetDropdown()}}),this.contentList=document.createElement("div"),this.contentList.className="lamba-content";let p=document.createElement("div");p.className="lamba-footer",p.innerHTML=`
514
+ `,this.presetSelect=l.querySelector(".lamba-preset-dropdown"),this.presetSelect.addEventListener("change",()=>{let o=this.presetSelect.value||null;this.store.applyPreset(o)}),this.savePresetBtn=l.querySelector(".lamba-save-preset-btn"),this.savePresetBtn.addEventListener("click",()=>{let o=prompt("Enter a name for this Environment Preset Profile:","Staging Environment");if(o){let d=this.store.getOverrides();this.store.presetManager.createPreset(o,d),this.updatePresetDropdown()}}),this.contentList=document.createElement("div"),this.contentList.className="lamba-content";let p=document.createElement("div");p.className="lamba-footer",p.innerHTML=`
515
515
  <div style="display: flex; gap: 8px;">
516
516
  <button class="lamba-btn lamba-add-var-btn">
517
517
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -527,7 +527,7 @@
527
527
  <button class="lamba-btn lamba-btn-danger lamba-reset-all-btn">Reset All</button>
528
528
  <button class="lamba-btn lamba-btn-primary lamba-reload-btn">Reload Page</button>
529
529
  </div>
530
- `,p.querySelector(".lamba-add-var-btn")?.addEventListener("click",()=>{let o=prompt("Enter new environment variable key name (e.g. VITE_API_URL):");if(o){let d=prompt(`Enter value for ${o}:`)||"";this.store.setOverride(o,d)}}),p.querySelector(".lamba-import-btn")?.addEventListener("click",()=>{let o=document.createElement("input");o.type="file",o.accept=".env,.txt",o.onchange=d=>{let b=d.target.files[0];if(b){let h=new FileReader;h.onload=m=>{let v=m.target?.result;if(v){let k=u(v);for(let[C,V]of Object.entries(k))this.store.setOverride(C,V)}},h.readAsText(b)}},o.click()}),p.querySelector(".lamba-export-btn")?.addEventListener("click",()=>{let o=this.store.getAll(),d={};for(let[k,C]of Object.entries(o))d[k]=C.value;let b=f(d),h=new Blob([b],{type:"text/plain"}),m=URL.createObjectURL(h),v=document.createElement("a");v.href=m,v.download=".env",v.click(),URL.revokeObjectURL(m)}),p.querySelector(".lamba-reset-all-btn")?.addEventListener("click",()=>{confirm("Are you sure you want to reset all overridden environment variables?")&&this.store.resetAllOverrides()}),p.querySelector(".lamba-reload-btn")?.addEventListener("click",()=>{window.location.reload()}),this.modal.appendChild(a),this.modal.appendChild(i),this.modal.appendChild(c),this.modal.appendChild(this.contentList),this.modal.appendChild(p),this.overlay.appendChild(this.modal),this.overlay.addEventListener("click",o=>{o.target===this.overlay&&(this.close(),t())}),e.appendChild(this.overlay),this.store.subscribeStoreChange(()=>{this.isOpen&&(this.updatePresetDropdown(),this.render())})}open(){this.isOpen=!0,this.updatePresetDropdown(),this.render(),this.overlay.classList.add("active")}close(){this.isOpen=!1,this.overlay.classList.remove("active")}toggle(){this.isOpen?this.close():this.open()}updatePresetDropdown(){let e=this.store.presetManager.getPresets(),r=this.store.presetManager.getActivePresetId();this.presetSelect.innerHTML='<option value="">Default (Custom Overrides)</option>',e.forEach(t=>{let a=document.createElement("option");a.value=t.id,a.textContent=t.name,t.id===r&&(a.selected=!0),this.presetSelect.appendChild(a)})}render(){let e=this.store.getAll(),r=Object.values(e);if(this.activeTab==="overridden"?r=r.filter(t=>t.isOverridden):this.activeTab==="secrets"&&(r=r.filter(t=>t.isSecret)),this.searchQuery&&(r=r.filter(t=>t.key.toLowerCase().includes(this.searchQuery)||t.value.toLowerCase().includes(this.searchQuery))),r.sort((t,a)=>t.isOverridden!==a.isOverridden?t.isOverridden?-1:1:t.key.localeCompare(a.key)),this.contentList.innerHTML="",r.length===0){let t=document.createElement("div");t.className="lamba-empty",t.textContent=this.searchQuery||this.activeTab!=="all"?"No environment variables match your current filter.":'No environment variables found or registered. Click "+ Add Variable" or "Import .env" to get started.',this.contentList.appendChild(t);return}r.forEach(t=>{let a=this.createVarCard(t);this.contentList.appendChild(a)})}createVarCard(e){let r=document.createElement("div");r.className=`lamba-var-card ${e.isOverridden?"is-overridden":""}`;let t=this.secretVisibilityMap.get(e.key)??!e.isSecret;r.innerHTML=`
530
+ `,p.querySelector(".lamba-add-var-btn")?.addEventListener("click",()=>{let o=prompt("Enter new environment variable key name (e.g. API_URL, NEXT_PUBLIC_API_URL, REACT_APP_API_URL, VITE_API_URL):");if(o){let d=prompt(`Enter value for ${o}:`)||"";this.store.setOverride(o,d)}}),p.querySelector(".lamba-import-btn")?.addEventListener("click",()=>{let o=document.createElement("input");o.type="file",o.accept=".env,.txt",o.onchange=d=>{let b=d.target.files[0];if(b){let h=new FileReader;h.onload=m=>{let u=m.target?.result;if(u){let k=v(u);for(let[P,I]of Object.entries(k))this.store.setOverride(P,I)}},h.readAsText(b)}},o.click()}),p.querySelector(".lamba-export-btn")?.addEventListener("click",()=>{let o=this.store.getAll(),d={};for(let[k,P]of Object.entries(o))d[k]=P.value;let b=f(d),h=new Blob([b],{type:"text/plain"}),m=URL.createObjectURL(h),u=document.createElement("a");u.href=m,u.download=".env",u.click(),URL.revokeObjectURL(m)}),p.querySelector(".lamba-reset-all-btn")?.addEventListener("click",()=>{confirm("Are you sure you want to reset all overridden environment variables?")&&this.store.resetAllOverrides()}),p.querySelector(".lamba-reload-btn")?.addEventListener("click",()=>{window.location.reload()}),this.modal.appendChild(a),this.modal.appendChild(i),this.modal.appendChild(l),this.modal.appendChild(this.contentList),this.modal.appendChild(p),this.overlay.appendChild(this.modal),this.overlay.addEventListener("click",o=>{o.target===this.overlay&&(this.close(),r())}),e.appendChild(this.overlay),this.store.subscribeStoreChange(()=>{this.isOpen&&(this.updatePresetDropdown(),this.render())})}open(){this.isOpen=!0,this.updatePresetDropdown(),this.render(),this.overlay.classList.add("active")}close(){this.isOpen=!1,this.overlay.classList.remove("active")}toggle(){this.isOpen?this.close():this.open()}updatePresetDropdown(){let e=this.store.presetManager.getPresets(),t=this.store.presetManager.getActivePresetId();this.presetSelect.innerHTML='<option value="">Default (Custom Overrides)</option>',e.forEach(r=>{let a=document.createElement("option");a.value=r.id,a.textContent=r.name,r.id===t&&(a.selected=!0),this.presetSelect.appendChild(a)})}render(){let e=this.store.getAll(),t=Object.values(e);if(this.activeTab==="overridden"?t=t.filter(r=>r.isOverridden):this.activeTab==="secrets"&&(t=t.filter(r=>r.isSecret)),this.searchQuery&&(t=t.filter(r=>r.key.toLowerCase().includes(this.searchQuery)||r.value.toLowerCase().includes(this.searchQuery))),t.sort((r,a)=>r.isOverridden!==a.isOverridden?r.isOverridden?-1:1:r.key.localeCompare(a.key)),this.contentList.innerHTML="",t.length===0){let r=document.createElement("div");r.className="lamba-empty",r.textContent=this.searchQuery||this.activeTab!=="all"?"No environment variables match your current filter.":'No environment variables found or registered. Click "+ Add Variable" or "Import .env" to get started.',this.contentList.appendChild(r);return}t.forEach(r=>{let a=this.createVarCard(r);this.contentList.appendChild(a)})}createVarCard(e){let t=document.createElement("div");t.className=`lamba-var-card ${e.isOverridden?"is-overridden":""}`;let r=this.secretVisibilityMap.get(e.key)??!e.isSecret;t.innerHTML=`
531
531
  <div class="lamba-var-meta">
532
532
  <div class="lamba-var-key">
533
533
  ${e.key}
@@ -535,9 +535,9 @@
535
535
  ${e.isSecret?'<span style="font-size:10px; color:var(--lamba-warning); font-weight:600;">SECRET</span>':""}
536
536
  </div>
537
537
  <div class="lamba-var-actions">
538
- ${e.isSecret?`<button class="lamba-icon-btn toggle-secret-btn" title="${t?"Hide secret":"Show secret"}">
538
+ ${e.isSecret?`<button class="lamba-icon-btn toggle-secret-btn" title="${r?"Hide secret":"Show secret"}">
539
539
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
540
- ${t?'<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/>':'<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/>'}
540
+ ${r?'<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/>':'<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/>'}
541
541
  </svg>
542
542
  </button>`:""}
543
543
  ${e.isOverridden?`<button class="lamba-icon-btn reset-var-btn" title="Reset to default">
@@ -550,11 +550,11 @@
550
550
  </div>
551
551
  <div class="lamba-var-input-group">
552
552
  <input
553
- type="${t?"text":"password"}"
553
+ type="${r?"text":"password"}"
554
554
  class="lamba-input var-input"
555
555
  value="${this.escapeHtml(e.value)}"
556
556
  placeholder="Value..."
557
557
  />
558
558
  </div>
559
559
  ${e.isOverridden&&e.defaultValue?`<div class="lamba-diff">Original default: <span class="lamba-diff-val">${this.escapeHtml(e.defaultValue)}</span></div>`:""}
560
- `;let a=r.querySelector(".var-input");return a.addEventListener("change",()=>{this.store.setOverride(e.key,a.value)}),r.querySelector(".toggle-secret-btn")?.addEventListener("click",()=>{this.secretVisibilityMap.set(e.key,!t),this.render()}),r.querySelector(".reset-var-btn")?.addEventListener("click",()=>{this.store.removeOverride(e.key)}),r}escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}};var S=class{constructor(){this.store=null;this.launcher=null;this.modal=null;this.networkInterceptor=null;this.options={};this.isInitialized=!1;let e=this;this.env=new Proxy({},{get(r,t){if(typeof t=="string")return e.get(t)},set(r,t,a){return typeof t=="string"?(e.set(t,String(a)),!0):!1}})}wrap(e){let r=this;return new Proxy(e,{get(t,a){if(typeof a=="string"){let i=r.get(a);if(i!==void 0&&i!=="")return i}return Reflect.get(t,a)}})}init(e={}){if(typeof window>"u")return this;if(this.isInitialized)return this;if(this.options={enabled:!0,position:"bottom-right",autoFetchEnvFile:!1,interceptNetworkRequests:!0,...e},this.options.enabled===!1)return this;this.store=new x(this.options),this.options.interceptNetworkRequests!==!1&&(this.networkInterceptor=new y(this.store),this.networkInterceptor.enable());let r=()=>{if(this.launcher||!this.store)return;let{shadowRoot:t}=I();this.modal=new E(t,this.store,()=>{}),this.launcher=new w(t,this.options.position,()=>{this.modal?.toggle()});let a=Object.keys(this.store.getOverrides()).length;this.launcher.updateBadgeCount(a),this.store.subscribeStoreChange(()=>{let i=Object.keys(this.store.getOverrides()).length;this.launcher?.updateBadgeCount(i)})};return document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r(),this.isInitialized=!0,this}get(e,r){return this.store||this.init(),this.store?.get(e,r)??r??""}set(e,r){this.store||this.init(),this.store?.setOverride(e,r)}remove(e){this.store?.removeOverride(e)}reset(){this.store?.resetAllOverrides()}onChange(e){return this.store||this.init(),this.store?.subscribeEnvChange(e)??(()=>{})}open(){this.modal?.open()}close(){this.modal?.close()}toggle(){this.modal?.toggle()}},L=new S;typeof window<"u"&&(window.lamba=L,(document.currentScript!==null||document.querySelector('script[src*="lamba"]'))&&L.init());var z=L;return U(D);})();
560
+ `;let a=t.querySelector(".var-input");return a.addEventListener("change",()=>{this.store.setOverride(e.key,a.value)}),t.querySelector(".toggle-secret-btn")?.addEventListener("click",()=>{this.secretVisibilityMap.set(e.key,!r),this.render()}),t.querySelector(".reset-var-btn")?.addEventListener("click",()=>{this.store.removeOverride(e.key)}),t}escapeHtml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}};var S=class{constructor(){this.store=null;this.launcher=null;this.modal=null;this.networkInterceptor=null;this.options={};this.isInitialized=!1;let e=this;this.env=new Proxy({},{get(t,r){if(typeof r=="string")return e.get(r)},set(t,r,a){return typeof r=="string"?(e.set(r,String(a)),!0):!1}})}wrap(e){if(this.store||this.init(),e&&typeof e=="object"&&this.store)try{let r={};for(let[a,i]of Object.entries(e))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(r[a]=String(i));Object.keys(r).length>0&&this.store.mergeDefaults(r)}catch{}let t=this;return new Proxy(e,{get(r,a){if(typeof a=="string"){let i=t.get(a);if(i!==void 0&&i!=="")return i}return Reflect.get(r,a)}})}init(e={}){if(typeof window>"u")return this;if(this.isInitialized)return this;if(this.options={enabled:!0,position:"bottom-right",autoFetchEnvFile:!1,interceptNetworkRequests:!0,...e},this.options.enabled===!1)return this;this.store=new x(this.options),this.options.interceptNetworkRequests!==!1&&(this.networkInterceptor=new y(this.store),this.networkInterceptor.enable());let t=()=>{if(this.launcher||!this.store)return;let{shadowRoot:r}=H();this.modal=new E(r,this.store,()=>{}),this.launcher=new w(r,this.options.position,()=>{this.modal?.toggle()});let a=Object.keys(this.store.getOverrides()).length;this.launcher.updateBadgeCount(a),this.store.subscribeStoreChange(()=>{let i=Object.keys(this.store.getOverrides()).length;this.launcher?.updateBadgeCount(i)})};return document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t(),this.isInitialized=!0,this}get(e,t){return this.store||this.init(),this.store?.get(e,t)??t??""}set(e,t){this.store||this.init(),this.store?.setOverride(e,t)}remove(e){this.store?.removeOverride(e)}reset(){this.store?.resetAllOverrides()}onChange(e){return this.store||this.init(),this.store?.subscribeEnvChange(e)??(()=>{})}open(){this.modal?.open()}close(){this.modal?.close()}toggle(){this.modal?.toggle()}},L=new S;typeof window<"u"&&(window.lamba=L,(document.currentScript!==null||document.querySelector('script[src*="lamba"]'))&&L.init());var z=L;return N(D);})();
package/package.json CHANGED
@@ -1,7 +1,15 @@
1
1
  {
2
2
  "name": "@ojolowoblue/lamba",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A universal dev tool for viewing, overriding, and swapping environment variables live in web applications.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/ojolowoblue/lamba.git"
8
+ },
9
+ "bugs": {
10
+ "url": "https://github.com/ojolowoblue/lamba/issues"
11
+ },
12
+ "homepage": "https://github.com/ojolowoblue/lamba#readme",
5
13
  "main": "./dist/index.cjs",
6
14
  "module": "./dist/index.mjs",
7
15
  "types": "./dist/index.d.ts",