@nlozgachev/pipelined 0.58.0 → 0.60.0

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/index.cjs CHANGED
@@ -296,13 +296,25 @@ function juxt(fns) {
296
296
  var memoize = (f, options) => {
297
297
  const cache = /* @__PURE__ */ new Map();
298
298
  const keyFn = options?.key ?? ((a) => a);
299
+ const maxSize = options?.maxSize;
299
300
  return (a) => {
300
301
  const key = keyFn(a);
301
302
  if (cache.has(key)) {
302
- return cache.get(key);
303
+ const cached = cache.get(key);
304
+ if (maxSize !== void 0) {
305
+ cache.delete(key);
306
+ cache.set(key, cached);
307
+ }
308
+ return cached;
303
309
  }
304
310
  const result = f(a);
305
311
  cache.set(key, result);
312
+ if (maxSize !== void 0 && cache.size > maxSize) {
313
+ const firstKey = cache.keys().next().value;
314
+ if (firstKey !== void 0) {
315
+ cache.delete(firstKey);
316
+ }
317
+ }
306
318
  return result;
307
319
  };
308
320
  };
@@ -2312,6 +2324,7 @@ var Stream;
2312
2324
  Stream2.make = (options) => ({
2313
2325
  options,
2314
2326
  _listeners: /* @__PURE__ */ new Set(),
2327
+ _listenerArray: null,
2315
2328
  _queue: [],
2316
2329
  _isEmitting: false
2317
2330
  });
@@ -2325,7 +2338,10 @@ var Stream;
2325
2338
  try {
2326
2339
  while (stream._queue.length > 0) {
2327
2340
  const nextMsg = stream._queue.shift();
2328
- const listeners = Array.from(stream._listeners);
2341
+ if (stream._listenerArray === null) {
2342
+ stream._listenerArray = Array.from(stream._listeners);
2343
+ }
2344
+ const listeners = stream._listenerArray;
2329
2345
  for (const listener of listeners) {
2330
2346
  try {
2331
2347
  listener(nextMsg);
@@ -2356,8 +2372,10 @@ var Stream;
2356
2372
  }
2357
2373
  };
2358
2374
  options.from._listeners.add(handler);
2375
+ options.from._listenerArray = null;
2359
2376
  return () => {
2360
2377
  options.from._listeners.delete(handler);
2378
+ options.from._listenerArray = null;
2361
2379
  };
2362
2380
  };
2363
2381
  Stream2.listen = (stream, events, options) => {
@@ -2411,12 +2429,15 @@ var Stream;
2411
2429
  currentState = reducer(msg, currentState);
2412
2430
  if (isOnce) {
2413
2431
  stream._listeners.delete(listenerFn);
2432
+ stream._listenerArray = null;
2414
2433
  }
2415
2434
  });
2416
2435
  const unsubscribe = () => {
2417
2436
  stream._listeners.delete(listenerFn);
2437
+ stream._listenerArray = null;
2418
2438
  };
2419
2439
  stream._listeners.add(listenerFn);
2440
+ stream._listenerArray = null;
2420
2441
  return { unsubscribe, getState: () => currentState };
2421
2442
  },
2422
2443
  tap: (effect) => {
@@ -2424,12 +2445,15 @@ var Stream;
2424
2445
  effect(msg);
2425
2446
  if (isOnce) {
2426
2447
  stream._listeners.delete(listenerFn);
2448
+ stream._listenerArray = null;
2427
2449
  }
2428
2450
  });
2429
2451
  const unsubscribe = () => {
2430
2452
  stream._listeners.delete(listenerFn);
2453
+ stream._listenerArray = null;
2431
2454
  };
2432
2455
  stream._listeners.add(listenerFn);
2456
+ stream._listenerArray = null;
2433
2457
  return unsubscribe;
2434
2458
  }
2435
2459
  };
@@ -3329,7 +3353,7 @@ var Arr;
3329
3353
  }
3330
3354
  return result;
3331
3355
  };
