flowerbi-dates 3.10.1 → 3.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/fillDates.js CHANGED
@@ -30,7 +30,7 @@ var days = {
30
30
  },
31
31
  increment: function (d) {
32
32
  return d.clone().add(1, "day");
33
- }
33
+ },
34
34
  };
35
35
  var months = {
36
36
  round: function (d) {
@@ -41,7 +41,7 @@ var months = {
41
41
  },
42
42
  increment: function (d) {
43
43
  return d.clone().add(1, "month");
44
- }
44
+ },
45
45
  };
46
46
  var quarters = {
47
47
  round: function (d) {
@@ -55,7 +55,7 @@ var quarters = {
55
55
  },
56
56
  increment: function (d) {
57
57
  return d.clone().add(3, "months");
58
- }
58
+ },
59
59
  };
60
60
  var years = {
61
61
  round: function (d) {
@@ -66,7 +66,7 @@ var years = {
66
66
  },
67
67
  increment: function (d) {
68
68
  return d.clone().add(1, "year");
69
- }
69
+ },
70
70
  };
71
71
  /**
72
72
  * Standard built-in date types. To customise, implement the {@link FillDateType} interface.
@@ -75,17 +75,20 @@ exports.dateTypes = {
75
75
  days: days,
76
76
  months: months,
77
77
  quarters: quarters,
78
- years: years
78
+ years: years,
79
79
  };
80
80
  /**
81
81
  * Examines a set of dates and chooses the most specific type that includes them all. If
82
82
  * all fall on Jan, 1 then `years` is chosen, and so on.
83
83
  */
84
84
  function detectDateType(dates) {
85
- return !dates.every(function (x) { return x.date() === 1; }) ? exports.dateTypes.days :
86
- !dates.every(function (x) { return x.month() % 3 === 0; }) ? exports.dateTypes.months :
87
- !dates.every(function (x) { return x.month() === 0; }) ? exports.dateTypes.quarters :
88
- exports.dateTypes.years;
85
+ return !dates.every(function (x) { return x.date() === 1; })
86
+ ? exports.dateTypes.days
87
+ : !dates.every(function (x) { return x.month() % 3 === 0; })
88
+ ? exports.dateTypes.months
89
+ : !dates.every(function (x) { return x.month() === 0; })
90
+ ? exports.dateTypes.quarters
91
+ : exports.dateTypes.years;
89
92
  }
90
93
  exports.detectDateType = detectDateType;
