@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/es/index.js CHANGED
@@ -32,6 +32,7 @@ export { cumsum } from './vector/cumsum.js';
32
32
  export { roll } from './vector/roll.js';
33
33
  export { lag } from './vector/lag.js';
34
34
  export { lead } from './vector/lead.js';
35
+ export { rowNumber } from './vector/rowNumber.js';
35
36
  export { sum } from './summary/sum.js';
36
37
  export { min } from './summary/min.js';
37
38
  export { max } from './summary/max.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,15 +4,15 @@ function rate(numerator, denominator, options) {
4
4
  const numeratorFn = typeof numerator === "function" ? numerator : (d) => d[numerator];
5
5
  const denominatorFn = typeof denominator === "function" ? denominator : (d) => d[denominator];
6
6
  const {predicate, allowDivideByZero} = options != null ? options : {};
7
- return predicate == null ? (d) => {
8
- const denom = denominatorFn(d);
9
- const numer = numeratorFn(d);
7
+ return predicate == null ? (d, index, array) => {
8
+ const denom = denominatorFn(d, index, array);
9
+ const numer = numeratorFn(d, index, array);
10
10
  return rate$1(numer, denom, allowDivideByZero);
11
- } : (d) => {
12
- if (!predicate(d))
11
+ } : (d, index, array) => {
12
+ if (!predicate(d, index, array))
13
13
  return void 0;
14
- const denom = denominatorFn(d);
15
- const numer = numeratorFn(d);
14
+ const denom = denominatorFn(d, index, array);
15
+ const numer = numeratorFn(d, index, array);
16
16
  return rate$1(numer, denom, allowDivideByZero);
17
17
  };
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rate.js","sources":["../../../src/item/rate.ts"],"sourcesContent":["import { rate as mathRate } from '../math/math';\n\ntype RateOptions<T> = {\n predicate?: (d: T) => boolean;\n allowDivideByZero?: boolean;\n};\n\n/**\n * Returns a function that computes a rate (numerator / denominator), setting the value to\n * 0 if denominator = 0 and numerator = 0.\n */\nexport function rate<T extends object>(\n numerator: keyof T | ((d: T) => number),\n denominator: keyof T | ((d: T) => number),\n options?: RateOptions<T>\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n const { predicate, allowDivideByZero } = options ?? {};\n return predicate == null\n ? (d: T) => {\n const denom = denominatorFn(d);\n const numer = numeratorFn(d);\n return mathRate(numer, denom, allowDivideByZero);\n }\n : (d: T) => {\n if (!predicate(d)) return undefined;\n\n const denom = denominatorFn(d);\n const numer = numeratorFn(d);\n return mathRate(numer, denom, allowDivideByZero);\n };\n}\n"],"names":["mathRate"],"mappings":";;cAYE,WACA,aACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,QAAM,CAAE,WAAW,qBAAsB,4BAAW;AACpD,SAAO,aAAa,OAChB,CAAC;AACC,UAAM,QAAQ,cAAc;AAC5B,UAAM,QAAQ,YAAY;AAC1B,WAAOA,OAAS,OAAO,OAAO;AAAA,MAEhC,CAAC;AACC,QAAI,CAAC,UAAU;AAAI,aAAO;AAE1B,UAAM,QAAQ,cAAc;AAC5B,UAAM,QAAQ,YAAY;AAC1B,WAAOA,OAAS,OAAO,OAAO;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"rate.js","sources":["../../../src/item/rate.ts"],"sourcesContent":["import { rate as mathRate } from '../math/math';\n\ntype RateOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n allowDivideByZero?: boolean;\n};\n\n/**\n * Returns a function that computes a rate (numerator / denominator), setting the value to\n * 0 if denominator = 0 and numerator = 0.\n */\nexport function rate<T extends object>(\n numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n options?: RateOptions<T>\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n const { predicate, allowDivideByZero } = options ?? {};\n return predicate == null\n ? (d: T, index: number, array: Iterable<T>) => {\n const denom = denominatorFn(d, index, array);\n const numer = numeratorFn(d, index, array);\n return mathRate(numer, denom, allowDivideByZero);\n }\n : (d: T, index: number, array: Iterable<T>) => {\n if (!predicate(d, index, array)) return undefined;\n\n const denom = denominatorFn(d, index, array);\n const numer = numeratorFn(d, index, array);\n return mathRate(numer, denom, allowDivideByZero);\n };\n}\n"],"names":["mathRate"],"mappings":";;cAYE,WACA,aACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,QAAM,CAAE,WAAW,qBAAsB,4BAAW;AACpD,SAAO,aAAa,OAChB,CAAC,GAAM,OAAe;AACpB,UAAM,QAAQ,cAAc,GAAG,OAAO;AACtC,UAAM,QAAQ,YAAY,GAAG,OAAO;AACpC,WAAOA,OAAS,OAAO,OAAO;AAAA,MAEhC,CAAC,GAAM,OAAe;AACpB,QAAI,CAAC,UAAU,GAAG,OAAO;AAAQ,aAAO;AAExC,UAAM,QAAQ,cAAc,GAAG,OAAO;AACtC,UAAM,QAAQ,YAAY,GAAG,OAAO;AACpC,WAAOA,OAAS,OAAO,OAAO;AAAA;AAAA;;;;"}
package/dist/es/mutate.js CHANGED
@@ -1,14 +1,14 @@
1
1
  function mutate(mutateSpec) {
2
2
  const _mutate = (items) => {
3
- const mutatedItems = [];
4
- for (const item of items) {
5
- const mutatedItem = {...item};
3
+ const mutatedItems = items.map((d) => ({...d}));
4
+ let i = 0;
5
+ for (const mutatedItem of mutatedItems) {
6
6
  for (const key in mutateSpec) {
7
7
  const mutateSpecValue = mutateSpec[key];
8
- const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem) : mutateSpecValue;
8
+ const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem, i, mutatedItems) : mutateSpecValue;
9
9
  mutatedItem[key] = mutatedResult;
10
10
  }
11
- mutatedItems.push(mutatedItem);
11
+ ++i;
12
12
  }
13
13
  return mutatedItems;
14
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mutate.js","sources":["../../src/mutate.ts"],"sourcesContent":["import { TidyFn, NonFunctionValue, Key } from './types';\nimport { A } from 'ts-toolbelt';\n\ntype MutateSpecValue<T, O = any> = ((item: T) => O) | NonFunctionValue;\nexport type MutateSpec<T> = Record<Key, MutateSpecValue<T>>;\nexport type ResolvedObj<Obj extends Record<Key, MutateSpecValue<any>>> = {\n [K in keyof Obj]: Obj[K] extends (...args: any) => any\n ? ReturnType<Obj[K]> extends any[]\n ? ReturnType<Obj[K]>[number]\n : ReturnType<Obj[K]>\n : Obj[K];\n};\n\ntype Mutated<T, MSpec extends MutateSpec<T>> = T & ResolvedObj<MSpec>;\n\ntype Compute<T> = A.Compute<T>;\n\n/**\n * Mutates items, one item at a time. For mutating across multiple items,\n * use mutateWithSummary.\n * @param mutateSpec\n */\nexport function mutate<T extends object, MSpec extends MutateSpec<T>>(\n mutateSpec: MSpec\n): TidyFn<T, Compute<Mutated<T, MSpec>>> {\n type MutatedT = Mutated<T, MSpec>;\n // use Compute for better intellisense (reveals all keys in obj)\n const _mutate: TidyFn<T, Compute<MutatedT>> = (\n items: T[]\n ): Compute<MutatedT>[] => {\n // create the base items to merge mutated values into\n const mutatedItems: MutatedT[] = [];\n\n // we can update each item completely one at a time, since mutate doesn't\n // support looking across items. Use mutateWithSummary for that.\n for (const item of items) {\n const mutatedItem = { ...item } as MutatedT;\n\n for (const key in mutateSpec) {\n // get the mutated value for this item (either run the fn or use the constant)\n const mutateSpecValue = mutateSpec[key];\n const mutatedResult =\n typeof mutateSpecValue === 'function'\n ? mutateSpecValue(mutatedItem)\n : mutateSpecValue;\n\n mutatedItem[key as keyof MutatedT] = mutatedResult;\n }\n\n mutatedItems.push(mutatedItem);\n }\n\n return mutatedItems as Compute<MutatedT>[];\n };\n\n return _mutate;\n}\n"],"names":[],"mappings":"gBAuBE;AAIA,QAAM,UAAwC,CAC5C;AAGA,UAAM,eAA2B;AAIjC,eAAW,QAAQ;AACjB,YAAM,cAAc,IAAK;AAEzB,iBAAW,OAAO;AAEhB,cAAM,kBAAkB,WAAW;AACnC,cAAM,gBACJ,OAAO,oBAAoB,aACvB,gBAAgB,eAChB;AAEN,oBAAY,OAAyB;AAAA;AAGvC,mBAAa,KAAK;AAAA;AAGpB,WAAO;AAAA;AAGT,SAAO;AAAA;;;;"}
1
+ {"version":3,"file":"mutate.js","sources":["../../src/mutate.ts"],"sourcesContent":["import { TidyFn, NonFunctionValue, Key } from './types';\nimport { A } from 'ts-toolbelt';\n\ntype MutateSpecValue<T, O = any> =\n | ((item: T, index: number, array: Iterable<T>) => O)\n | NonFunctionValue;\nexport type MutateSpec<T> = Record<Key, MutateSpecValue<T>>;\nexport type ResolvedObj<Obj extends Record<Key, MutateSpecValue<any>>> = {\n [K in keyof Obj]: Obj[K] extends (...args: any) => any\n ? ReturnType<Obj[K]> extends any[]\n ? ReturnType<Obj[K]>[number]\n : ReturnType<Obj[K]>\n : Obj[K];\n};\n\ntype Mutated<T, MSpec extends MutateSpec<T>> = T & ResolvedObj<MSpec>;\n\ntype Compute<T> = A.Compute<T>;\n\n/**\n * Mutates items, one item at a time. For mutating across multiple items,\n * use mutateWithSummary.\n * @param mutateSpec\n */\nexport function mutate<T extends object, MSpec extends MutateSpec<T>>(\n mutateSpec: MSpec\n): TidyFn<T, Compute<Mutated<T, MSpec>>> {\n type MutatedT = Mutated<T, MSpec>;\n // use Compute for better intellisense (reveals all keys in obj)\n const _mutate: TidyFn<T, Compute<MutatedT>> = (\n items: T[]\n ): Compute<MutatedT>[] => {\n // create the base items to merge mutated values into\n // note we start with the original array so when we pass it as the third argument\n // to a mutate function, you get the values that have been changed so far\n const mutatedItems: MutatedT[] = items.map((d) => ({ ...d })) as MutatedT[];\n\n // we can update each item completely one at a time, since mutate doesn't\n // support looking across items. Use mutateWithSummary for that.\n let i = 0;\n for (const mutatedItem of mutatedItems) {\n for (const key in mutateSpec) {\n // get the mutated value for this item (either run the fn or use the constant)\n const mutateSpecValue = mutateSpec[key];\n const mutatedResult =\n typeof mutateSpecValue === 'function'\n ? mutateSpecValue(mutatedItem, i, mutatedItems)\n : mutateSpecValue;\n\n mutatedItem[key as keyof MutatedT] = mutatedResult;\n }\n\n ++i;\n }\n\n return mutatedItems as Compute<MutatedT>[];\n };\n\n return _mutate;\n}\n"],"names":[],"mappings":"gBAyBE;AAIA,QAAM,UAAwC,CAC5C;AAKA,UAAM,eAA2B,MAAM,IAAI,CAAC,WAAY;AAIxD,QAAI,IAAI;AACR,eAAW,eAAe;AACxB,iBAAW,OAAO;AAEhB,cAAM,kBAAkB,WAAW;AACnC,cAAM,gBACJ,OAAO,oBAAoB,aACvB,gBAAgB,aAAa,GAAG,gBAChC;AAEN,oBAAY,OAAyB;AAAA;AAGvC,QAAE;AAAA;AAGJ,WAAO;AAAA;AAGT,SAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"deviation.js","sources":["../../../src/summary/deviation.ts"],"sourcesContent":["import { deviation as d3deviation } from 'd3-array';\n\n/**\n * Returns a function that computes the deviation over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function deviation<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3deviation(items, keyFn);\n}\n"],"names":["d3deviation"],"mappings":";;mBAM4C;AAC1C,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAY,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"deviation.js","sources":["../../../src/summary/deviation.ts"],"sourcesContent":["import { deviation as d3deviation } from 'd3-array';\n\n/**\n * Returns a function that computes the deviation over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function deviation<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3deviation(items, keyFn);\n}\n"],"names":["d3deviation"],"mappings":";;mBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAY,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"max.js","sources":["../../../src/summary/max.ts"],"sourcesContent":["import { max as d3max } from 'd3-array';\n\n/**\n * Returns a function that computes the max over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function max<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3max(items, keyFn);\n}\n"],"names":["d3max"],"mappings":";;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,MAAM,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"max.js","sources":["../../../src/summary/max.ts"],"sourcesContent":["import { max as d3max } from 'd3-array';\n\n/**\n * Returns a function that computes the max over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function max<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3max(items, keyFn);\n}\n"],"names":["d3max"],"mappings":";;aAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,MAAM,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"mean.js","sources":["../../../src/summary/mean.ts"],"sourcesContent":["import { mean as meanInternal } from '../helpers/summation';\n\n/**\n * Returns a function that computes the mean over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function mean<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => meanInternal(items, keyFn);\n}\n"],"names":["meanInternal"],"mappings":";;cAMuC;AACrC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,OAAa,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"mean.js","sources":["../../../src/summary/mean.ts"],"sourcesContent":["import { mean as meanInternal } from '../helpers/summation';\n\n/**\n * Returns a function that computes the mean over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function mean<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => meanInternal(items, keyFn);\n}\n"],"names":["meanInternal"],"mappings":";;cAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,OAAa,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"meanRate.js","sources":["../../../src/summary/meanRate.ts"],"sourcesContent":["import { fsum } from 'd3-array';\nimport { rate } from '../math/math';\n\n/**\n * Returns a function that computes the mean of a rate over an array of items\n * @param numerator A string key of the object or an accessor converting the object to a number\n * @param denominator A string key of the object or an accessor converting the object to a number\n */\nexport function meanRate<T extends object>(\n numerator: keyof T | ((d: T) => number),\n denominator: keyof T | ((d: T) => number)\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n return (items: T[]) => {\n const numerator = fsum(items, numeratorFn);\n const denominator = fsum(items, denominatorFn);\n return rate(numerator, denominator);\n };\n}\n"],"names":[],"mappings":";;;kBASE,WACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,SAAO,CAAC;AACN,UAAM,aAAY,KAAK,OAAO;AAC9B,UAAM,eAAc,KAAK,OAAO;AAChC,WAAO,KAAK,YAAW;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"meanRate.js","sources":["../../../src/summary/meanRate.ts"],"sourcesContent":["import { fsum } from 'd3-array';\nimport { rate } from '../math/math';\n\n/**\n * Returns a function that computes the mean of a rate over an array of items\n * @param numerator A string key of the object or an accessor converting the object to a number\n * @param denominator A string key of the object or an accessor converting the object to a number\n */\nexport function meanRate<T extends object>(\n numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n return (items: T[]) => {\n const numerator = fsum(items, numeratorFn);\n const denominator = fsum(items, denominatorFn);\n return rate(numerator, denominator);\n };\n}\n"],"names":[],"mappings":";;;kBASE,WACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,SAAO,CAAC;AACN,UAAM,aAAY,KAAK,OAAO;AAC9B,UAAM,eAAc,KAAK,OAAO;AAChC,WAAO,KAAK,YAAW;AAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"median.js","sources":["../../../src/summary/median.ts"],"sourcesContent":["import { median as d3median } from 'd3-array';\n\n/**\n * Returns a function that computes the median over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function median<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3median(items, keyFn);\n}\n"],"names":["d3median"],"mappings":";;gBAMyC;AACvC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,SAAS,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"median.js","sources":["../../../src/summary/median.ts"],"sourcesContent":["import { median as d3median } from 'd3-array';\n\n/**\n * Returns a function that computes the median over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function median<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3median(items, keyFn);\n}\n"],"names":["d3median"],"mappings":";;gBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,SAAS,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"min.js","sources":["../../../src/summary/min.ts"],"sourcesContent":["import { min as d3min } from 'd3-array';\n\n/**\n * Returns a function that computes the min over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function min<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3min(items, keyFn);\n}\n"],"names":["d3min"],"mappings":";;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,MAAM,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"min.js","sources":["../../../src/summary/min.ts"],"sourcesContent":["import { min as d3min } from 'd3-array';\n\n/**\n * Returns a function that computes the min over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function min<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3min(items, keyFn);\n}\n"],"names":["d3min"],"mappings":";;aAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,MAAM,OAAO;AAAA;;;;"}
@@ -1,4 +1,8 @@
1
- function n() {
1
+ function n(options) {
2
+ if (options == null ? void 0 : options.predicate) {
3
+ const predicate = options.predicate;
4
+ return (items) => items.reduce((n2, d, i) => predicate(d, i, items) ? n2 + 1 : n2, 0);
5
+ }
2
6
  return (items) => items.length;
3
7
  }
4
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"n.js","sources":["../../../src/summary/n.ts"],"sourcesContent":["/**\n * Returns a function that computes the count over an array of items\n */\nexport function n() {\n return (items: any[]) => items.length;\n}\n"],"names":[],"mappings":";AAIE,SAAO,CAAC,UAAiB,MAAM;AAAA;;;;"}
1
+ {"version":3,"file":"n.js","sources":["../../../src/summary/n.ts"],"sourcesContent":["type NOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n};\n\n/**\n * Returns a function that computes the count over an array of items\n */\nexport function n<T>(options?: NOptions<T>) {\n if (options?.predicate) {\n const predicate = options.predicate;\n return (items: T[]) =>\n items.reduce((n, d, i) => (predicate(d, i, items) ? n + 1 : n), 0);\n }\n\n return (items: T[]) => items.length;\n}\n"],"names":[],"mappings":"WAOqB;AACnB,MAAI,mCAAS;AACX,UAAM,YAAY,QAAQ;AAC1B,WAAO,CAAC,UACN,MAAM,OAAO,CAAC,IAAG,GAAG,MAAO,UAAU,GAAG,GAAG,SAAS,KAAI,IAAI,IAAI;AAAA;AAGpE,SAAO,CAAC,UAAe,MAAM;AAAA;;;;"}
@@ -3,8 +3,9 @@ function nDistinct(key, options = {}) {
3
3
  return (items) => {
4
4
  const uniques = new Map();
5
5
  let count = 0;
6
+ let i = 0;
6
7
  for (const item of items) {
7
- const value = keyFn(item);
8
+ const value = keyFn(item, i++, items);
8
9
  if (!uniques.has(value)) {
9
10
  if (!options.includeUndefined && value === void 0 || options.includeNull === false && value === null) {
10
11
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"nDistinct.js","sources":["../../../src/summary/nDistinct.ts"],"sourcesContent":["/**\n * Returns a function that computes the distinct count for a key\n * over an array of items. By default it counts nulls but not undefined\n */\nexport function nDistinct<T extends object>(\n key: keyof T | ((d: T) => any),\n options: { includeNull?: boolean; includeUndefined?: boolean } = {}\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n return (items: T[]) => {\n const uniques = new Map();\n let count = 0;\n\n for (const item of items) {\n const value = keyFn(item);\n\n if (!uniques.has(value)) {\n // default includes null but not undefined\n if (\n (!options.includeUndefined && value === undefined) ||\n (options.includeNull === false && value === null)\n ) {\n continue;\n }\n\n count += 1;\n uniques.set(value, true);\n }\n }\n\n return count;\n };\n}\n"],"names":[],"mappings":"mBAKE,KACA,UAAiE;AAEjE,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,SAAO,CAAC;AACN,UAAM,UAAU,IAAI;AACpB,QAAI,QAAQ;AAEZ,eAAW,QAAQ;AACjB,YAAM,QAAQ,MAAM;AAEpB,UAAI,CAAC,QAAQ,IAAI;AAEf,YACG,CAAC,QAAQ,oBAAoB,UAAU,UACvC,QAAQ,gBAAgB,SAAS,UAAU;AAE5C;AAAA;AAGF,iBAAS;AACT,gBAAQ,IAAI,OAAO;AAAA;AAAA;AAIvB,WAAO;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"nDistinct.js","sources":["../../../src/summary/nDistinct.ts"],"sourcesContent":["/**\n * Returns a function that computes the distinct count for a key\n * over an array of items. By default it counts nulls but not undefined\n */\nexport function nDistinct<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options: { includeNull?: boolean; includeUndefined?: boolean } = {}\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n return (items: T[]) => {\n const uniques = new Map();\n let count = 0;\n\n let i = 0;\n for (const item of items) {\n const value = keyFn(item, i++, items);\n\n if (!uniques.has(value)) {\n // default includes null but not undefined\n if (\n (!options.includeUndefined && value === undefined) ||\n (options.includeNull === false && value === null)\n ) {\n continue;\n }\n\n count += 1;\n uniques.set(value, true);\n }\n }\n\n return count;\n };\n}\n"],"names":[],"mappings":"mBAKE,KACA,UAAiE;AAEjE,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,SAAO,CAAC;AACN,UAAM,UAAU,IAAI;AACpB,QAAI,QAAQ;AAEZ,QAAI,IAAI;AACR,eAAW,QAAQ;AACjB,YAAM,QAAQ,MAAM,MAAM,KAAK;AAE/B,UAAI,CAAC,QAAQ,IAAI;AAEf,YACG,CAAC,QAAQ,oBAAoB,UAAU,UACvC,QAAQ,gBAAgB,SAAS,UAAU;AAE5C;AAAA;AAGF,iBAAS;AACT,gBAAQ,IAAI,OAAO;AAAA;AAAA;AAIvB,WAAO;AAAA;AAAA;;;;"}
@@ -1,7 +1,12 @@
1
1
  import { fsum } from 'd3-array';
2
2
 
3
- function sum(key) {
4
- const keyFn = typeof key === "function" ? key : (d) => d[key];
3
+ function sum(key, options) {
4
+ let keyFn = typeof key === "function" ? key : (d) => d[key];
5
+ if (options == null ? void 0 : options.predicate) {
6
+ const originalKeyFn = keyFn;
7
+ const predicate = options.predicate;
8
+ keyFn = (d, index, array) => predicate(d, index, array) ? originalKeyFn(d, index, array) : 0;
9
+ }
5
10
  return (items) => fsum(items, keyFn);
6
11
  }
7
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"sum.js","sources":["../../../src/summary/sum.ts"],"sourcesContent":["import { fsum } from 'd3-array';\n\n/**\n * Returns a function that computes the sum over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function sum<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => fsum(items, keyFn);\n}\n"],"names":[],"mappings":";;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAe,KAAK,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"sum.js","sources":["../../../src/summary/sum.ts"],"sourcesContent":["import { fsum } from 'd3-array';\n\ntype SumOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n};\n\n/**\n * Returns a function that computes the sum over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function sum<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n options?: SumOptions<T>\n) {\n let keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n if (options?.predicate) {\n const originalKeyFn = keyFn;\n const predicate = options.predicate;\n keyFn = (d: T, index: number, array: Iterable<T>) =>\n predicate(d, index, array) ? originalKeyFn(d, index, array) : 0;\n }\n\n return (items: T[]) => fsum(items, keyFn);\n}\n"],"names":[],"mappings":";;aAWE,KACA;AAEA,MAAI,QACF,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,MAAI,mCAAS;AACX,UAAM,gBAAgB;AACtB,UAAM,YAAY,QAAQ;AAC1B,YAAQ,CAAC,GAAM,OAAe,UAC5B,UAAU,GAAG,OAAO,SAAS,cAAc,GAAG,OAAO,SAAS;AAAA;AAGlE,SAAO,CAAC,UAAe,KAAK,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"variance.js","sources":["../../../src/summary/variance.ts"],"sourcesContent":["import { variance as d3variance } from 'd3-array';\n\n/**\n * Returns a function that computes the variance over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function variance<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3variance(items, keyFn);\n}\n"],"names":["d3variance"],"mappings":";;kBAM2C;AACzC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,WAAW,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"variance.js","sources":["../../../src/summary/variance.ts"],"sourcesContent":["import { variance as d3variance } from 'd3-array';\n\n/**\n * Returns a function that computes the variance over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function variance<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3variance(items, keyFn);\n}\n"],"names":["d3variance"],"mappings":";;kBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,WAAW,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cumsum.js","sources":["../../../src/vector/cumsum.ts"],"sourcesContent":["import { fcumsum } from '../helpers/summation';\n\nexport function cumsum<T extends object>(\n key: keyof T | ((d: T) => number | null | undefined)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n // note returns Float64Array not a normal array\n return (items: T[]) => fcumsum(items, keyFn);\n}\n"],"names":[],"mappings":";;gBAGE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAGjD,SAAO,CAAC,UAAe,QAAQ,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"cumsum.js","sources":["../../../src/vector/cumsum.ts"],"sourcesContent":["import { fcumsum } from '../helpers/summation';\n\nexport function cumsum<T extends object>(\n key:\n | keyof T\n | ((d: T, index: number, array: Iterable<T>) => number | null | undefined)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n // note returns Float64Array not a normal array\n return (items: T[]) => fcumsum(items, keyFn);\n}\n"],"names":[],"mappings":";;gBAGE;AAIA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAGjD,SAAO,CAAC,UAAe,QAAQ,OAAO;AAAA;;;;"}
@@ -4,7 +4,7 @@ function lag(key, options) {
4
4
  return (items) => {
5
5
  return items.map((_, i) => {
6
6
  const lagItem = items[i - n];
7
- return lagItem == null ? defaultValue : keyFn(lagItem);
7
+ return lagItem == null ? defaultValue : keyFn(lagItem, i, items);
8
8
  });
9
9
  };
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lag.js","sources":["../../../src/vector/lag.ts"],"sourcesContent":["type LagOptions = {\n /** Number of positions to lag by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a function that lags a vector by a specified offset (n). Useful for\n * finding previous values to compute deltas with later.\n * @param key The key or accessor to lag\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lag<T extends object>(\n key: keyof T | ((d: T) => any),\n options?: LagOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: any[]) => {\n return items.map((_, i) => {\n const lagItem = items[i - n];\n return lagItem == null ? defaultValue : keyFn(lagItem);\n });\n };\n}\n"],"names":[],"mappings":"aAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,UAAU,MAAM,IAAI;AAC1B,aAAO,WAAW,OAAO,eAAe,MAAM;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"lag.js","sources":["../../../src/vector/lag.ts"],"sourcesContent":["type LagOptions = {\n /** Number of positions to lag by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a function that lags a vector by a specified offset (n). Useful for\n * finding previous values to compute deltas with later.\n * @param key The key or accessor to lag\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lag<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options?: LagOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: T[]) => {\n return items.map((_, i) => {\n const lagItem = items[i - n];\n return lagItem == null ? defaultValue : keyFn(lagItem, i, items);\n });\n };\n}\n"],"names":[],"mappings":"aAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,UAAU,MAAM,IAAI;AAC1B,aAAO,WAAW,OAAO,eAAe,MAAM,SAAS,GAAG;AAAA;AAAA;AAAA;;;;"}
@@ -4,7 +4,7 @@ function lead(key, options) {
4
4
  return (items) => {
5
5
  return items.map((_, i) => {
6
6
  const leadItem = items[i + n];
7
- return leadItem == null ? defaultValue : keyFn(leadItem);
7
+ return leadItem == null ? defaultValue : keyFn(leadItem, i, items);
8
8
  });
9
9
  };
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lead.js","sources":["../../../src/vector/lead.ts"],"sourcesContent":["type LeadOptions = {\n /** Number of positions to lead by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a functions that leads a vector by a specified offset (n). Useful for\n * finding next values for computing deltas with.\n * @param key The key or accessor to lead\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lead<T extends object>(\n key: keyof T | ((d: T) => any),\n options?: LeadOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: any[]) => {\n return items.map((_, i) => {\n const leadItem = items[i + n];\n return leadItem == null ? defaultValue : keyFn(leadItem);\n });\n };\n}\n"],"names":[],"mappings":"cAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,WAAW,MAAM,IAAI;AAC3B,aAAO,YAAY,OAAO,eAAe,MAAM;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"lead.js","sources":["../../../src/vector/lead.ts"],"sourcesContent":["type LeadOptions = {\n /** Number of positions to lead by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a functions that leads a vector by a specified offset (n). Useful for\n * finding next values for computing deltas with.\n * @param key The key or accessor to lead\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lead<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options?: LeadOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: T[]) => {\n return items.map((_, i) => {\n const leadItem = items[i + n];\n return leadItem == null ? defaultValue : keyFn(leadItem, i, items);\n });\n };\n}\n"],"names":[],"mappings":"cAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,WAAW,MAAM,IAAI;AAC3B,aAAO,YAAY,OAAO,eAAe,MAAM,UAAU,GAAG;AAAA;AAAA;AAAA;;;;"}
@@ -0,0 +1,10 @@
1
+ function rowNumber(options) {
2
+ var _a;
3
+ const startAt = (_a = options == null ? void 0 : options.startAt) != null ? _a : 0;
4
+ return (items) => {
5
+ return items.map((_, i) => i + startAt);
6
+ };
7
+ }
8
+
9
+ export { rowNumber };
10
+ //# sourceMappingURL=rowNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowNumber.js","sources":["../../../src/vector/rowNumber.ts"],"sourcesContent":["type RowNumberOptions = {\n /** what to start row numbers at, default is 0 */\n startAt?: number;\n};\n\n/**\n * Returns a vector of row numbers, starting at 0\n */\nexport function rowNumber<T>(options?: RowNumberOptions) {\n const startAt = options?.startAt ?? 0;\n return (items: T[]) => {\n return items.map((_, i) => i + startAt);\n };\n}\n"],"names":[],"mappings":"mBAQ6B;AAR7B;AASE,QAAM,UAAU,yCAAS,YAAT,YAAoB;AACpC,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI;AAAA;AAAA;;;;"}
package/dist/lib/index.js CHANGED
@@ -36,6 +36,7 @@ var cumsum = require('./vector/cumsum.js');
36
36
  var roll = require('./vector/roll.js');
37
37
  var lag = require('./vector/lag.js');
38
38
  var lead = require('./vector/lead.js');
39
+ var rowNumber = require('./vector/rowNumber.js');
39
40
  var sum = require('./summary/sum.js');
40
41
  var min = require('./summary/min.js');
41
42
  var max = require('./summary/max.js');
@@ -114,6 +115,7 @@ exports.cumsum = cumsum.cumsum;
114
115
  exports.roll = roll.roll;
115
116
  exports.lag = lag.lag;
116
117
  exports.lead = lead.lead;
118
+ exports.rowNumber = rowNumber.rowNumber;
117
119
  exports.sum = sum.sum;
118
120
  exports.min = min.min;
119
121
  exports.max = max.max;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,15 +8,15 @@ function rate(numerator, denominator, options) {
8
8
  const numeratorFn = typeof numerator === "function" ? numerator : (d) => d[numerator];
9
9
  const denominatorFn = typeof denominator === "function" ? denominator : (d) => d[denominator];
10
10
  const {predicate, allowDivideByZero} = options != null ? options : {};
11
- return predicate == null ? (d) => {
12
- const denom = denominatorFn(d);
13
- const numer = numeratorFn(d);
11
+ return predicate == null ? (d, index, array) => {
12
+ const denom = denominatorFn(d, index, array);
13
+ const numer = numeratorFn(d, index, array);
14
14
  return math.rate(numer, denom, allowDivideByZero);
15
- } : (d) => {
16
- if (!predicate(d))
15
+ } : (d, index, array) => {
16
+ if (!predicate(d, index, array))
17
17
  return void 0;
18
- const denom = denominatorFn(d);
19
- const numer = numeratorFn(d);
18
+ const denom = denominatorFn(d, index, array);
19
+ const numer = numeratorFn(d, index, array);
20
20
  return math.rate(numer, denom, allowDivideByZero);
21
21
  };
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rate.js","sources":["../../../src/item/rate.ts"],"sourcesContent":["import { rate as mathRate } from '../math/math';\n\ntype RateOptions<T> = {\n predicate?: (d: T) => boolean;\n allowDivideByZero?: boolean;\n};\n\n/**\n * Returns a function that computes a rate (numerator / denominator), setting the value to\n * 0 if denominator = 0 and numerator = 0.\n */\nexport function rate<T extends object>(\n numerator: keyof T | ((d: T) => number),\n denominator: keyof T | ((d: T) => number),\n options?: RateOptions<T>\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n const { predicate, allowDivideByZero } = options ?? {};\n return predicate == null\n ? (d: T) => {\n const denom = denominatorFn(d);\n const numer = numeratorFn(d);\n return mathRate(numer, denom, allowDivideByZero);\n }\n : (d: T) => {\n if (!predicate(d)) return undefined;\n\n const denom = denominatorFn(d);\n const numer = numeratorFn(d);\n return mathRate(numer, denom, allowDivideByZero);\n };\n}\n"],"names":["mathRate"],"mappings":";;;;;;cAYE,WACA,aACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,QAAM,CAAE,WAAW,qBAAsB,4BAAW;AACpD,SAAO,aAAa,OAChB,CAAC;AACC,UAAM,QAAQ,cAAc;AAC5B,UAAM,QAAQ,YAAY;AAC1B,WAAOA,UAAS,OAAO,OAAO;AAAA,MAEhC,CAAC;AACC,QAAI,CAAC,UAAU;AAAI,aAAO;AAE1B,UAAM,QAAQ,cAAc;AAC5B,UAAM,QAAQ,YAAY;AAC1B,WAAOA,UAAS,OAAO,OAAO;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"rate.js","sources":["../../../src/item/rate.ts"],"sourcesContent":["import { rate as mathRate } from '../math/math';\n\ntype RateOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n allowDivideByZero?: boolean;\n};\n\n/**\n * Returns a function that computes a rate (numerator / denominator), setting the value to\n * 0 if denominator = 0 and numerator = 0.\n */\nexport function rate<T extends object>(\n numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n options?: RateOptions<T>\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n const { predicate, allowDivideByZero } = options ?? {};\n return predicate == null\n ? (d: T, index: number, array: Iterable<T>) => {\n const denom = denominatorFn(d, index, array);\n const numer = numeratorFn(d, index, array);\n return mathRate(numer, denom, allowDivideByZero);\n }\n : (d: T, index: number, array: Iterable<T>) => {\n if (!predicate(d, index, array)) return undefined;\n\n const denom = denominatorFn(d, index, array);\n const numer = numeratorFn(d, index, array);\n return mathRate(numer, denom, allowDivideByZero);\n };\n}\n"],"names":["mathRate"],"mappings":";;;;;;cAYE,WACA,aACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,QAAM,CAAE,WAAW,qBAAsB,4BAAW;AACpD,SAAO,aAAa,OAChB,CAAC,GAAM,OAAe;AACpB,UAAM,QAAQ,cAAc,GAAG,OAAO;AACtC,UAAM,QAAQ,YAAY,GAAG,OAAO;AACpC,WAAOA,UAAS,OAAO,OAAO;AAAA,MAEhC,CAAC,GAAM,OAAe;AACpB,QAAI,CAAC,UAAU,GAAG,OAAO;AAAQ,aAAO;AAExC,UAAM,QAAQ,cAAc,GAAG,OAAO;AACtC,UAAM,QAAQ,YAAY,GAAG,OAAO;AACpC,WAAOA,UAAS,OAAO,OAAO;AAAA;AAAA;;;;"}
@@ -4,15 +4,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  function mutate(mutateSpec) {
6
6
  const _mutate = (items) => {
7
- const mutatedItems = [];
8
- for (const item of items) {
9
- const mutatedItem = {...item};
7
+ const mutatedItems = items.map((d) => ({...d}));
8
+ let i = 0;
9
+ for (const mutatedItem of mutatedItems) {
10
10
  for (const key in mutateSpec) {
11
11
  const mutateSpecValue = mutateSpec[key];
12
- const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem) : mutateSpecValue;
12
+ const mutatedResult = typeof mutateSpecValue === "function" ? mutateSpecValue(mutatedItem, i, mutatedItems) : mutateSpecValue;
13
13
  mutatedItem[key] = mutatedResult;
14
14
  }
15
- mutatedItems.push(mutatedItem);
15
+ ++i;
16
16
  }
17
17
  return mutatedItems;
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mutate.js","sources":["../../src/mutate.ts"],"sourcesContent":["import { TidyFn, NonFunctionValue, Key } from './types';\nimport { A } from 'ts-toolbelt';\n\ntype MutateSpecValue<T, O = any> = ((item: T) => O) | NonFunctionValue;\nexport type MutateSpec<T> = Record<Key, MutateSpecValue<T>>;\nexport type ResolvedObj<Obj extends Record<Key, MutateSpecValue<any>>> = {\n [K in keyof Obj]: Obj[K] extends (...args: any) => any\n ? ReturnType<Obj[K]> extends any[]\n ? ReturnType<Obj[K]>[number]\n : ReturnType<Obj[K]>\n : Obj[K];\n};\n\ntype Mutated<T, MSpec extends MutateSpec<T>> = T & ResolvedObj<MSpec>;\n\ntype Compute<T> = A.Compute<T>;\n\n/**\n * Mutates items, one item at a time. For mutating across multiple items,\n * use mutateWithSummary.\n * @param mutateSpec\n */\nexport function mutate<T extends object, MSpec extends MutateSpec<T>>(\n mutateSpec: MSpec\n): TidyFn<T, Compute<Mutated<T, MSpec>>> {\n type MutatedT = Mutated<T, MSpec>;\n // use Compute for better intellisense (reveals all keys in obj)\n const _mutate: TidyFn<T, Compute<MutatedT>> = (\n items: T[]\n ): Compute<MutatedT>[] => {\n // create the base items to merge mutated values into\n const mutatedItems: MutatedT[] = [];\n\n // we can update each item completely one at a time, since mutate doesn't\n // support looking across items. Use mutateWithSummary for that.\n for (const item of items) {\n const mutatedItem = { ...item } as MutatedT;\n\n for (const key in mutateSpec) {\n // get the mutated value for this item (either run the fn or use the constant)\n const mutateSpecValue = mutateSpec[key];\n const mutatedResult =\n typeof mutateSpecValue === 'function'\n ? mutateSpecValue(mutatedItem)\n : mutateSpecValue;\n\n mutatedItem[key as keyof MutatedT] = mutatedResult;\n }\n\n mutatedItems.push(mutatedItem);\n }\n\n return mutatedItems as Compute<MutatedT>[];\n };\n\n return _mutate;\n}\n"],"names":[],"mappings":";;;;gBAuBE;AAIA,QAAM,UAAwC,CAC5C;AAGA,UAAM,eAA2B;AAIjC,eAAW,QAAQ;AACjB,YAAM,cAAc,IAAK;AAEzB,iBAAW,OAAO;AAEhB,cAAM,kBAAkB,WAAW;AACnC,cAAM,gBACJ,OAAO,oBAAoB,aACvB,gBAAgB,eAChB;AAEN,oBAAY,OAAyB;AAAA;AAGvC,mBAAa,KAAK;AAAA;AAGpB,WAAO;AAAA;AAGT,SAAO;AAAA;;;;"}
1
+ {"version":3,"file":"mutate.js","sources":["../../src/mutate.ts"],"sourcesContent":["import { TidyFn, NonFunctionValue, Key } from './types';\nimport { A } from 'ts-toolbelt';\n\ntype MutateSpecValue<T, O = any> =\n | ((item: T, index: number, array: Iterable<T>) => O)\n | NonFunctionValue;\nexport type MutateSpec<T> = Record<Key, MutateSpecValue<T>>;\nexport type ResolvedObj<Obj extends Record<Key, MutateSpecValue<any>>> = {\n [K in keyof Obj]: Obj[K] extends (...args: any) => any\n ? ReturnType<Obj[K]> extends any[]\n ? ReturnType<Obj[K]>[number]\n : ReturnType<Obj[K]>\n : Obj[K];\n};\n\ntype Mutated<T, MSpec extends MutateSpec<T>> = T & ResolvedObj<MSpec>;\n\ntype Compute<T> = A.Compute<T>;\n\n/**\n * Mutates items, one item at a time. For mutating across multiple items,\n * use mutateWithSummary.\n * @param mutateSpec\n */\nexport function mutate<T extends object, MSpec extends MutateSpec<T>>(\n mutateSpec: MSpec\n): TidyFn<T, Compute<Mutated<T, MSpec>>> {\n type MutatedT = Mutated<T, MSpec>;\n // use Compute for better intellisense (reveals all keys in obj)\n const _mutate: TidyFn<T, Compute<MutatedT>> = (\n items: T[]\n ): Compute<MutatedT>[] => {\n // create the base items to merge mutated values into\n // note we start with the original array so when we pass it as the third argument\n // to a mutate function, you get the values that have been changed so far\n const mutatedItems: MutatedT[] = items.map((d) => ({ ...d })) as MutatedT[];\n\n // we can update each item completely one at a time, since mutate doesn't\n // support looking across items. Use mutateWithSummary for that.\n let i = 0;\n for (const mutatedItem of mutatedItems) {\n for (const key in mutateSpec) {\n // get the mutated value for this item (either run the fn or use the constant)\n const mutateSpecValue = mutateSpec[key];\n const mutatedResult =\n typeof mutateSpecValue === 'function'\n ? mutateSpecValue(mutatedItem, i, mutatedItems)\n : mutateSpecValue;\n\n mutatedItem[key as keyof MutatedT] = mutatedResult;\n }\n\n ++i;\n }\n\n return mutatedItems as Compute<MutatedT>[];\n };\n\n return _mutate;\n}\n"],"names":[],"mappings":";;;;gBAyBE;AAIA,QAAM,UAAwC,CAC5C;AAKA,UAAM,eAA2B,MAAM,IAAI,CAAC,WAAY;AAIxD,QAAI,IAAI;AACR,eAAW,eAAe;AACxB,iBAAW,OAAO;AAEhB,cAAM,kBAAkB,WAAW;AACnC,cAAM,gBACJ,OAAO,oBAAoB,aACvB,gBAAgB,aAAa,GAAG,gBAChC;AAEN,oBAAY,OAAyB;AAAA;AAGvC,QAAE;AAAA;AAGJ,WAAO;AAAA;AAGT,SAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"deviation.js","sources":["../../../src/summary/deviation.ts"],"sourcesContent":["import { deviation as d3deviation } from 'd3-array';\n\n/**\n * Returns a function that computes the deviation over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function deviation<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3deviation(items, keyFn);\n}\n"],"names":["d3deviation"],"mappings":";;;;;;mBAM4C;AAC1C,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,kBAAY,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"deviation.js","sources":["../../../src/summary/deviation.ts"],"sourcesContent":["import { deviation as d3deviation } from 'd3-array';\n\n/**\n * Returns a function that computes the deviation over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function deviation<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3deviation(items, keyFn);\n}\n"],"names":["d3deviation"],"mappings":";;;;;;mBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,kBAAY,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"max.js","sources":["../../../src/summary/max.ts"],"sourcesContent":["import { max as d3max } from 'd3-array';\n\n/**\n * Returns a function that computes the max over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function max<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3max(items, keyFn);\n}\n"],"names":["d3max"],"mappings":";;;;;;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAM,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"max.js","sources":["../../../src/summary/max.ts"],"sourcesContent":["import { max as d3max } from 'd3-array';\n\n/**\n * Returns a function that computes the max over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function max<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3max(items, keyFn);\n}\n"],"names":["d3max"],"mappings":";;;;;;aAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAM,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"mean.js","sources":["../../../src/summary/mean.ts"],"sourcesContent":["import { mean as meanInternal } from '../helpers/summation';\n\n/**\n * Returns a function that computes the mean over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function mean<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => meanInternal(items, keyFn);\n}\n"],"names":["meanInternal"],"mappings":";;;;;;cAMuC;AACrC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,eAAa,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"mean.js","sources":["../../../src/summary/mean.ts"],"sourcesContent":["import { mean as meanInternal } from '../helpers/summation';\n\n/**\n * Returns a function that computes the mean over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function mean<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => meanInternal(items, keyFn);\n}\n"],"names":["meanInternal"],"mappings":";;;;;;cAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,eAAa,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"meanRate.js","sources":["../../../src/summary/meanRate.ts"],"sourcesContent":["import { fsum } from 'd3-array';\nimport { rate } from '../math/math';\n\n/**\n * Returns a function that computes the mean of a rate over an array of items\n * @param numerator A string key of the object or an accessor converting the object to a number\n * @param denominator A string key of the object or an accessor converting the object to a number\n */\nexport function meanRate<T extends object>(\n numerator: keyof T | ((d: T) => number),\n denominator: keyof T | ((d: T) => number)\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n return (items: T[]) => {\n const numerator = fsum(items, numeratorFn);\n const denominator = fsum(items, denominatorFn);\n return rate(numerator, denominator);\n };\n}\n"],"names":["fsum","rate"],"mappings":";;;;;;;kBASE,WACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,SAAO,CAAC;AACN,UAAM,aAAYA,aAAK,OAAO;AAC9B,UAAM,eAAcA,aAAK,OAAO;AAChC,WAAOC,UAAK,YAAW;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"meanRate.js","sources":["../../../src/summary/meanRate.ts"],"sourcesContent":["import { fsum } from 'd3-array';\nimport { rate } from '../math/math';\n\n/**\n * Returns a function that computes the mean of a rate over an array of items\n * @param numerator A string key of the object or an accessor converting the object to a number\n * @param denominator A string key of the object or an accessor converting the object to a number\n */\nexport function meanRate<T extends object>(\n numerator: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n denominator: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const numeratorFn =\n typeof numerator === 'function'\n ? numerator\n : (d: T) => (d[numerator] as unknown) as number;\n const denominatorFn =\n typeof denominator === 'function'\n ? denominator\n : (d: T) => (d[denominator] as unknown) as number;\n\n return (items: T[]) => {\n const numerator = fsum(items, numeratorFn);\n const denominator = fsum(items, denominatorFn);\n return rate(numerator, denominator);\n };\n}\n"],"names":["fsum","rate"],"mappings":";;;;;;;kBASE,WACA;AAEA,QAAM,cACJ,OAAO,cAAc,aACjB,YACA,CAAC,MAAU,EAAE;AACnB,QAAM,gBACJ,OAAO,gBAAgB,aACnB,cACA,CAAC,MAAU,EAAE;AAEnB,SAAO,CAAC;AACN,UAAM,aAAYA,aAAK,OAAO;AAC9B,UAAM,eAAcA,aAAK,OAAO;AAChC,WAAOC,UAAK,YAAW;AAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"median.js","sources":["../../../src/summary/median.ts"],"sourcesContent":["import { median as d3median } from 'd3-array';\n\n/**\n * Returns a function that computes the median over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function median<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3median(items, keyFn);\n}\n"],"names":["d3median"],"mappings":";;;;;;gBAMyC;AACvC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,eAAS,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"median.js","sources":["../../../src/summary/median.ts"],"sourcesContent":["import { median as d3median } from 'd3-array';\n\n/**\n * Returns a function that computes the median over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function median<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3median(items, keyFn);\n}\n"],"names":["d3median"],"mappings":";;;;;;gBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,eAAS,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"min.js","sources":["../../../src/summary/min.ts"],"sourcesContent":["import { min as d3min } from 'd3-array';\n\n/**\n * Returns a function that computes the min over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function min<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3min(items, keyFn);\n}\n"],"names":["d3min"],"mappings":";;;;;;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAM,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"min.js","sources":["../../../src/summary/min.ts"],"sourcesContent":["import { min as d3min } from 'd3-array';\n\n/**\n * Returns a function that computes the min over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function min<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3min(items, keyFn);\n}\n"],"names":["d3min"],"mappings":";;;;;;aAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,YAAM,OAAO;AAAA;;;;"}
@@ -2,7 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function n() {
5
+ function n(options) {
6
+ if (options == null ? void 0 : options.predicate) {
7
+ const predicate = options.predicate;
8
+ return (items) => items.reduce((n2, d, i) => predicate(d, i, items) ? n2 + 1 : n2, 0);
9
+ }
6
10
  return (items) => items.length;
7
11
  }
8
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"n.js","sources":["../../../src/summary/n.ts"],"sourcesContent":["/**\n * Returns a function that computes the count over an array of items\n */\nexport function n() {\n return (items: any[]) => items.length;\n}\n"],"names":[],"mappings":";;;;;AAIE,SAAO,CAAC,UAAiB,MAAM;AAAA;;;;"}
1
+ {"version":3,"file":"n.js","sources":["../../../src/summary/n.ts"],"sourcesContent":["type NOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n};\n\n/**\n * Returns a function that computes the count over an array of items\n */\nexport function n<T>(options?: NOptions<T>) {\n if (options?.predicate) {\n const predicate = options.predicate;\n return (items: T[]) =>\n items.reduce((n, d, i) => (predicate(d, i, items) ? n + 1 : n), 0);\n }\n\n return (items: T[]) => items.length;\n}\n"],"names":[],"mappings":";;;;WAOqB;AACnB,MAAI,mCAAS;AACX,UAAM,YAAY,QAAQ;AAC1B,WAAO,CAAC,UACN,MAAM,OAAO,CAAC,IAAG,GAAG,MAAO,UAAU,GAAG,GAAG,SAAS,KAAI,IAAI,IAAI;AAAA;AAGpE,SAAO,CAAC,UAAe,MAAM;AAAA;;;;"}
@@ -7,8 +7,9 @@ function nDistinct(key, options = {}) {
7
7
  return (items) => {
8
8
  const uniques = new Map();
9
9
  let count = 0;
10
+ let i = 0;
10
11
  for (const item of items) {
11
- const value = keyFn(item);
12
+ const value = keyFn(item, i++, items);
12
13
  if (!uniques.has(value)) {
13
14
  if (!options.includeUndefined && value === void 0 || options.includeNull === false && value === null) {
14
15
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"nDistinct.js","sources":["../../../src/summary/nDistinct.ts"],"sourcesContent":["/**\n * Returns a function that computes the distinct count for a key\n * over an array of items. By default it counts nulls but not undefined\n */\nexport function nDistinct<T extends object>(\n key: keyof T | ((d: T) => any),\n options: { includeNull?: boolean; includeUndefined?: boolean } = {}\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n return (items: T[]) => {\n const uniques = new Map();\n let count = 0;\n\n for (const item of items) {\n const value = keyFn(item);\n\n if (!uniques.has(value)) {\n // default includes null but not undefined\n if (\n (!options.includeUndefined && value === undefined) ||\n (options.includeNull === false && value === null)\n ) {\n continue;\n }\n\n count += 1;\n uniques.set(value, true);\n }\n }\n\n return count;\n };\n}\n"],"names":[],"mappings":";;;;mBAKE,KACA,UAAiE;AAEjE,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,SAAO,CAAC;AACN,UAAM,UAAU,IAAI;AACpB,QAAI,QAAQ;AAEZ,eAAW,QAAQ;AACjB,YAAM,QAAQ,MAAM;AAEpB,UAAI,CAAC,QAAQ,IAAI;AAEf,YACG,CAAC,QAAQ,oBAAoB,UAAU,UACvC,QAAQ,gBAAgB,SAAS,UAAU;AAE5C;AAAA;AAGF,iBAAS;AACT,gBAAQ,IAAI,OAAO;AAAA;AAAA;AAIvB,WAAO;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"nDistinct.js","sources":["../../../src/summary/nDistinct.ts"],"sourcesContent":["/**\n * Returns a function that computes the distinct count for a key\n * over an array of items. By default it counts nulls but not undefined\n */\nexport function nDistinct<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options: { includeNull?: boolean; includeUndefined?: boolean } = {}\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n return (items: T[]) => {\n const uniques = new Map();\n let count = 0;\n\n let i = 0;\n for (const item of items) {\n const value = keyFn(item, i++, items);\n\n if (!uniques.has(value)) {\n // default includes null but not undefined\n if (\n (!options.includeUndefined && value === undefined) ||\n (options.includeNull === false && value === null)\n ) {\n continue;\n }\n\n count += 1;\n uniques.set(value, true);\n }\n }\n\n return count;\n };\n}\n"],"names":[],"mappings":";;;;mBAKE,KACA,UAAiE;AAEjE,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,SAAO,CAAC;AACN,UAAM,UAAU,IAAI;AACpB,QAAI,QAAQ;AAEZ,QAAI,IAAI;AACR,eAAW,QAAQ;AACjB,YAAM,QAAQ,MAAM,MAAM,KAAK;AAE/B,UAAI,CAAC,QAAQ,IAAI;AAEf,YACG,CAAC,QAAQ,oBAAoB,UAAU,UACvC,QAAQ,gBAAgB,SAAS,UAAU;AAE5C;AAAA;AAGF,iBAAS;AACT,gBAAQ,IAAI,OAAO;AAAA;AAAA;AAIvB,WAAO;AAAA;AAAA;;;;"}
@@ -4,8 +4,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var d3Array = require('d3-array');
6
6
 
7
- function sum(key) {
8
- const keyFn = typeof key === "function" ? key : (d) => d[key];
7
+ function sum(key, options) {
8
+ let keyFn = typeof key === "function" ? key : (d) => d[key];
9
+ if (options == null ? void 0 : options.predicate) {
10
+ const originalKeyFn = keyFn;
11
+ const predicate = options.predicate;
12
+ keyFn = (d, index, array) => predicate(d, index, array) ? originalKeyFn(d, index, array) : 0;
13
+ }
9
14
  return (items) => d3Array.fsum(items, keyFn);
10
15
  }
11
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"sum.js","sources":["../../../src/summary/sum.ts"],"sourcesContent":["import { fsum } from 'd3-array';\n\n/**\n * Returns a function that computes the sum over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function sum<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => fsum(items, keyFn);\n}\n"],"names":["fsum"],"mappings":";;;;;;aAMsC;AACpC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,aAAK,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"sum.js","sources":["../../../src/summary/sum.ts"],"sourcesContent":["import { fsum } from 'd3-array';\n\ntype SumOptions<T> = {\n predicate?: (d: T, index: number, array: Iterable<T>) => boolean;\n};\n\n/**\n * Returns a function that computes the sum over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function sum<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number),\n options?: SumOptions<T>\n) {\n let keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n if (options?.predicate) {\n const originalKeyFn = keyFn;\n const predicate = options.predicate;\n keyFn = (d: T, index: number, array: Iterable<T>) =>\n predicate(d, index, array) ? originalKeyFn(d, index, array) : 0;\n }\n\n return (items: T[]) => fsum(items, keyFn);\n}\n"],"names":["fsum"],"mappings":";;;;;;aAWE,KACA;AAEA,MAAI,QACF,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,MAAI,mCAAS;AACX,UAAM,gBAAgB;AACtB,UAAM,YAAY,QAAQ;AAC1B,YAAQ,CAAC,GAAM,OAAe,UAC5B,UAAU,GAAG,OAAO,SAAS,cAAc,GAAG,OAAO,SAAS;AAAA;AAGlE,SAAO,CAAC,UAAeA,aAAK,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"variance.js","sources":["../../../src/summary/variance.ts"],"sourcesContent":["import { variance as d3variance } from 'd3-array';\n\n/**\n * Returns a function that computes the variance over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function variance<T extends object>(key: keyof T | ((d: T) => number)) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3variance(items, keyFn);\n}\n"],"names":["d3variance"],"mappings":";;;;;;kBAM2C;AACzC,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,iBAAW,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"variance.js","sources":["../../../src/summary/variance.ts"],"sourcesContent":["import { variance as d3variance } from 'd3-array';\n\n/**\n * Returns a function that computes the variance over an array of items\n * @param key A string key of the object or an accessor converting the object to a number\n */\nexport function variance<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => number)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n return (items: T[]) => d3variance(items, keyFn);\n}\n"],"names":["d3variance"],"mappings":";;;;;;kBAOE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAEjD,SAAO,CAAC,UAAeA,iBAAW,OAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cumsum.js","sources":["../../../src/vector/cumsum.ts"],"sourcesContent":["import { fcumsum } from '../helpers/summation';\n\nexport function cumsum<T extends object>(\n key: keyof T | ((d: T) => number | null | undefined)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n // note returns Float64Array not a normal array\n return (items: T[]) => fcumsum(items, keyFn);\n}\n"],"names":["fcumsum"],"mappings":";;;;;;gBAGE;AAEA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAGjD,SAAO,CAAC,UAAeA,kBAAQ,OAAO;AAAA;;;;"}
1
+ {"version":3,"file":"cumsum.js","sources":["../../../src/vector/cumsum.ts"],"sourcesContent":["import { fcumsum } from '../helpers/summation';\n\nexport function cumsum<T extends object>(\n key:\n | keyof T\n | ((d: T, index: number, array: Iterable<T>) => number | null | undefined)\n) {\n const keyFn =\n typeof key === 'function' ? key : (d: T) => (d[key] as unknown) as number;\n\n // note returns Float64Array not a normal array\n return (items: T[]) => fcumsum(items, keyFn);\n}\n"],"names":["fcumsum"],"mappings":";;;;;;gBAGE;AAIA,QAAM,QACJ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAU,EAAE;AAGjD,SAAO,CAAC,UAAeA,kBAAQ,OAAO;AAAA;;;;"}
@@ -8,7 +8,7 @@ function lag(key, options) {
8
8
  return (items) => {
9
9
  return items.map((_, i) => {
10
10
  const lagItem = items[i - n];
11
- return lagItem == null ? defaultValue : keyFn(lagItem);
11
+ return lagItem == null ? defaultValue : keyFn(lagItem, i, items);
12
12
  });
13
13
  };
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lag.js","sources":["../../../src/vector/lag.ts"],"sourcesContent":["type LagOptions = {\n /** Number of positions to lag by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a function that lags a vector by a specified offset (n). Useful for\n * finding previous values to compute deltas with later.\n * @param key The key or accessor to lag\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lag<T extends object>(\n key: keyof T | ((d: T) => any),\n options?: LagOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: any[]) => {\n return items.map((_, i) => {\n const lagItem = items[i - n];\n return lagItem == null ? defaultValue : keyFn(lagItem);\n });\n };\n}\n"],"names":[],"mappings":";;;;aAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,UAAU,MAAM,IAAI;AAC1B,aAAO,WAAW,OAAO,eAAe,MAAM;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"lag.js","sources":["../../../src/vector/lag.ts"],"sourcesContent":["type LagOptions = {\n /** Number of positions to lag by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a function that lags a vector by a specified offset (n). Useful for\n * finding previous values to compute deltas with later.\n * @param key The key or accessor to lag\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lag<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options?: LagOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: T[]) => {\n return items.map((_, i) => {\n const lagItem = items[i - n];\n return lagItem == null ? defaultValue : keyFn(lagItem, i, items);\n });\n };\n}\n"],"names":[],"mappings":";;;;aAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,UAAU,MAAM,IAAI;AAC1B,aAAO,WAAW,OAAO,eAAe,MAAM,SAAS,GAAG;AAAA;AAAA;AAAA;;;;"}
@@ -8,7 +8,7 @@ function lead(key, options) {
8
8
  return (items) => {
9
9
  return items.map((_, i) => {
10
10
  const leadItem = items[i + n];
11
- return leadItem == null ? defaultValue : keyFn(leadItem);
11
+ return leadItem == null ? defaultValue : keyFn(leadItem, i, items);
12
12
  });
13
13
  };
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lead.js","sources":["../../../src/vector/lead.ts"],"sourcesContent":["type LeadOptions = {\n /** Number of positions to lead by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a functions that leads a vector by a specified offset (n). Useful for\n * finding next values for computing deltas with.\n * @param key The key or accessor to lead\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lead<T extends object>(\n key: keyof T | ((d: T) => any),\n options?: LeadOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: any[]) => {\n return items.map((_, i) => {\n const leadItem = items[i + n];\n return leadItem == null ? defaultValue : keyFn(leadItem);\n });\n };\n}\n"],"names":[],"mappings":";;;;cAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,WAAW,MAAM,IAAI;AAC3B,aAAO,YAAY,OAAO,eAAe,MAAM;AAAA;AAAA;AAAA;;;;"}
1
+ {"version":3,"file":"lead.js","sources":["../../../src/vector/lead.ts"],"sourcesContent":["type LeadOptions = {\n /** Number of positions to lead by (default: 1) */\n n?: number;\n /** The default value for non-existent rows. */\n default?: any;\n};\n\n/**\n * Returns a functions that leads a vector by a specified offset (n). Useful for\n * finding next values for computing deltas with.\n * @param key The key or accessor to lead\n * @param options Options to configure roll. e.g. whether to run on partial windows.\n */\nexport function lead<T extends object>(\n key: keyof T | ((d: T, index: number, array: Iterable<T>) => any),\n options?: LeadOptions | undefined | null\n) {\n const keyFn = typeof key === 'function' ? key : (d: T) => d[key];\n\n const { n = 1, default: defaultValue } = options ?? {};\n\n return (items: T[]) => {\n return items.map((_, i) => {\n const leadItem = items[i + n];\n return leadItem == null ? defaultValue : keyFn(leadItem, i, items);\n });\n };\n}\n"],"names":[],"mappings":";;;;cAcE,KACA;AAEA,QAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,CAAC,MAAS,EAAE;AAE5D,QAAM,CAAE,IAAI,GAAG,SAAS,gBAAiB,4BAAW;AAEpD,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG;AACnB,YAAM,WAAW,MAAM,IAAI;AAC3B,aAAO,YAAY,OAAO,eAAe,MAAM,UAAU,GAAG;AAAA;AAAA;AAAA;;;;"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function rowNumber(options) {
6
+ var _a;
7
+ const startAt = (_a = options == null ? void 0 : options.startAt) != null ? _a : 0;
8
+ return (items) => {
9
+ return items.map((_, i) => i + startAt);
10
+ };
11
+ }
12
+
13
+ exports.rowNumber = rowNumber;
14
+ //# sourceMappingURL=rowNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowNumber.js","sources":["../../../src/vector/rowNumber.ts"],"sourcesContent":["type RowNumberOptions = {\n /** what to start row numbers at, default is 0 */\n startAt?: number;\n};\n\n/**\n * Returns a vector of row numbers, starting at 0\n */\nexport function rowNumber<T>(options?: RowNumberOptions) {\n const startAt = options?.startAt ?? 0;\n return (items: T[]) => {\n return items.map((_, i) => i + startAt);\n };\n}\n"],"names":[],"mappings":";;;;mBAQ6B;AAR7B;AASE,QAAM,UAAU,yCAAS,YAAT,YAAoB;AACpC,SAAO,CAAC;AACN,WAAO,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI;AAAA;AAAA;;;;"}