@flowgram.ai/utils 0.1.0-alpha.2 → 0.1.0-alpha.21

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/esm/index.js CHANGED
@@ -1275,6 +1275,27 @@ var _hasOwnProperty = Object.prototype.hasOwnProperty;
1275
1275
  function notEmpty(arg) {
1276
1276
  return arg !== void 0 && arg !== null;
1277
1277
  }
1278
+ var safeKey = (key) => {
1279
+ const dangerousProps = [
1280
+ "__proto__",
1281
+ "constructor",
1282
+ "prototype",
1283
+ "__defineGetter__",
1284
+ "__defineSetter__",
1285
+ "__lookupGetter__",
1286
+ "__lookupSetter__",
1287
+ "hasOwnProperty",
1288
+ "isPrototypeOf",
1289
+ "propertyIsEnumerable",
1290
+ "toString",
1291
+ "valueOf",
1292
+ "toLocaleString"
1293
+ ];
1294
+ if (dangerousProps.includes(key.toLowerCase())) {
1295
+ return "";
1296
+ }
1297
+ return key;
1298
+ };
1278
1299
  function isEmpty(arg) {
1279
1300
  return keys(arg).length === 0 && arg.constructor === Object;
1280
1301
  }
@@ -1306,18 +1327,18 @@ function setByKey(target, key, newValue, autoCreateObject = true, clone = false)
1306
1327
  while (targetKeys.length > 0) {
1307
1328
  key = targetKeys.shift();
1308
1329
  if (targetKeys.length === 0) {
1309
- target[key] = newValue;
1330
+ target[safeKey(key)] = newValue;
1310
1331
  return originTarget;
1311
1332
  }
1312
1333
  if (typeof target[key] !== "object") {
1313
1334
  if (!autoCreateObject) return originTarget;
1314
- target[key] = {};
1335
+ target[safeKey(key)] = {};
1315
1336
  }
1316
1337
  if (clone) {
1317
1338
  if (Array.isArray(target[key])) {
1318
- target[key] = target[key].slice();
1339
+ target[safeKey(key)] = target[key].slice();
1319
1340
  } else {
1320
- target[key] = { ...target[key] };
1341
+ target[safeKey(key)] = { ...target[key] };
1321
1342
  }
1322
1343
  }
1323
1344
  target = target[key];
@@ -1356,11 +1377,27 @@ function isNumber(v) {
1356
1377
  return typeof v === "number" || isObject(v) && getTag(v) === "[object Number]";
1357
1378
  }
1358
1379
 
1380
+ // src/disposable.ts
1381
+ var Disposable;
1382
+ ((Disposable2) => {
1383
+ function is(thing) {
1384
+ return typeof thing === "object" && thing !== null && typeof thing.dispose === "function";
1385
+ }
1386
+ Disposable2.is = is;
1387
+ function create(func) {
1388
+ return {
1389
+ dispose: func
1390
+ };
1391
+ }
1392
+ Disposable2.create = create;
1393
+ Disposable2.NULL = Object.freeze(create(() => {
1394
+ }));
1395
+ })(Disposable || (Disposable = {}));
1396
+
1359
1397
  // src/event.ts
1360
- var DisposableNULL = Object.freeze({ dispose: NOOP });
1361
1398
  var Event;
1362
- ((Event2) => {
1363
- Event2.None = () => DisposableNULL;
1399
+ ((Event3) => {
1400
+ Event3.None = () => Disposable.NULL;
1364
1401
  })(Event || (Event = {}));
1365
1402
  var _Emitter = class _Emitter {
1366
1403
  constructor() {
@@ -1370,7 +1407,7 @@ var _Emitter = class _Emitter {
1370
1407
  if (!this._event) {
1371
1408
  this._event = (listener, thisArgs) => {
1372
1409
  if (this._disposed) {
1373
- return DisposableNULL;
1410
+ return Disposable.NULL;
1374
1411
  }
1375
1412
  if (!this._listeners) {
1376
1413
  this._listeners = [];
@@ -1414,22 +1451,7 @@ var _Emitter = class _Emitter {
1414
1451
  _Emitter.LEAK_WARNING_THRESHHOLD = 175;
1415
1452
  var Emitter = _Emitter;
1416
1453
 
1417
- // src/disposable.ts
1418
- var Disposable;
1419
- ((Disposable2) => {
1420
- function is(thing) {
1421
- return typeof thing === "object" && thing !== null && typeof thing.dispose === "function";
1422
- }
1423
- Disposable2.is = is;
1424
- function create(func) {
1425
- return {
1426
- dispose: func
1427
- };
1428
- }
1429
- Disposable2.create = create;
1430
- Disposable2.NULL = Object.freeze(create(() => {
1431
- }));
1432
- })(Disposable || (Disposable = {}));
1454
+ // src/disposable-collection.ts
1433
1455
  var DisposableImpl = class {
1434
1456
  constructor() {
1435
1457
  this.toDispose = new DisposableCollection();
@@ -1451,6 +1473,9 @@ var DisposableCollection = class {
1451
1473
  this._disposed = false;
1452
1474
  toDispose.forEach((d) => this.push(d));
1453
1475
  }
1476
+ get length() {
1477
+ return this.disposables.length;
1478
+ }
1454
1479
  get onDispose() {
1455
1480
  return this.onDisposeEmitter.event;
1456
1481
  }
@@ -1474,25 +1499,26 @@ var DisposableCollection = class {
1474
1499
  }
1475
1500
  push(disposable) {
1476
1501
  if (this.disposed) return Disposable.NULL;
1502
+ if (disposable === Disposable.NULL) {
1503
+ return Disposable.NULL;
1504
+ }
1477
1505
  const { disposables } = this;
1478
- if (disposables.find((d) => d._origin === disposable)) {
1506
+ if (disposables.find((d) => d === disposable)) {
1479
1507
  return Disposable.NULL;
1480
1508
  }
1481
- let disposableWrap;
1509
+ const originalDispose = disposable.dispose;
1482
1510
  const toRemove = Disposable.create(() => {
1483
- const index = disposables.indexOf(disposableWrap);
1511
+ const index = disposables.indexOf(disposable);
1484
1512
  if (index !== -1) {
1485
1513
  disposables.splice(index, 1);
1486
1514
  }
1515
+ disposable.dispose = originalDispose;
1487
1516
  });
1488
- disposableWrap = {
1489
- dispose: () => {
1490
- toRemove.dispose();
1491
- disposable.dispose();
1492
- },
1493
- _origin: disposable
1517
+ disposable.dispose = () => {
1518
+ toRemove.dispose();
1519
+ disposable.dispose();
1494
1520
  };
1495
- disposables.push(disposableWrap);
1521
+ disposables.push(disposable);
1496
1522
  return toRemove;
1497
1523
  }
1498
1524
  pushAll(disposables) {
@@ -2486,6 +2512,7 @@ export {
2486
2512
  reduce,
2487
2513
  requestWithMemo,
2488
2514
  retry,
2515
+ safeKey,
2489
2516
  setByKey,
2490
2517
  useRefresh,
2491
2518
  values