91
94
  /**
@@ -143,7 +146,10 @@ function fillDates(_a) {
143
146
  var lower = min ? type.round(parseDate(min)) : undefined;
144
147
  for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {
145
148
  var record = records_1[_i];
146
- var current = parseDate(getDate(record));
149
+ var d = getDate(record);
150
+ if (!d)
151
+ continue;
152
+ var current = parseDate(d);
147
153
  for (;;) {
148
154
  latest = latest ? type.increment(latest) : lower;
149
155
  if (!latest || latest >= current) {
@@ -1 +1 @@
1
- {"version":3,"file":"fillDates.js","sourceRoot":"","sources":["../src/fillDates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fillDates.js","sourceRoot":"","sources":["../src/fillDates.ts"],"names":[],"mappings":"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"}
@@ -17,39 +17,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  var fillDates_1 = require("./fillDates");
18
18
  var moment_1 = __importDefault(require("moment"));
19
19
  test("detects days", function () {
20
- expect((0, fillDates_1.detectDateType)([
21
- (0, moment_1.default)("2021-04-01"),
22
- (0, moment_1.default)("2020-11-01"),
23
- (0, moment_1.default)("2020-11-02"),
24
- (0, moment_1.default)("2022-07-01"),
25
- ])).toBe(fillDates_1.dateTypes.days);
20
+ expect((0, fillDates_1.detectDateType)([(0, moment_1.default)("2021-04-01"), (0, moment_1.default)("2020-11-01"), (0, moment_1.default)("2020-11-02"), (0, moment_1.default)("2022-07-01")])).toBe(fillDates_1.dateTypes.days);
26
21
  });
27
22
  test("detects months", function () {
28
- expect((0, fillDates_1.detectDateType)([
29
- (0, moment_1.default)("2021-04-01"),
30
- (0, moment_1.default)("2020-11-01"),
31
- (0, moment_1.default)("2022-07-01"),
32
- ])).toBe(fillDates_1.dateTypes.months);
23
+ expect((0, fillDates_1.detectDateType)([(0, moment_1.default)("2021-04-01"), (0, moment_1.default)("2020-11-01"), (0, moment_1.default)("2022-07-01")])).toBe(fillDates_1.dateTypes.months);
33
24
  });
34
25
  test("detects quarters", function () {
35
- expect((0, fillDates_1.detectDateType)([
36
- (0, moment_1.default)("2021-04-01"),
37
- (0, moment_1.default)("2020-10-01"),
38
- (0, moment_1.default)("2022-07-01"),
39
- ])).toBe(fillDates_1.dateTypes.quarters);
26
+ expect((0, fillDates_1.detectDateType)([(0, moment_1.default)("2021-04-01"), (0, moment_1.default)("2020-10-01"), (0, moment_1.default)("2022-07-01")])).toBe(fillDates_1.dateTypes.quarters);
40
27
  });
41
28
  test("detects years", function () {
42
- expect((0, fillDates_1.detectDateType)([
43
- (0, moment_1.default)("2021-01-01"),
44
- (0, moment_1.default)("2020-01-01"),
45
- (0, moment_1.default)("2022-01-01"),
46
- ])).toBe(fillDates_1.dateTypes.years);
29
+ expect((0, fillDates_1.detectDateType)([(0, moment_1.default)("2021-01-01"), (0, moment_1.default)("2020-01-01"), (0, moment_1.default)("2022-01-01")])).toBe(fillDates_1.dateTypes.years);
47
30
  });
48
31
  test("handles empty list", function () {
49
32
  expect((0, fillDates_1.fillDates)({
50
33
  records: [],
51
34
  getDate: function (x) { return 0; },
52
- fill: function () { return undefined; }
35
+ fill: function () { return undefined; },
53
36
  })).toStrictEqual([]);
54
37
  });
55
38
  test("leaves complete months alone", function () {
@@ -63,7 +46,7 @@ test("leaves complete months alone", function () {
63
46
  getDate: function (rec) { return rec.date; },
64
47
  fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
65
48
  min: "2020-04-12",
66
- max: "2020-07-06"
49
+ max: "2020-07-06",
67
50
  })).toStrictEqual([
68
51
  { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
69
52
  { label: "May 2020", date: "2020-05-01", totalSales: 4 },
@@ -80,7 +63,7 @@ test("fills in missing months", function () {
80
63
  { date: "2020-11-01", totalSales: 3 },
81
64
  ],
82
65
  getDate: function (rec) { return rec.date; },
83
- fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); }
66
+ fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
84
67
  })).toStrictEqual([
85
68
  { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
86
69
  { label: "May 2020", totalSales: 0 },
@@ -103,7 +86,7 @@ test("fills in missing months and min/max range", function () {
103
86
  getDate: function (rec) { return rec.date; },
104
87
  fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
105
88
  min: "2020-02-15",
106
- max: "2020-12-02"
89
+ max: "2020-12-02",
107
90
  })).toStrictEqual([
108
91
  { label: "Feb 2020", totalSales: 0 },
109
92
  { label: "Mar 2020", totalSales: 0 },
@@ -129,7 +112,7 @@ test("leaves complete quarters alone", function () {
129
112
  getDate: function (rec) { return rec.date; },
130
113
  fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
131
114
  min: "2020-07-12",
132
- max: "2020-04-06"
115
+ max: "2020-04-06",
133
116
  })).toStrictEqual([
134
117
  { label: "Jul-Sep 2020", date: "2020-07-01", totalSales: 10 },
135
118
  { label: "Oct-Dec 2020", date: "2020-10-01", totalSales: 4 },
@@ -147,7 +130,7 @@ test("fills in missing quarters", function () {
147
130
  ],
148
131
  type: fillDates_1.dateTypes.quarters,
149
132
  getDate: function (rec) { return rec.date; },
150
- fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); }
133
+ fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
151
134
  })).toStrictEqual([
152
135
  { label: "Apr-Jun 2020", date: "2020-04-01", totalSales: 10 },
153
136
  { label: "Jul-Sep 2020", totalSales: 0 },
@@ -170,7 +153,7 @@ test("fills in missing quarters and min/max range", function () {
170
153
  getDate: function (rec) { return rec.date; },
171
154
  fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
172
155
  min: "2019-10-10",
173
- max: "2022-01-06"
156
+ max: "2022-01-06",
174
157
  })).toStrictEqual([
175
158
  { label: "Oct-Dec 2019", totalSales: 0 },
176
159
  { label: "Jan-Mar 2020", totalSales: 0 },
@@ -194,7 +177,7 @@ test("explicit type overrides detection", function () {
194
177
  ],
195
178
  getDate: function (rec) { return rec.date; },
196
179
  fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
197
- type: fillDates_1.dateTypes.months
180
+ type: fillDates_1.dateTypes.months,
198
181
  })).toStrictEqual([
199
182
  { label: "Jul 2020", date: "2020-07-01", totalSales: 10 },
200
183
  { label: "Aug 2020", totalSales: 0 },
@@ -208,4 +191,24 @@ test("explicit type overrides detection", function () {
208
191
  { label: "Apr 2021", date: "2021-04-01", totalSales: 3 },
209
192
  ]);
210
193
  });
194
+ test("skips any rogue null dates", function () {
195
+ expect((0, fillDates_1.fillDates)({
196
+ records: [
197
+ { date: null, totalSales: 10 },
198
+ { date: "2020-06-01", totalSales: 4 },
199
+ { date: "2020-07-01", totalSales: 9 },
200
+ { date: "2020-11-01", totalSales: 3 },
201
+ ],
202
+ getDate: function (rec) { return rec.date; },
203
+ fill: function (label, rec) { return (__assign({ label: label, totalSales: 0 }, rec)); },
204
+ type: fillDates_1.dateTypes.months,
205
+ })).toStrictEqual([
206
+ { label: "Jun 2020", date: "2020-06-01", totalSales: 4 },
207
+ { label: "Jul 2020", date: "2020-07-01", totalSales: 9 },
208
+ { label: "Aug 2020", totalSales: 0 },
209
+ { label: "Sep 2020", totalSales: 0 },
210
+ { label: "Oct 2020", totalSales: 0 },
211
+ { label: "Nov 2020", date: "2020-11-01", totalSales: 3 },
212
+ ]);
213
+ });
211
214
  //# sourceMappingURL=fillDates.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fillDates.test.js","sourceRoot":"","sources":["../src/fillDates.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fillDates.test.js","sourceRoot":"","sources":["../src/fillDates.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAmE;AACnE,kDAA4B;AAE5B,IAAI,CAAC,cAAc,EAAE;IACjB,MAAM,CAAC,IAAA,0BAAc,EAAC,CAAC,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,IAAI,CAAC,CAAC;AAC1I,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gBAAgB,EAAE;IACnB,MAAM,CAAC,IAAA,0BAAc,EAAC,CAAC,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,MAAM,CAAC,CAAC;AACtH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kBAAkB,EAAE;IACrB,MAAM,CAAC,IAAA,0BAAc,EAAC,CAAC,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;AACxH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,eAAe,EAAE;IAClB,MAAM,CAAC,IAAA,0BAAc,EAAC,CAAC,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,EAAE,IAAA,gBAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,KAAK,CAAC,CAAC;AACrH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oBAAoB,EAAE;IACvB,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC;QACjB,IAAI,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS;KACxB,CAAC,CACL,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE;IACjC,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,YAAY;KACpB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC3D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE;IAC5B,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;KACL,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC3D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE;IAC9C,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,YAAY;KACpB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;KACvC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE;IACnC,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,YAAY;KACpB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7D,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC/D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE;IAC9B,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,IAAI,EAAE,qBAAS,CAAC,QAAQ;QACxB,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;KACL,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC/D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE;IAChD,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,IAAI,EAAE,qBAAS,CAAC,QAAQ;QACxB,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,GAAG,EAAE,YAAY;QACjB,GAAG,EAAE,YAAY;KACpB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE;KAC3C,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE;IACtC,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAI,EAAR,CAAQ;QAC1B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC3D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE;IAC/B,MAAM,CACF,IAAA,qBAAS,EAAC;QACN,OAAO,EAAE;YACL,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;YAC9B,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC;QACD,OAAO,EAAE,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,IAAK,EAAT,CAAS;QAC3B,IAAI,EAAE,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,YAClB,KAAK,OAAA,EACL,UAAU,EAAE,CAAC,IACV,GAAG,EACR,EAJoB,CAIpB;QACF,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB,CAAC,CACL,CAAC,aAAa,CAAC;QACZ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE;QACpC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;KAC3D,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowerbi-dates",
3
- "version": "3.10.1",
3
+ "version": "3.10.3",
4
4
  "author": "Daniel Earwicker <dan@earwicker.com>",
5
5
  "license": "MIT",
6
6
  "description": "FlowerBI: ultra-minimal BI analytics query and UI tools",
@@ -2,64 +2,51 @@ import { fillDates, dateTypes, detectDateType } from "./fillDates";
2
2
  import moment from "moment";
3
3
 
4
4
  test("detects days", () => {
5
- expect(detectDateType([
6
- moment("2021-04-01"),
7
- moment("2020-11-01"),
8
- moment("2020-11-02"),
9
- moment("2022-07-01"),
10
- ])).toBe(dateTypes.days);
5
+ expect(detectDateType([moment("2021-04-01"), moment("2020-11-01"), moment("2020-11-02"), moment("2022-07-01")])).toBe(dateTypes.days);
11
6
  });
12
7
 
13
8
  test("detects months", () => {
14
- expect(detectDateType([
15
- moment("2021-04-01"),
16
- moment("2020-11-01"),
17
- moment("2022-07-01"),
18
- ])).toBe(dateTypes.months);
9
+ expect(detectDateType([moment("2021-04-01"), moment("2020-11-01"), moment("2022-07-01")])).toBe(dateTypes.months);
19
10
  });
20
11
 
21
12
  test("detects quarters", () => {
22
- expect(detectDateType([
23
- moment("2021-04-01"),
24
- moment("2020-10-01"),
25
- moment("2022-07-01"),
26
- ])).toBe(dateTypes.quarters);
13
+ expect(detectDateType([moment("2021-04-01"), moment("2020-10-01"), moment("2022-07-01")])).toBe(dateTypes.quarters);
27
14
  });
28
15
 
29
16
  test("detects years", () => {
30
- expect(detectDateType([
31
- moment("2021-01-01"),
32
- moment("2020-01-01"),
33
- moment("2022-01-01"),
34
- ])).toBe(dateTypes.years);
17
+ expect(detectDateType([moment("2021-01-01"), moment("2020-01-01"), moment("2022-01-01")])).toBe(dateTypes.years);
35
18
  });
36
19
 
37
20
  test("handles empty list", () => {
38
- expect(fillDates({
39
- records: [],
40
- getDate: x => 0,
41
- fill: () => undefined
42
- })).toStrictEqual([]);
21
+ expect(
22
+ fillDates({
23
+ records: [],
24
+ getDate: (x) => 0,
25
+ fill: () => undefined,
26
+ })
27
+ ).toStrictEqual([]);
43
28
  });
44
29
 
45
30
  test("leaves complete months alone", () => {
46
- expect(fillDates({
47
- records: [
48
- { date: "2020-04-01", totalSales: 10 },
49
- { date: "2020-05-01", totalSales: 4 },
50
- { date: "2020-06-01", totalSales: 9 },
51
- { date: "2020-07-01", totalSales: 3 },
52
- ],
53
- getDate: rec => rec.date,
54
- fill: (label, rec) => ({
55
- label,
56
- totalSales: 0,
57
- ...rec
58
- }),
59
- min: "2020-04-12",
60
- max: "2020-07-06"
61
- })).toStrictEqual([
62
- { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
31
+ expect(
32
+ fillDates({
33
+ records: [
34
+ { date: "2020-04-01", totalSales: 10 },
35
+ { date: "2020-05-01", totalSales: 4 },
36
+ { date: "2020-06-01", totalSales: 9 },
37
+ { date: "2020-07-01", totalSales: 3 },
38
+ ],
39
+ getDate: (rec) => rec.date,
40
+ fill: (label, rec) => ({
41
+ label,
42
+ totalSales: 0,
43
+ ...rec,
44
+ }),
45
+ min: "2020-04-12",
46
+ max: "2020-07-06",
47
+ })
48
+ ).toStrictEqual([
49
+ { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
63
50
  { label: "May 2020", date: "2020-05-01", totalSales: 4 },
64
51
  { label: "Jun 2020", date: "2020-06-01", totalSales: 9 },
65
52
  { label: "Jul 2020", date: "2020-07-01", totalSales: 3 },
@@ -67,20 +54,22 @@ test("leaves complete months alone", () => {
67
54
  });
68
55
 
69
56
  test("fills in missing months", () => {
70
- expect(fillDates({
71
- records: [
72
- { date: "2020-04-01", totalSales: 10 },
73
- { date: "2020-06-01", totalSales: 4 },
74
- { date: "2020-07-01", totalSales: 9 },
75
- { date: "2020-11-01", totalSales: 3 },
76
- ],
77
- getDate: rec => rec.date,
78
- fill: (label, rec) => ({
79
- label,
80
- totalSales: 0,
81
- ...rec
57
+ expect(
58
+ fillDates({
59
+ records: [
60
+ { date: "2020-04-01", totalSales: 10 },
61
+ { date: "2020-06-01", totalSales: 4 },
62
+ { date: "2020-07-01", totalSales: 9 },
63
+ { date: "2020-11-01", totalSales: 3 },
64
+ ],
65
+ getDate: (rec) => rec.date,
66
+ fill: (label, rec) => ({
67
+ label,
68
+ totalSales: 0,
69
+ ...rec,
70
+ }),
82
71
  })
83
- })).toStrictEqual([
72
+ ).toStrictEqual([
84
73
  { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
85
74
  { label: "May 2020", totalSales: 0 },
86
75
  { label: "Jun 2020", date: "2020-06-01", totalSales: 4 },
@@ -93,22 +82,24 @@ test("fills in missing months", () => {
93
82
  });
94
83
 
95
84
  test("fills in missing months and min/max range", () => {
96
- expect(fillDates({
97
- records: [
98
- { date: "2020-04-01", totalSales: 10 },
99
- { date: "2020-06-01", totalSales: 4 },
100
- { date: "2020-07-01", totalSales: 9 },
101
- { date: "2020-11-01", totalSales: 3 },
102
- ],
103
- getDate: rec => rec.date,
104
- fill: (label, rec) => ({
105
- label,
106
- totalSales: 0,
107
- ...rec
108
- }),
109
- min: "2020-02-15",
110
- max: "2020-12-02"
111
- })).toStrictEqual([
85
+ expect(
86
+ fillDates({
87
+ records: [
88
+ { date: "2020-04-01", totalSales: 10 },
89
+ { date: "2020-06-01", totalSales: 4 },
90
+ { date: "2020-07-01", totalSales: 9 },
91
+ { date: "2020-11-01", totalSales: 3 },
92
+ ],
93
+ getDate: (rec) => rec.date,
94
+ fill: (label, rec) => ({
95
+ label,
96
+ totalSales: 0,
97
+ ...rec,
98
+ }),
99
+ min: "2020-02-15",
100
+ max: "2020-12-02",
101
+ })
102
+ ).toStrictEqual([
112
103
  { label: "Feb 2020", totalSales: 0 },
113
104
  { label: "Mar 2020", totalSales: 0 },
114
105
  { label: "Apr 2020", date: "2020-04-01", totalSales: 10 },
@@ -124,23 +115,25 @@ test("fills in missing months and min/max range", () => {
124
115
  });
125
116
 
126
117
  test("leaves complete quarters alone", () => {
127
- expect(fillDates({
128
- records: [
129
- { date: "2020-07-01", totalSales: 10 },
130
- { date: "2020-10-01", totalSales: 4 },
131
- { date: "2021-01-01", totalSales: 9 },
132
- { date: "2021-04-01", totalSales: 3 },
133
- ],
134
- getDate: rec => rec.date,
135
- fill: (label, rec) => ({
136
- label,
137
- totalSales: 0,
138
- ...rec
139
- }),
140
- min: "2020-07-12",
141
- max: "2020-04-06"
142
- })).toStrictEqual([
143
- { label: "Jul-Sep 2020", date: "2020-07-01", totalSales: 10 },
118
+ expect(
119
+ fillDates({
120
+ records: [
121
+ { date: "2020-07-01", totalSales: 10 },
122
+ { date: "2020-10-01", totalSales: 4 },
123
+ { date: "2021-01-01", totalSales: 9 },
124
+ { date: "2021-04-01", totalSales: 3 },
125
+ ],
126
+ getDate: (rec) => rec.date,
127
+ fill: (label, rec) => ({
128
+ label,
129
+ totalSales: 0,
130
+ ...rec,
131
+ }),
132
+ min: "2020-07-12",
133
+ max: "2020-04-06",
134
+ })
135
+ ).toStrictEqual([
136
+ { label: "Jul-Sep 2020", date: "2020-07-01", totalSales: 10 },
144
137
  { label: "Oct-Dec 2020", date: "2020-10-01", totalSales: 4 },
145
138
  { label: "Jan-Mar 2021", date: "2021-01-01", totalSales: 9 },
146
139
  { label: "Apr-Jun 2021", date: "2021-04-01", totalSales: 3 },
@@ -148,49 +141,53 @@ test("leaves complete quarters alone", () => {
148
141
  });
149
142
 
150
143
  test("fills in missing quarters", () => {
151
- expect(fillDates({
152
- records: [
153
- { date: "2020-04-01", totalSales: 10 },
154
- { date: "2020-10-01", totalSales: 4 },
155
- { date: "2021-01-01", totalSales: 9 },
156
- { date: "2021-10-01", totalSales: 3 },
157
- ],
158
- type: dateTypes.quarters,
159
- getDate: rec => rec.date,
160
- fill: (label, rec) => ({
161
- label,
162
- totalSales: 0,
163
- ...rec
144
+ expect(
145
+ fillDates({
146
+ records: [
147
+ { date: "2020-04-01", totalSales: 10 },
148
+ { date: "2020-10-01", totalSales: 4 },
149
+ { date: "2021-01-01", totalSales: 9 },
150
+ { date: "2021-10-01", totalSales: 3 },
151
+ ],
152
+ type: dateTypes.quarters,
153
+ getDate: (rec) => rec.date,
154
+ fill: (label, rec) => ({
155
+ label,
156
+ totalSales: 0,
157
+ ...rec,
158
+ }),
164
159
  })
165
- })).toStrictEqual([
160
+ ).toStrictEqual([
166
161
  { label: "Apr-Jun 2020", date: "2020-04-01", totalSales: 10 },
167
162
  { label: "Jul-Sep 2020", totalSales: 0 },
168
163
  { label: "Oct-Dec 2020", date: "2020-10-01", totalSales: 4 },
169
164
  { label: "Jan-Mar 2021", date: "2021-01-01", totalSales: 9 },
170
165
  { label: "Apr-Jun 2021", totalSales: 0 },
171
- { label: "Jul-Sep 2021", totalSales: 0 },
166
+ { label: "Jul-Sep 2021", totalSales: 0 },
172
167
  { label: "Oct-Dec 2021", date: "2021-10-01", totalSales: 3 },
173
168
  ]);
174
169
  });
175
170
 
176
171
  test("fills in missing quarters and min/max range", () => {
177
- expect(fillDates({
178
- records: [
179
- { date: "2020-04-01", totalSales: 10 },
180
- { date: "2020-10-01", totalSales: 4 },
181
- { date: "2021-01-01", totalSales: 9 },
182
- { date: "2021-10-01", totalSales: 3 },
183
- ],
184
- type: dateTypes.quarters,
185
- getDate: rec => rec.date,
186
- fill: (label, rec) => ({
187
- label,
188
- totalSales: 0,
189
- ...rec
190
- }),
191
- min: "2019-10-10",
192
- max: "2022-01-06"
193
- })).toStrictEqual([
172
+ expect(
173
+ fillDates({
174
+ records: [
175
+ { date: "2020-04-01", totalSales: 10 },
176
+ { date: "2020-10-01", totalSales: 4 },
177
+ { date: "2021-01-01", totalSales: 9 },
178
+ { date: "2021-10-01", totalSales: 3 },
179
+ ],
180
+ type: dateTypes.quarters,
181
+ getDate: (rec) => rec.date,
182
+ fill: (label, rec) => ({
183
+ label,
184
+ totalSales: 0,
185
+ ...rec,
186
+ }),
187
+ min: "2019-10-10",
188
+ max: "2022-01-06",
189
+ })
190
+ ).toStrictEqual([
194
191
  { label: "Oct-Dec 2019", totalSales: 0 },
195
192
  { label: "Jan-Mar 2020", totalSales: 0 },
196
193
  { label: "Apr-Jun 2020", date: "2020-04-01", totalSales: 10 },
@@ -205,21 +202,23 @@ test("fills in missing quarters and min/max range", () => {
205
202
  });
206
203
 
207
204
  test("explicit type overrides detection", () => {
208
- expect(fillDates({
209
- records: [
210
- { date: "2020-07-01", totalSales: 10 },
211
- { date: "2020-10-01", totalSales: 4 },
212
- { date: "2021-01-01", totalSales: 9 },
213
- { date: "2021-04-01", totalSales: 3 },
214
- ],
215
- getDate: rec => rec.date,
216
- fill: (label, rec) => ({
217
- label,
218
- totalSales: 0,
219
- ...rec
220
- }),
221
- type: dateTypes.months
222
- })).toStrictEqual([
205
+ expect(
206
+ fillDates({
207
+ records: [
208
+ { date: "2020-07-01", totalSales: 10 },
209
+ { date: "2020-10-01", totalSales: 4 },
210
+ { date: "2021-01-01", totalSales: 9 },
211
+ { date: "2021-04-01", totalSales: 3 },
212
+ ],
213
+ getDate: (rec) => rec.date,
214
+ fill: (label, rec) => ({
215
+ label,
216
+ totalSales: 0,
217
+ ...rec,
218
+ }),
219
+ type: dateTypes.months,
220
+ })
221
+ ).toStrictEqual([
223
222
  { label: "Jul 2020", date: "2020-07-01", totalSales: 10 },
224
223
  { label: "Aug 2020", totalSales: 0 },
225
224
  { label: "Sep 2020", totalSales: 0 },
@@ -231,4 +230,31 @@ test("explicit type overrides detection", () => {
231
230
  { label: "Mar 2021", totalSales: 0 },
232
231
  { label: "Apr 2021", date: "2021-04-01", totalSales: 3 },
233
232
  ]);
234
- });
233
+ });
234
+
235
+ test("skips any rogue null dates", () => {
236
+ expect(
237
+ fillDates({
238
+ records: [
239
+ { date: null, totalSales: 10 },
240
+ { date: "2020-06-01", totalSales: 4 },
241
+ { date: "2020-07-01", totalSales: 9 },
242
+ { date: "2020-11-01", totalSales: 3 },
243
+ ],
244
+ getDate: (rec) => rec.date!,
245
+ fill: (label, rec) => ({
246
+ label,
247
+ totalSales: 0,
248
+ ...rec,
249
+ }),
250
+ type: dateTypes.months,
251
+ })
252
+ ).toStrictEqual([
253
+ { label: "Jun 2020", date: "2020-06-01", totalSales: 4 },
254
+ { label: "Jul 2020", date: "2020-07-01", totalSales: 9 },
255
+ { label: "Aug 2020", totalSales: 0 },
256
+ { label: "Sep 2020", totalSales: 0 },
257
+ { label: "Oct 2020", totalSales: 0 },
258
+ { label: "Nov 2020", date: "2020-11-01", totalSales: 3 },
259
+ ]);
260
+ });
package/src/fillDates.ts CHANGED
@@ -21,7 +21,7 @@ export type FillDateType = {
21
21
  format(d: Moment): string;
22
22
  /** Increment the date by the unit. The given date will already be rounded down. */
