@tidyjs/tidy 2.4.6 → 2.5.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.
Files changed (58) hide show
  1. package/dist/es/index.js +1 -0
  2. package/dist/es/index.js.map +1 -1
  3. package/dist/es/item/rate.js +7 -7
  4. package/dist/es/item/rate.js.map +1 -1
  5. package/dist/es/mutate.js +5 -5
  6. package/dist/es/mutate.js.map +1 -1
  7. package/dist/es/summary/deviation.js.map +1 -1
  8. package/dist/es/summary/max.js.map +1 -1
  9. package/dist/es/summary/mean.js.map +1 -1
  10. package/dist/es/summary/meanRate.js.map +1 -1
  11. package/dist/es/summary/median.js.map +1 -1
  12. package/dist/es/summary/min.js.map +1 -1
  13. package/dist/es/summary/n.js +5 -1
  14. package/dist/es/summary/n.js.map +1 -1
  15. package/dist/es/summary/nDistinct.js +2 -1
  16. package/dist/es/summary/nDistinct.js.map +1 -1
  17. package/dist/es/summary/sum.js +7 -2
  18. package/dist/es/summary/sum.js.map +1 -1
  19. package/dist/es/summary/variance.js.map +1 -1
  20. package/dist/es/vector/cumsum.js.map +1 -1
  21. package/dist/es/vector/lag.js +1 -1
  22. package/dist/es/vector/lag.js.map +1 -1
  23. package/dist/es/vector/lead.js +1 -1
  24. package/dist/es/vector/lead.js.map +1 -1
  25. package/dist/es/vector/rowNumber.js +10 -0
  26. package/dist/es/vector/rowNumber.js.map +1 -0
  27. package/dist/lib/index.js +2 -0
  28. package/dist/lib/index.js.map +1 -1
  29. package/dist/lib/item/rate.js +7 -7
  30. package/dist/lib/item/rate.js.map +1 -1
  31. package/dist/lib/mutate.js +5 -5
  32. package/dist/lib/mutate.js.map +1 -1
  33. package/dist/lib/summary/deviation.js.map +1 -1
  34. package/dist/lib/summary/max.js.map +1 -1
  35. package/dist/lib/summary/mean.js.map +1 -1
  36. package/dist/lib/summary/meanRate.js.map +1 -1
  37. package/dist/lib/summary/median.js.map +1 -1
  38. package/dist/lib/summary/min.js.map +1 -1
  39. package/dist/lib/summary/n.js +5 -1
  40. package/dist/lib/summary/n.js.map +1 -1
  41. package/dist/lib/summary/nDistinct.js +2 -1
  42. package/dist/lib/summary/nDistinct.js.map +1 -1
  43. package/dist/lib/summary/sum.js +7 -2
  44. package/dist/lib/summary/sum.js.map +1 -1
  45. package/dist/lib/summary/variance.js.map +1 -1
  46. package/dist/lib/vector/cumsum.js.map +1 -1
  47. package/dist/lib/vector/lag.js +1 -1
  48. package/dist/lib/vector/lag.js.map +1 -1
  49. package/dist/lib/vector/lead.js +1 -1
  50. package/dist/lib/vector/lead.js.map +1 -1
  51. package/dist/lib/vector/rowNumber.js +14 -0
  52. package/dist/lib/vector/rowNumber.js.map +1 -0
  53. package/dist/tidy.d.ts +32 -17
  54. package/dist/umd/tidy.js +37 -18
  55. package/dist/umd/tidy.js.map +1 -1
  56. package/dist/umd/tidy.min.js +1 -1
  57. package/dist/umd/tidy.min.js.map +1 -1
  58. package/package.json +2 -2