3332
- Arr2.uniq = (data) => [...new Set(data)];
3356
+ Arr2.uniq = (data) => data.length <= 1 ? data : [...new Set(data)];
3333
3357
  Arr2.uniqBy = (f) => (data) => {
3334
3358
  const seen = /* @__PURE__ */ new Set();
3335
3359
  const result = [];
@@ -3984,10 +4008,20 @@ var Num;
3984
4008
 
3985
4009
  // src/Data/Rec.ts
3986
4010
  var _isNonEmpty = (data) => Object.keys(data).length > 0;
4011
+ var _setKey = (record, key, value) => {
4012
+ if (key === "__proto__") {
4013
+ Object.defineProperty(record, key, { value, writable: true, enumerable: true, configurable: true });
4014
+ } else {
4015
+ record[key] = value;
4016
+ }
4017
+ };
3987
4018
  var RecMaybe;
3988
4019
  ((RecMaybe2) => {
3989
4020
  RecMaybe2.traverse = (f) => (data) => {
3990
4021
  const recordKeys = Object.keys(data);
4022
+ if (recordKeys.length === 0) {
4023
+ return { kind: "Some", value: {} };
4024
+ }
3991
4025
  const result = {};
3992
4026
  for (let i = 0; i < recordKeys.length; i++) {
3993
4027
  const key = recordKeys[i];
@@ -3995,7 +4029,7 @@ var RecMaybe;
3995
4029
  if (maybeVal.kind === "None") {
3996
4030
  return maybeVal;
3997
4031
  }
3998
- Object.defineProperty(result, key, { value: maybeVal.value, writable: true, enumerable: true, configurable: true });
4032
+ _setKey(result, key, maybeVal.value);
3999
4033
  }
4000
4034
  return { kind: "Some", value: result };
4001
4035
  };
@@ -4012,7 +4046,7 @@ var RecResult;
4012
4046
  if (res.kind === "Err") {
4013
4047
  return res;
4014
4048
  }
4015
- Object.defineProperty(result, key, { value: res.value, writable: true, enumerable: true, configurable: true });
4049
+ _setKey(result, key, res.value);
4016
4050
  }
4017
4051
  return { kind: "Ok", value: result };
4018
4052
  };
@@ -4065,12 +4099,7 @@ var Rec;
4065
4099
  for (let i = 0; i < recordKeys.length; i++) {
4066
4100
  const maybeVal = f(recordValues[i]);
4067
4101
  if (maybeVal.kind === "Some") {
4068
- Object.defineProperty(result, recordKeys[i], {
4069
- value: maybeVal.value,
4070
- writable: true,
4071
- enumerable: true,
4072
- configurable: true
4073
- });
4102
+ _setKey(result, recordKeys[i], maybeVal.value);
4074
4103
  }
4075
4104
  }
4076
4105
  return result;
@@ -4081,16 +4110,7 @@ var Rec;
4081
4110
  const result = Object.create(Object.getPrototypeOf(data));
4082
4111
  for (let i = 0; i < recordKeys.length; i++) {
4083
4112
  const key = recordKeys[i];
4084
- if (key === "__proto__") {
4085
- Object.defineProperty(result, "__proto__", {
4086
- value: f(key, recordValues[i]),
4087
- writable: true,
4088
- enumerable: true,
4089
- configurable: true
4090
- });
4091
- } else {
4092
- result[key] = f(key, recordValues[i]);
4093
- }
4113
+ _setKey(result, key, f(key, recordValues[i]));
4094
4114
  }
4095
4115
  return result;
4096
4116
  };
@@ -4100,12 +4120,7 @@ var Rec;
4100
4120
  const result = Object.create(Object.getPrototypeOf(data));
4101
4121
  for (let i = 0; i < recordKeys.length; i++) {
4102
4122
  if (predicate(recordValues[i])) {
4103
- Object.defineProperty(result, recordKeys[i], {
4104
- value: recordValues[i],
4105
- writable: true,
4106
- enumerable: true,
4107
- configurable: true
4108
- });
4123
+ _setKey(result, recordKeys[i], recordValues[i]);
4109
4124
  }
4110
4125
  }
4111
4126
  return result;
@@ -4114,7 +4129,7 @@ var Rec;
4114
4129
  const result = {};
4115
4130
  for (const [k, v] of Object.entries(data)) {
4116
4131
  if (predicate(k, v)) {
4117
- Object.defineProperty(result, k, { value: v, writable: true, enumerable: true, configurable: true });
4132
+ _setKey(result, k, v);
4118
4133
  }
4119
4134
  }
4120
4135
  return result;
@@ -4134,7 +4149,7 @@ var Rec;
4134
4149
  if (Object.hasOwn(result, key)) {
4135
4150
  result[key].push(item);
4136
4151
  } else {
4137
- Object.defineProperty(result, key, { value: [item], writable: true, enumerable: true, configurable: true });
4152
+ _setKey(result, key, [item]);
4138
4153
  }
4139
4154
  }
4140
4155
  return result;
@@ -4143,7 +4158,7 @@ var Rec;
4143
4158
  const result = {};