23
23
  increment(d: Moment): Moment;
24
- }
24
+ };
25
25
 
26
26
  const days: FillDateType = {
27
27
  round(d) {
@@ -32,7 +32,7 @@ const days: FillDateType = {
32
32
  },
33
33
  increment(d) {
34
34
  return d.clone().add(1, "day");
35
- }
35
+ },
36
36
  };
37
37
 
38
38
  const months: FillDateType = {
@@ -44,8 +44,8 @@ const months: FillDateType = {
44
44
  },
45
45
  increment(d) {
46
46
  return d.clone().add(1, "month");
47
- }
48
- }
47
+ },
48
+ };
49
49
 
50
50
  const quarters: FillDateType = {
51
51
  round(d) {
@@ -59,8 +59,8 @@ const quarters: FillDateType = {
59
59
  },
60
60
  increment(d) {
61
61
  return d.clone().add(3, "months");
62
- }
63
- }
62
+ },
63
+ };
64
64
 
65
65
  const years: FillDateType = {
66
66
  round(d) {
@@ -71,14 +71,17 @@ const years: FillDateType = {
71
71
  },
72
72
  increment(d) {
73
73
  return d.clone().add(1, "year");
74
- }
75
- }
74
+ },
75
+ };
76
76
 
77
77
  /**
78
78
  * Standard built-in date types. To customise, implement the {@link FillDateType} interface.
79
79
  */