package/dist/tidy.d.ts CHANGED
@@ -125,7 +125,7 @@ declare function summarizeAll<T extends object, F extends SummaryKeyFn<T>>(summa
125
125
  declare function summarizeIf<T extends object, F extends SummaryKeyFn<T>>(predicateFn: (vector: Vector<T>) => boolean, summaryFn: F): TidyFn<T, A.Compute<Record<keyof T, SummaryFnOutput<T, F>>>>;
126
126
  declare function summarizeAt<T extends object, Keys extends (keyof T)[], F extends SummaryKeyFn<T, Keys[number]>>(keys: Keys, summaryFn: F): TidyFn<T, A.Compute<Record<Keys[number], SummaryFnOutput<T, F>>>>;
127
127
 
128
- declare type MutateSpecValue<T, O = any> = ((item: T) => O) | NonFunctionValue;
128
+ declare type MutateSpecValue<T, O = any> = ((item: T, index: number, array: Iterable<T>) => O) | NonFunctionValue;
129
129
  declare type MutateSpec<T> = Record<Key, MutateSpecValue<T>>;
130
130
  declare type ResolvedObj<Obj extends Record<Key, MutateSpecValue<any>>> = {
131
131
  [K in keyof Obj]: Obj[K] extends (...args: any) => any ? ReturnType<Obj[K]> extends any[] ? ReturnType<Obj[K]>[number] : ReturnType<Obj[K]> : Obj[K];
@@ -1269,16 +1269,16 @@ declare type Options = {
1269
1269
  declare function debug<T extends object>(label?: string | null | undefined, options?: Options | null | undefined): TidyFn<T>;
1270
1270
 
1271
1271
  declare type RateOptions<T> = {
1272
- predicate?: (d: T) => boolean;
1272
+ predicate?: (d: T, index: number, array: Iterable<T>) => boolean;
1273
1273
  allowDivideByZero?: boolean;
1274
1274
  };
1275
1275
  /**
1276
1276
  * Returns a function that computes a rate (numerator / denominator), setting the value to
1277
1277
  * 0 if denominator = 0 and numerator = 0.
1278
1278
  */
1279
- declare function rate<T extends object>(numerator: keyof T | ((d: T) => number), denominator: keyof T | ((d: T) => number), options?: RateOptions<T>): (d: T) => number | undefined;
1279
+ declare function rate<T extends object>(numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number), denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number), options?: RateOptions<T>): (d: T, index: number, array: Iterable<T>) => number | undefined;
1280
1280
 
1281
- declare function cumsum<T extends object>(key: keyof T | ((d: T) => number | null | undefined)): (items: T[]) => Float64Array;
1281
+ declare function cumsum<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number | null | undefined)): (items: T[]) => Float64Array;
1282
1282
 
1283
1283
  declare type RollOptions = {
1284
1284
  partial?: boolean;
@@ -1310,7 +1310,7 @@ declare type LagOptions = {
1310
1310
  * @param key The key or accessor to lag
1311
1311
  * @param options Options to configure roll. e.g. whether to run on partial windows.
1312
1312
  */
1313
- declare function lag<T extends object>(key: keyof T | ((d: T) => any), options?: LagOptions | undefined | null): (items: any[]) => any[];
1313
+ declare function lag<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => any), options?: LagOptions | undefined | null): (items: T[]) => any[];
1314
1314
 
1315
1315
  declare type LeadOptions = {
1316
1316
  /** Number of positions to lead by (default: 1) */
@@ -1324,67 +1324,82 @@ declare type LeadOptions = {
1324
1324
  * @param key The key or accessor to lead
1325
1325
  * @param options Options to configure roll. e.g. whether to run on partial windows.
1326
1326
  */
1327
- declare function lead<T extends object>(key: keyof T | ((d: T) => any), options?: LeadOptions | undefined | null): (items: any[]) => any[];
1327
+ declare function lead<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => any), options?: LeadOptions | undefined | null): (items: T[]) => any[];
1328
1328
 
