@ojolowoblue/lamba 1.0.4 → 1.0.6
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/README.md +74 -20
- package/dist/index.d.mts +73 -10
- package/dist/index.d.ts +73 -10
- package/dist/index.js +144 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +141 -26
- package/dist/index.mjs.map +1 -1
- package/dist/integrations/react.d.mts +1 -1
- package/dist/integrations/react.d.ts +1 -1
- package/dist/integrations/react.js +139 -27
- package/dist/integrations/react.js.map +1 -1
- package/dist/integrations/react.mjs +139 -27
- package/dist/integrations/react.mjs.map +1 -1
- package/dist/integrations/vue.d.mts +1 -1
- package/dist/integrations/vue.d.ts +1 -1
- package/dist/integrations/vue.js +139 -27
- package/dist/integrations/vue.js.map +1 -1
- package/dist/integrations/vue.mjs +139 -27
- package/dist/integrations/vue.mjs.map +1 -1
- package/dist/lamba.min.js +10 -10
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -2,34 +2,33 @@
|
|
|
2
2
|
var STORAGE_PRESETS_KEY = "__lamba_presets__";
|
|
3
3
|
var STORAGE_ACTIVE_PRESET_KEY = "__lamba_active_preset__";
|
|
4
4
|
var PresetManager = class {
|
|
5
|
-
constructor() {
|
|
5
|
+
constructor(storage) {
|
|
6
6
|
this.presets = [];
|
|
7
7
|
this.activePresetId = null;
|
|
8
|
+
this.storage = storage;
|
|
8
9
|
this.loadFromStorage();
|
|
9
10
|
}
|
|
10
11
|
loadFromStorage() {
|
|
11
|
-
if (typeof localStorage === "undefined") return;
|
|
12
12
|
try {
|
|
13
|
-
const rawPresets =
|
|
13
|
+
const rawPresets = this.storage.getItem(STORAGE_PRESETS_KEY);
|
|
14
14
|
if (rawPresets) {
|
|
15
15
|
this.presets = JSON.parse(rawPresets);
|
|
16
16
|
}
|
|
17
|
-
this.activePresetId =
|
|
17
|
+
this.activePresetId = this.storage.getItem(STORAGE_ACTIVE_PRESET_KEY);
|
|
18
18
|
} catch (e) {
|
|
19
|
-
console.warn("[lamba] Failed to parse presets from
|
|
19
|
+
console.warn("[lamba] Failed to parse presets from storage", e);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
saveToStorage() {
|
|
23
|
-
if (typeof localStorage === "undefined") return;
|
|
24
23
|
try {
|
|
25
|
-
|
|
24
|
+
this.storage.setItem(STORAGE_PRESETS_KEY, JSON.stringify(this.presets));
|
|
26
25
|
if (this.activePresetId) {
|
|
27
|
-
|
|
26
|
+
this.storage.setItem(STORAGE_ACTIVE_PRESET_KEY, this.activePresetId);
|
|
28
27
|
} else {
|
|
29
|
-
|
|
28
|
+
this.storage.removeItem(STORAGE_ACTIVE_PRESET_KEY);
|
|
30
29
|
}
|
|
31
30
|
} catch (e) {
|
|
32
|
-
console.warn("[lamba] Failed to save presets to
|
|
31
|
+
console.warn("[lamba] Failed to save presets to storage", e);
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
getPresets() {
|
|
@@ -181,6 +180,99 @@ async function tryFetchRootEnvFile() {
|
|
|
181
180
|
return {};
|
|
182
181
|
}
|
|
183
182
|
|
|
183
|
+
// src/core/storage.ts
|
|
184
|
+
var LocalStorageAdapter = class {
|
|
185
|
+
getItem(key) {
|
|
186
|
+
try {
|
|
187
|
+
return typeof localStorage !== "undefined" ? localStorage.getItem(key) : null;
|
|
188
|
+
} catch {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
setItem(key, value) {
|
|
193
|
+
try {
|
|
194
|
+
if (typeof localStorage !== "undefined") localStorage.setItem(key, value);
|
|
195
|
+
} catch {
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
removeItem(key) {
|
|
199
|
+
try {
|
|
200
|
+
if (typeof localStorage !== "undefined") localStorage.removeItem(key);
|
|
201
|
+
} catch {
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
clear() {
|
|
205
|
+
try {
|
|
206
|
+
if (typeof localStorage !== "undefined") {
|
|
207
|
+
localStorage.removeItem("__lamba_overrides__");
|
|
208
|
+
localStorage.removeItem("__lamba_presets__");
|
|
209
|
+
localStorage.removeItem("__lamba_active_preset__");
|
|
210
|
+
}
|
|
211
|
+
} catch {
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
var SessionStorageAdapter = class {
|
|
216
|
+
getItem(key) {
|
|
217
|
+
try {
|
|
218
|
+
return typeof sessionStorage !== "undefined" ? sessionStorage.getItem(key) : null;
|
|
219
|
+
} catch {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
setItem(key, value) {
|
|
224
|
+
try {
|
|
225
|
+
if (typeof sessionStorage !== "undefined") sessionStorage.setItem(key, value);
|
|
226
|
+
} catch {
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
removeItem(key) {
|
|
230
|
+
try {
|
|
231
|
+
if (typeof sessionStorage !== "undefined") sessionStorage.removeItem(key);
|
|
232
|
+
} catch {
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
clear() {
|
|
236
|
+
try {
|
|
237
|
+
if (typeof sessionStorage !== "undefined") {
|
|
238
|
+
sessionStorage.removeItem("__lamba_overrides__");
|
|
239
|
+
sessionStorage.removeItem("__lamba_presets__");
|
|
240
|
+
sessionStorage.removeItem("__lamba_active_preset__");
|
|
241
|
+
}
|
|
242
|
+
} catch {
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
var MemoryStorageAdapter = class {
|
|
247
|
+
constructor() {
|
|
248
|
+
this.store = /* @__PURE__ */ new Map();
|
|
249
|
+
}
|
|
250
|
+
getItem(key) {
|
|
251
|
+
return this.store.get(key) ?? null;
|
|
252
|
+
}
|
|
253
|
+
setItem(key, value) {
|
|
254
|
+
this.store.set(key, value);
|
|
255
|
+
}
|
|
256
|
+
removeItem(key) {
|
|
257
|
+
this.store.delete(key);
|
|
258
|
+
}
|
|
259
|
+
clear() {
|
|
260
|
+
this.store.clear();
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
function createStorageAdapter(strategy = "local", custom) {
|
|
264
|
+
if (custom) return custom;
|
|
265
|
+
switch (strategy) {
|
|
266
|
+
case "session":
|
|
267
|
+
return new SessionStorageAdapter();
|
|
268
|
+
case "memory":
|
|
269
|
+
return new MemoryStorageAdapter();
|
|
270
|
+
case "local":
|
|
271
|
+
default:
|
|
272
|
+
return new LocalStorageAdapter();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
184
276
|
// src/core/store.ts
|
|
185
277
|
var STORAGE_OVERRIDES_KEY = "__lamba_overrides__";
|
|
186
278
|
var DEFAULT_SECRET_PATTERN = /(KEY|SECRET|TOKEN|PASSWORD|AUTH|PRIVATE|CREDENTIAL|SIGNATURE)/i;
|
|
@@ -192,7 +284,8 @@ var EnvStore = class {
|
|
|
192
284
|
this.storeChangeListeners = /* @__PURE__ */ new Set();
|
|
193
285
|
this.secretPattern = options.secretKeysPattern || DEFAULT_SECRET_PATTERN;
|
|
194
286
|
this.allowedPrefixes = options.allowedPrefixes;
|
|
195
|
-
this.
|
|
287
|
+
this.storage = createStorageAdapter(options.storageStrategy ?? "local", options.storage);
|
|
288
|
+
this.presetManager = new PresetManager(this.storage);
|
|
196
289
|
this.loadOverridesFromStorage();
|
|
197
290
|
if (options.env) {
|
|
198
291
|
this.mergeDefaults(options.env);
|
|
@@ -209,22 +302,20 @@ var EnvStore = class {
|
|
|
209
302
|
this.patchProcessEnv();
|
|
210
303
|
}
|
|
211
304
|
loadOverridesFromStorage() {
|
|
212
|
-
if (typeof localStorage === "undefined") return;
|
|
213
305
|
try {
|
|
214
|
-
const stored =
|
|
306
|
+
const stored = this.storage.getItem(STORAGE_OVERRIDES_KEY);
|
|
215
307
|
if (stored) {
|
|
216
308
|
this.overrides = JSON.parse(stored);
|
|
217
309
|
}
|
|
218
310
|
} catch (e) {
|
|
219
|
-
console.warn("[lamba] Failed to parse overrides from
|
|
311
|
+
console.warn("[lamba] Failed to parse overrides from storage", e);
|
|
220
312
|
}
|
|
221
313
|
}
|
|
222
314
|
saveOverridesToStorage() {
|
|
223
|
-
if (typeof localStorage === "undefined") return;
|
|
224
315
|
try {
|
|
225
|
-
|
|
316
|
+
this.storage.setItem(STORAGE_OVERRIDES_KEY, JSON.stringify(this.overrides));
|
|
226
317
|
} catch (e) {
|
|
227
|
-
console.warn("[lamba] Failed to save overrides to
|
|
318
|
+
console.warn("[lamba] Failed to save overrides to storage", e);
|
|
228
319
|
}
|
|
229
320
|
}
|
|
230
321
|
/**
|
|
@@ -277,9 +368,9 @@ var EnvStore = class {
|
|
|
277
368
|
let changed = false;
|
|
278
369
|
for (const [key, rawDefault] of Object.entries(env)) {
|
|
279
370
|
if (!this.isAllowedKey(key)) continue;
|
|
280
|
-
const defaultValue = rawDefault
|
|
371
|
+
const defaultValue = rawDefault;
|
|
281
372
|
const isOverridden = key in this.overrides;
|
|
282
|
-
const currentValue = isOverridden ?
|
|
373
|
+
const currentValue = isOverridden ? this.overrides[key] : defaultValue;
|
|
283
374
|
const isSecret = this.secretPattern.test(key);
|
|
284
375
|
const existing = this.variables.get(key);
|
|
285
376
|
if (!existing) {
|
|
@@ -1333,7 +1424,15 @@ var ModalUI = class {
|
|
|
1333
1424
|
`;
|
|
1334
1425
|
const inputEl = card.querySelector(".var-input");
|
|
1335
1426
|
inputEl.addEventListener("change", () => {
|
|
1336
|
-
|
|
1427
|
+
let val = inputEl.value;
|
|
1428
|
+
if (typeof varItem.defaultValue === "boolean") {
|
|
1429
|
+
if (val === "true") val = true;
|
|
1430
|
+
else if (val === "false") val = false;
|
|
1431
|
+
} else if (typeof varItem.defaultValue === "number") {
|
|
1432
|
+
const num = Number(val);
|
|
1433
|
+
if (!isNaN(num) && val.trim() !== "") val = num;
|
|
1434
|
+
}
|
|
1435
|
+
this.store.setOverride(varItem.key, val);
|
|
1337
1436
|
});
|
|
1338
1437
|
card.querySelector(".toggle-secret-btn")?.addEventListener("click", () => {
|
|
1339
1438
|
this.secretVisibilityMap.set(varItem.key, !isVisible);
|
|
@@ -1346,7 +1445,8 @@ var ModalUI = class {
|
|
|
1346
1445
|
}
|
|
1347
1446
|
escapeHtml(str) {
|
|
1348
1447
|
if (str === null || str === void 0) return "";
|
|
1349
|
-
|
|
1448
|
+
const text = typeof str === "object" ? JSON.stringify(str) : String(str);
|
|
1449
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
1350
1450
|
}
|
|
1351
1451
|
};
|
|
1352
1452
|
|
|
@@ -1369,7 +1469,7 @@ var LambaManager = class {
|
|
|
1369
1469
|
},
|
|
1370
1470
|
set(_target, prop, value) {
|
|
1371
1471
|
if (typeof prop === "string") {
|
|
1372
|
-
self.set(prop,
|
|
1472
|
+
self.set(prop, value);
|
|
1373
1473
|
return true;
|
|
1374
1474
|
}
|
|
1375
1475
|
return false;
|
|
@@ -1388,9 +1488,7 @@ var LambaManager = class {
|
|
|
1388
1488
|
try {
|
|
1389
1489
|
const defaultObj = {};
|
|
1390
1490
|
for (const [k, v] of Object.entries(targetEnv)) {
|
|
1391
|
-
|
|
1392
|
-
defaultObj[k] = String(v);
|
|
1393
|
-
}
|
|
1491
|
+
defaultObj[k] = v;
|
|
1394
1492
|
}
|
|
1395
1493
|
if (Object.keys(defaultObj).length > 0) {
|
|
1396
1494
|
this.store.mergeDefaults(defaultObj);
|
|
@@ -1404,10 +1502,24 @@ var LambaManager = class {
|
|
|
1404
1502
|
if (typeof prop === "string") {
|
|
1405
1503
|
const overrideVal = self.get(prop);
|
|
1406
1504
|
if (overrideVal !== void 0 && overrideVal !== "") {
|
|
1505
|
+
const targetVal = Reflect.get(target, prop);
|
|
1506
|
+
if (typeof targetVal === "boolean") {
|
|
1507
|
+
if (overrideVal === "true" || overrideVal === true) return true;
|
|
1508
|
+
if (overrideVal === "false" || overrideVal === false) return false;
|
|
1509
|
+
} else if (typeof targetVal === "number" && typeof overrideVal === "string") {
|
|
1510
|
+
const num = Number(overrideVal);
|
|
1511
|
+
if (!isNaN(num)) return num;
|
|
1512
|
+
}
|
|
1407
1513
|
return overrideVal;
|
|
1408
1514
|
}
|
|
1409
1515
|
}
|
|
1410
1516
|
return Reflect.get(target, prop);
|
|
1517
|
+
},
|
|
1518
|
+
set(target, prop, value) {
|
|
1519
|
+
if (typeof prop === "string") {
|
|
1520
|
+
self.set(prop, value);
|
|
1521
|
+
}
|
|
1522
|
+
return Reflect.set(target, prop, value);
|
|
1411
1523
|
}
|
|
1412
1524
|
});
|
|
1413
1525
|
}
|
|
@@ -1460,7 +1572,7 @@ var LambaManager = class {
|
|
|
1460
1572
|
if (!this.store) {
|
|
1461
1573
|
this.init();
|
|
1462
1574
|
}
|
|
1463
|
-
return this.store?.get(key, fallback) ?? fallback
|
|
1575
|
+
return this.store?.get(key, fallback) ?? fallback;
|
|
1464
1576
|
}
|
|
1465
1577
|
/**
|
|
1466
1578
|
* Overrides an environment variable live at runtime.
|
|
@@ -1519,6 +1631,9 @@ if (typeof window !== "undefined") {
|
|
|
1519
1631
|
var index_default = lamba;
|
|
1520
1632
|
export {
|
|
1521
1633
|
LambaManager,
|
|
1634
|
+
LocalStorageAdapter,
|
|
1635
|
+
MemoryStorageAdapter,
|
|
1636
|
+
SessionStorageAdapter,
|
|
1522
1637
|
index_default as default,
|
|
1523
1638
|
lamba,
|
|
1524
1639
|
parseEnvString,
|