80
80
  export const dateTypes = {
81
- days, months, quarters, years
81
+ days,
82
+ months,
83
+ quarters,
84
+ years,
82
85
  } as const;
83
86
 
84
87
  /**
@@ -86,10 +89,13 @@ export const dateTypes = {
86
89
  * all fall on Jan, 1 then `years` is chosen, and so on.
87
90
  */
88
91
  export function detectDateType(dates: Moment[]): FillDateType {
89
- return !dates.every(x => x.date() === 1) ? dateTypes.days :
90
- !dates.every(x => x.month() % 3 === 0) ? dateTypes.months :
91
- !dates.every(x => x.month() === 0) ? dateTypes.quarters :
92
- dateTypes.years;
92
+ return !dates.every((x) => x.date() === 1)
93
+ ? dateTypes.days
94
+ : !dates.every((x) => x.month() % 3 === 0)
95
+ ? dateTypes.months
96
+ : !dates.every((x) => x.month() === 0)
97
+ ? dateTypes.quarters
98
+ : dateTypes.years;
93
99
  }
94
100
 
95
101
  /** Options for {@link fillDates} function. */
@@ -100,19 +106,19 @@ export interface FillDatesOptions<T, R> {
100
106
  type?: FillDateType;
101
107
  /** Extracts a date value from a record in the input list. */
102
108
  getDate(record: T): FillDate;
103
- /**
109
+ /**
104
110
  * Generate a record for a date, from the formatted {@link dateText} and
105
111
  * the input record for that date, if any.
106
112
  */
107
113
  fill(dateText: string, record: T | undefined): R;
108
- /**
114
+ /**
109
115
  * The minimum date to generate. It will be rounded down by the {@link type}
110
- * so doesn't need to be on an exact boundary.
116
+ * so doesn't need to be on an exact boundary.
111
117
  */
112
118
  min?: FillDate;
113
- /**
119
+ /**
114
120
  * The maximum date to generate. It will be rounded down by the {@link type}
115
- * so doesn't need to be on an exact boundary.
121
+ * so doesn't need to be on an exact boundary.
116
122
  */
117
123
  max?: FillDate;
118
124
  }