1329
+ declare type RowNumberOptions = {
1330
+ /** what to start row numbers at, default is 0 */
1331
+ startAt?: number;
1332
+ };
1333
+ /**
1334
+ * Returns a vector of row numbers, starting at 0
1335
+ */
1336
+ declare function rowNumber<T>(options?: RowNumberOptions): (items: T[]) => number[];
1337
+
1338
+ declare type SumOptions<T> = {
1339
+ predicate?: (d: T, index: number, array: Iterable<T>) => boolean;
1340
+ };
1329
1341
  /**
1330
1342
  * Returns a function that computes the sum over an array of items
1331
1343
  * @param key A string key of the object or an accessor converting the object to a number
1332
1344
  */
1333
- declare function sum<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number;
1345
+ declare function sum<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number), options?: SumOptions<T>): (items: T[]) => number;
1334
1346
 
1335
1347
  /**
1336
1348
  * Returns a function that computes the min over an array of items
1337
1349
  * @param key A string key of the object or an accessor converting the object to a number
1338
1350
  */
1339
- declare function min<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1351
+ declare function min<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1340
1352
 
1341
1353
  /**
1342
1354
  * Returns a function that computes the max over an array of items
1343
1355
  * @param key A string key of the object or an accessor converting the object to a number
1344
1356
  */
1345
- declare function max<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1357
+ declare function max<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1346
1358
 
1347
1359
  /**
1348
1360
  * Returns a function that computes the mean over an array of items
1349
1361
  * @param key A string key of the object or an accessor converting the object to a number
1350
1362
  */
1351
- declare function mean<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1363
+ declare function mean<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1352
1364
 
1353
1365
  /**
1354
1366
  * Returns a function that computes the mean of a rate over an array of items
1355
1367
  * @param numerator A string key of the object or an accessor converting the object to a number
1356
1368
  * @param denominator A string key of the object or an accessor converting the object to a number
1357
1369
  */
1358
- declare function meanRate<T extends object>(numerator: keyof T | ((d: T) => number), denominator: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1370
+ declare function meanRate<T extends object>(numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number), denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1359
1371
 
1360
1372
  /**
1361
1373
  * Returns a function that computes the median over an array of items
1362
1374
  * @param key A string key of the object or an accessor converting the object to a number
1363
1375
  */
1364
- declare function median<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1376
+ declare function median<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1365
1377
 
1366
1378
  /**
1367
1379
  * Returns a function that computes the deviation over an array of items
1368
1380
  * @param key A string key of the object or an accessor converting the object to a number
1369
1381
  */
1370
- declare function deviation<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1382
+ declare function deviation<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1371
1383
 
1372
1384
  /**
1373
1385
  * Returns a function that computes the variance over an array of items
1374
1386
  * @param key A string key of the object or an accessor converting the object to a number
1375
1387
  */
1376
- declare function variance<T extends object>(key: keyof T | ((d: T) => number)): (items: T[]) => number | undefined;
1388
+ declare function variance<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)): (items: T[]) => number | undefined;
1377
1389
 
1390
+ declare type NOptions<T> = {
1391
+ predicate?: (d: T, index: number, array: Iterable<T>) => boolean;
1392
+ };
1378
1393
  /**
1379
1394
  * Returns a function that computes the count over an array of items
1380
1395
  */
1381
- declare function n(): (items: any[]) => number;
1396
+ declare function n<T>(options?: NOptions<T>): (items: T[]) => number;
1382
1397
 
1383
1398
  /**
1384
1399
  * Returns a function that computes the distinct count for a key
1385
1400
  * over an array of items. By default it counts nulls but not undefined
1386
1401
  */