4144
4159
  for (const key of pickedKeys) {
4145
4160
  if (Object.hasOwn(data, key)) {
4146
- Object.defineProperty(result, key, { value: data[key], writable: true, enumerable: true, configurable: true });
4161
+ _setKey(result, key, data[key]);
4147
4162
  }
4148
4163
  }
4149
4164
  return result;
@@ -4153,12 +4168,7 @@ var Rec;
4153
4168
  const result = {};
4154
4169
  for (const key of Object.keys(data)) {
4155
4170
  if (!omitSet.has(key)) {
4156
- Object.defineProperty(result, key, {
4157
- value: data[key],
4158
- writable: true,
4159
- enumerable: true,
4160
- configurable: true
4161
- });
4171
+ _setKey(result, key, data[key]);
4162
4172
  }
4163
4173
  }
4164
4174
  return result;
@@ -4199,26 +4209,42 @@ var Rec;
4199
4209
  Rec2.mergeWith = mergeWith;
4200
4210
  Rec2.size = (data) => Object.keys(data).length;
4201
4211
  Rec2.mapKeys = (f) => (data) => {
4212
+ const keys2 = Object.keys(data);
4213
+ if (keys2.length === 0) {
4214
+ return data;
4215
+ }
4202
4216
  const result = {};
4203
- for (const [k, v] of Object.entries(data)) {
4204
- Object.defineProperty(result, f(k), { value: v, writable: true, enumerable: true, configurable: true });
4217
+ for (let i = 0; i < keys2.length; i++) {
4218
+ const k = keys2[i];
4219
+ _setKey(result, f(k), data[k]);
4205
4220
  }
4206
4221
  return result;
4207
4222
  };
4208
4223
  Rec2.compact = (data) => {
4224
+ const keys2 = Object.keys(data);
4225
+ if (keys2.length === 0) {
4226
+ return {};
4227
+ }
4209
4228
  const result = {};
4210
- for (const [k, v] of Object.entries(data)) {
4229
+ for (let i = 0; i < keys2.length; i++) {
4230
+ const k = keys2[i];
4231
+ const v = data[k];
4211
4232
  if (v.kind === "Some") {
4212
- Object.defineProperty(result, k, { value: v.value, writable: true, enumerable: true, configurable: true });
4233
+ _setKey(result, k, v.value);
4213
4234
  }
4214
4235
  }
4215
4236
  return result;
4216
4237
  };
4217
4238
  Rec2.mapEntries = (f) => (data) => {
4239
+ const keys2 = Object.keys(data);
4240
+ if (keys2.length === 0) {
4241
+ return {};
4242
+ }
4218
4243
  const result = {};
4219
- for (const [k, v] of Object.entries(data)) {
4220
- const [newKey, newVal] = f(k, v);
4221
- Object.defineProperty(result, newKey, { value: newVal, writable: true, enumerable: true, configurable: true });
4244
+ for (let i = 0; i < keys2.length; i++) {
4245
+ const k = keys2[i];
4246
+ const [newKey, newVal] = f(k, data[k]);
4247
+ _setKey(result, newKey, newVal);
4222
4248
  }
4223
4249
  return result;
4224
4250
  };
@@ -4290,8 +4316,11 @@ var Str;
4290
4316
  * ```
4291
4317
  */
4292
4318
  int: (s) => {
4293
- const n = parseInt(s, 10);
4294
- return isNaN(n) ? Maybe.make.none() : Maybe.make.some(n);
4319
+ if (s.length === 0) {
4320
+ return Maybe.make.none();
4321
+ }
4322
+ const n = Number.parseInt(s, 10);
4323
+ return Number.isNaN(n) ? Maybe.make.none() : Maybe.make.some(n);
4295
4324
  },
4296
4325
  /**
4297
4326
  * Parses a string as a floating-point number. Returns `None` if the result is `NaN`.
@@ -4304,8 +4333,11 @@ var Str;
4304
4333
  * ```
4305
4334
  */
4306
4335
  float: (s) => {
4307
- const n = parseFloat(s);
4308
- return isNaN(n) ? Maybe.make.none() : Maybe.make.some(n);
4336
+ if (s.length === 0) {
4337
+ return Maybe.make.none();
4338
+ }
4339
+ const n = Number.parseFloat(s);
4340
+ return Number.isNaN(n) ? Maybe.make.none() : Maybe.make.some(n);
4309
4341
  }
4310
4342
  };
4311
4343
  Str2.parseJson = (s) => {