@@ -121,10 +127,10 @@ export interface FillDatesOptions<T, R> {
121
127
  * When querying for a time series chart, e.g. x-axis is _Month_ and y-axis is
122
128
  * _Total Sales_, there may be months where nothing was sold so they are
123
129
  * missing from the list of records.
124
- *
130
+ *
125
131
  * To render a proper time-series, we need these gaps to be filled in with
126
132
  * runs of fake records that give zero amounts for those months. e.g.
127
- *
133
+ *
128
134
  * ```ts
129
135
  * const filled = fillDates({
130
136
  * records: [
@@ -141,64 +147,65 @@ export interface FillDatesOptions<T, R> {
141
147
  * })
142
148
  * });
143
149
  * ```
144
- *
150
+ *
145
151
  * In the above example we add a `label` property to all the records, and
146
- * for the records that fill the gaps we set the `totalSales` property to 0.
152
+ * for the records that fill the gaps we set the `totalSales` property to 0.
147
153
  * For the real records, `...rec` will copy the real value of `totalSales`.
148
- *
154
+ *
149
155
  * To do this, we need to know:
150
- *
156
+ *
151
157
  * - how to round a date to the start of a unit (year, month, quarter),
152
158
  * - how to increment a date by that unit,
153
159
  * - how to format a date to a string for display.
154
- *
160
+ *
155
161
  * These operations are encapsulated by the {@link FillDateType} interface.
156
162
  * Several built-in types are provided in {@link dateTypes}, but you can
157
163
  * implement your own.
158
- *
164
+ *
159
165
  * Optionally you can also pass `min` and `max` dates, which will cause
160
166
  * extra records to be added at the start and end of the range if necessary.
161
- *
167
+ *
162
168
  * If you don't pass a `type`, a suitable type will be detected based on
163
169
  * how the input record dates fall on unit boundaries.
164
170
  */
165
- export function fillDates<T, R>(
166
- { records, getDate, fill, min, max, type }: FillDatesOptions<T, R>
167
- ) {
171
+ export function fillDates<T, R>({ records, getDate, fill, min, max, type }: FillDatesOptions<T, R>) {
168
172
  records = [...records];
169
173
  records.sort((x, y) => parseDate(getDate(x)).diff(parseDate(getDate(y))));
170
174
 
171
- type = type ?? detectDateType(records.map(d => parseDate(getDate(d))));
175
+ type = type ?? detectDateType(records.map((d) => parseDate(getDate(d))));
172
176
 
173
177
  const results: R[] = [];
174
178
  let latest: Moment | undefined = undefined;
175
179
  const lower = min ? type.round(parseDate(min)) : undefined;
176
-
180
+
177
181
  for (const record of records) {
178
- const current = parseDate(getDate(record));
179
-
182
+ const d = getDate(record);
183
+ if (!d) continue;
184
+
185
+ const current = parseDate(d);
186
+
180
187
  for (;;) {
181
188
  latest = latest ? type.increment(latest) : lower;
182
189
  if (!latest || latest >= current) {
183
190
  break;
184
191
  }
185
192
 
186
- results.push(fill(type.format(latest), undefined));
193
+ results.push(fill(type.format(latest), undefined));
187
194
  }
188
-
195
+
189
196
  results.push(fill(type.format(current), record));
190
197
  latest = current;
191
198
  }
192
-
199
+
193
200
  if (latest && max) {
194
- const upper = type.round(parseDate(max))
201
+ const upper = type.round(parseDate(max));
195
202
  for (;;) {
196
203
  latest = type.increment(latest);
197
204
  if (latest > upper) {
198
205
  break;
199
206
  }
200
207
 
201
- results.push(fill(type.format(latest), undefined));
208
+ results.push(fill(type.format(latest), undefined));
202
209
  }
203
210
  }
204
211