1387
- declare function nDistinct<T extends object>(key: keyof T | ((d: T) => any), options?: {
1402
+ declare function nDistinct<T extends object>(key: keyof T | ((d: T, index: number, array: Iterable<T>) => any), options?: {
1388
1403
  includeNull?: boolean;
1389
1404
  includeUndefined?: boolean;
1390
1405
  }): (items: T[]) => number;
@@ -1454,4 +1469,4 @@ declare namespace math {
1454
1469
  };
1455
1470
  }
1456
1471
 
1457
- export { Comparator, Datum, Granularity, GroupKey, Grouped, Key, KeyOrFn, LevelSpec, NonFunctionValue, Primitive, SummarizeOptions, SummarizeSpec, math as TMath, TidyContext, TidyFn, TidyGroupExportFn, Vector, addRows as addItems, addRows, arrange, asc, complete, contains, count, cumsum, debug, desc, deviation, distinct, endsWith, everything, expand, fill, filter, first, fixedOrder, fullJoin, fullSeq, fullSeqDate, fullSeqDateISOString, groupBy, innerJoin, lag, last, lead, leftJoin, map, matches, max, mean, meanRate, median, min, mutate, mutateWithSummary, n, nDistinct, negate, numRange, select as pick, pivotLonger, pivotWider, rate, rename, replaceNully, roll, select, slice, sliceHead, sliceMax, sliceMin, sliceSample, sliceTail, arrange as sort, startsWith, sum, summarize, summarizeAll, summarizeAt, summarizeIf, tally, tidy, total, totalAll, totalAt, totalIf, transmute, variance, vectorSeq, vectorSeqDate, when };
1472
+ export { Comparator, Datum, Granularity, GroupKey, Grouped, Key, KeyOrFn, LevelSpec, NonFunctionValue, Primitive, SummarizeOptions, SummarizeSpec, math as TMath, TidyContext, TidyFn, TidyGroupExportFn, Vector, addRows as addItems, addRows, arrange, asc, complete, contains, count, cumsum, debug, desc, deviation, distinct, endsWith, everything, expand, fill, filter, first, fixedOrder, fullJoin, fullSeq, fullSeqDate, fullSeqDateISOString, groupBy, innerJoin, lag, last, lead, leftJoin, map, matches, max, mean, meanRate, median, min, mutate, mutateWithSummary, n, nDistinct, negate, numRange, select as pick, pivotLonger, pivotWider, rate, rename, replaceNully, roll, rowNumber, select, slice, sliceHead, sliceMax, sliceMin, sliceSample, sliceTail, arrange as sort, startsWith, sum, summarize, summarizeAll, summarizeAt, summarizeIf, tally, tidy, total, totalAll, totalAt, totalIf, transmute, variance, vectorSeq, vectorSeqDate, when };
package/dist/umd/tidy.js CHANGED
@@ -217,15 +217,15 @@
217
217
 
218
218
  function mutate(mutateSpec) {
219
219
  const _mutate = (items) => {
220
- const mutatedItems = [];
221
- for (const item of items) {
222
- const mutatedItem = {...item};
220
+ const mutatedItems = items.map((d) => ({...d}));
221
+ let i = 0;
222
+ for (const mutatedItem of mutatedItems) {
223
223
  for (const key in mutateSpec) {
224
224
  const mutateSpecValue = mutateSpec[key];
225
- const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem) : mutateSpecValue;
225
+ const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem, i, mutatedItems) : mutateSpecValue;
226
226
  mutatedItem[key] = mutatedResult;
227
227
  }
228
- mutatedItems.push(mutatedItem);
228
+ ++i;
229
229
  }
230
230
  return mutatedItems;
231
231
  };
@@ -515,12 +515,21 @@
515
515
  return groupTraversal(grouped, initialOutputObject, [], addSubgroup, addLeaf);
516
516
  }
517
517
 
518
- function n() {
518
+ function n(options) {
519
+ if (options == null ? void 0 : options.predicate) {
520
+ const predicate = options.predicate;
521
+ return (items) => items.reduce((n2, d, i) => predicate(d, i, items) ? n2 + 1 : n2, 0);
522
+ }
519
523
  return (items) => items.length;
520
524
  }
521
525
 
522
- function sum(key) {
523
- const keyFn = typeof key === "function" ? key : (d) => d[key];
526
+ function sum(key, options) {
527
+ let keyFn = typeof key === "function" ? key : (d) => d[key];
528
+ if (options == null ? void 0 : options.predicate) {
529
+ const originalKeyFn = keyFn;
530
+ const predicate = options.predicate;
531
+ keyFn = (d, index, array) => predicate(d, index, array) ? originalKeyFn(d, index, array) : 0;
532
+ }
524
533
  return (items) => d3Array.fsum(items, keyFn);
525
534
  }
526
535
 
@@ -1105,15 +1114,15 @@
1105
1114
  const numeratorFn = typeof numerator === "function" ? numerator : (d) => d[numerator];
1106
1115
  const denominatorFn = typeof denominator === "function" ? denominator : (d) => d[denominator];
1107
1116
  const {predicate, allowDivideByZero} = options != null ? options : {};
1108
- return predicate == null ? (d) => {
1109
- const denom = denominatorFn(d);
1110
- const numer = numeratorFn(d);
1117
+ return predicate == null ? (d, index, array) => {
1118
+ const denom = denominatorFn(d, index, array);
1119
+ const numer = numeratorFn(d, index, array);
1111
1120
  return rate(numer, denom, allowDivideByZero);
1112
- } : (d) => {
1113
- if (!predicate(d))
1121
+ } : (d, index, array) => {
1122
+ if (!predicate(d, index, array))
1114
1123
  return void 0;
1115
- const denom = denominatorFn(d);
1116
- const numer = numeratorFn(d);
1124
+ const denom = denominatorFn(d, index, array);
1125
+ const numer = numeratorFn(d, index, array);
1117
1126
  return rate(numer, denom, allowDivideByZero);
1118
1127
  };
1119
1128
  }
@@ -1160,7 +1169,7 @@
1160
1169
  return (items) => {
1161
1170
  return items.map((_, i) => {
1162
1171
  const lagItem = items[i - n];
1163
- return lagItem == null ? defaultValue : keyFn(lagItem);
1172
+ return lagItem == null ? defaultValue : keyFn(lagItem, i, items);
1164
1173
  });
1165
1174
  };
1166
1175
  }
@@ -1171,11 +1180,19 @@
1171
1180
  return (items) => {
1172
1181
  return items.map((_, i) => {
1173
1182
  const leadItem = items[i + n];
1174
- return leadItem == null ? defaultValue : keyFn(leadItem);
1183
+ return leadItem == null ? defaultValue : keyFn(leadItem, i, items);
1175
1184
  });
1176
1185
  };
1177
1186
  }
1178
1187
 
1188
+ function rowNumber(options) {
1189
+ var _a;
1190
+ const startAt = (_a = options == null ? void 0 : options.startAt) != null ? _a : 0;
1191
+ return (items) => {
1192
+ return items.map((_, i) => i + startAt);
1193
+ };
1194
+ }
1195
+
1179
1196
  function min(key) {
1180
1197
  const keyFn = typeof key === "function" ? key : (d) => d[key];
1181
1198
  return (items) => d3Array.min(items, keyFn);
@@ -1221,8 +1238,9 @@
1221
1238
  return (items) => {
1222
1239
  const uniques = new Map();
1223
1240
  let count = 0;
1241
+ let i = 0;
1224
1242
  for (const item of items) {
1225
- const value = keyFn(item);
1243
+ const value = keyFn(item, i++, items);
1226
1244
  if (!uniques.has(value)) {
1227
1245
  if (!options.includeUndefined && value === void 0 || options.includeNull === false && value === null) {
1228
1246
  continue;
@@ -1356,6 +1374,7 @@
1356
1374
  exports.rename = rename;
1357
1375
  exports.replaceNully = replaceNully;
1358
1376
  exports.roll = roll;
1377
+ exports.rowNumber = rowNumber;
1359
1378
  exports.select = select;
1360
1379
  exports.slice = slice;
1361
1380
  exports.sliceHead = sliceHead;