@valkyriestudios/utils 6.3.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic
6
6
  Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [7.1.0] - 2023-05-13
9
+ ### Added
10
+ - date/addUTC (1.000.000 ops in ~750ms)
11
+ - date/endOfUTC (1.000.000 ops in ~600ms), supports year,quarter,month,week,week_sun,day,hour,minute,second
12
+
13
+ ### Improved
14
+ - date/startOfUTC now supports 'quarter'
15
+ - date/startOfUTC now supports 'week' (monday as first day of the week)
16
+ - date/startOfUTC now supports 'week_sun' (sunday as first day of the week)
17
+
18
+ ## [7.0.0] - 2023-05-07
19
+ ### Added
20
+ - Dep: @babel/cli
21
+ - .babelrc
22
+ - Switch to using babel-cli for transpiling build
23
+ - date/startOfUTC (1.000.000 ops in ~500ms)
24
+
25
+ ### Improved
26
+ - Dep: Upgrade @babel/core to 7.21.8
27
+ - Dep: Upgrade eslint to 8.40.0
28
+
29
+ ### Removed
30
+ - Dep: gulp
31
+ - Dep: gulp-babel
32
+ - gulpfile
33
+ - array/mapPrimitive: keytrim option
34
+
8
35
  ## [6.3.0] - 2023-05-01
9
36
  ### Added
10
37
  - date/toUTC (benchmark 1.000.000 opts in ~500ms)
package/README.md CHANGED
@@ -117,12 +117,12 @@ output:
117
117
 
118
118
  options are the same as the mapKey function
119
119
 
120
- - **mapPrimitive(val:any, opts:object={keytrim:true,valtrim:false,keyround:false,valround:false})**
120
+ - **mapPrimitive(val:any, opts:object={valtrim:false,keyround:false,valround:false})**
121
121
  Map an array of primitives (number/string)
122
122
  ```js
123
123
  mapPrimitive([1,2,3]); // {1: 1, 2: 2, 3: 3}
124
124
  mapPrimitive(['hello', 'hello', 'foo', 'bar']); // {hello: 'hello', foo: 'foo', bar: 'bar'}
125
- mapPrimitive(['hello', ' hello', 'foo', ' foo'], {keytrim: true, valtrim: true}); // {hello: 'hello', foo: 'foo'}
125
+ mapPrimitive(['hello', ' hello', 'foo', ' foo'], {valtrim: true}); // {hello: 'hello', foo: 'foo'}
126
126
  ```
127
127
 
128
128
  - **dedupe(val:Array)**
@@ -287,6 +287,73 @@ Returns the current unix timestamp in seconds
287
287
  - **nowUnixMs()**
288
288
  Returns the current unix timestamp in milliseconds
289
289
 
290
+ - **startOfUTC(val:Date, key:String)**
291
+ Take the incoming date and return a date set to the start of passed key. Possible key options(year,quarter,month,week,week_sun,day,hour,minute,second).
292
+
293
+ Note: Does not touch the date object passed
294
+ ```js
295
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'year'); // new Date("2023-01-01T00:00:00.000Z")
296
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'quarter'); // new Date("2023-04-01T00:00:00.000Z")
297
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'month'); // new Date("2023-05-01T00:00:00.000Z")
298
+ startOfUTC(new Date("2023-05-14T12:04:27+02:00"), 'week'); // new Date("2023-05-08T00:00:00.000Z")
299
+ startOfUTC(new Date("2023-02-03T12:04:27+02:00"), 'week'); // new Date("2023-01-30T00:00:00.000Z")
300
+ startOfUTC(new Date("2023-01-01T12:04:27+02:00"), 'week'); // new Date("2022-12-26T00:00:00.000Z")
301
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'week_sun'); // new Date("2023-04-30T00:00:00.000Z")
302
+ startOfUTC(new Date("2023-02-03T12:04:27+02:00"), 'week_sun'); // new Date("2023-01-29T00:00:00.000Z")
303
+ startOfUTC(new Date("2022-01-01T12:04:27+02:00"), 'week_sun'); // new Date("2021-12-26T00:00:00.000Z")
304
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'day'); // new Date("2023-05-04T00:00:00.000Z")
305
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'hour'); // new Date("2023-05-04T10:00:00.000Z")
306
+ startOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'minute'); // new Date("2023-05-04T10:04:00.000Z")
307
+ startOfUTC(new Date("2023-05-04T12:04:27.043+02:00"), 'second'); // new Date("2023-05-04T10:04:27.000Z")
308
+ ```
309
+
310
+ - **endOfUTC(val:Date, key:String)**
311
+ Take the incoming date and return a date set to the end of passed key. Possible key options(year,quarter,month,week,week_sun,day,hour,minute,second).
312
+
313
+ Note: Does not touch the date object passed
314
+ ```js
315
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'year'); // new Date("2023-12-31T23:59:59.999Z")
316
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'quarter'); // new Date("2023-06-30T23:59:59.999Z")
317
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'month'); // new Date("2023-05-31T23:59:59.999Z")
318
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'week'); // new Date("2023-05-07T23:59:59.999Z")
319
+ endOfUTC(new Date("2023-05-13T12:04:27+02:00"), 'week'); // new Date("2023-05-14T23:59:59.999Z")
320
+ endOfUTC(new Date("2023-05-14T12:04:27+02:00"), 'week'); // new Date("2023-05-14T23:59:59.999Z")
321
+ endOfUTC(new Date("2023-02-27T12:04:27+02:00"), 'week'); // new Date("2023-03-05T23:59:59.999Z")
322
+ endOfUTC(new Date("2022-12-29T12:04:27+02:00"), 'week'); // new Date("2023-01-01T23:59:59.999Z")
323
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'week_sun'); // new Date("2023-05-06T23:59:59.999Z")
324
+ endOfUTC(new Date("2023-05-12T12:04:27+02:00"), 'week_sun'); // new Date("2023-05-13T23:59:59.999Z")
325
+ endOfUTC(new Date("2023-05-06T12:04:27+02:00"), 'week_sun'); // new Date("2023-05-06T23:59:59.999Z")
326
+ endOfUTC(new Date("2023-03-29T12:04:27+02:00"), 'week_sun'); // new Date("2023-04-01T23:59:59.999Z")
327
+ endOfUTC(new Date("2021-12-28T12:04:27+02:00"), 'week_sun'); // new Date("2022-01-01T23:59:59.999Z")
328
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'day'); // new Date("2023-05-04T23:59:59.999Z")
329
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'hour'); // new Date("2023-05-04T10:59:59.999Z")
330
+ endOfUTC(new Date("2023-05-04T12:04:27+02:00"), 'minute'); // new Date("2023-05-04T10:04:59.999Z")
331
+ endOfUTC(new Date("2023-05-04T12:04:27.043+02:00"), 'second'); // new Date("2023-05-04T10:04:27.999Z")
332
+ ```
333
+
334
+ - **addUTC(val:Date, amount:integer, key:String)**
335
+ Take the incoming date and add a certain amount of the passed key. Possible key options(year,years,month,months,day,days,hour,hours,minute,minutes,second,seconds).
336
+
337
+ Note: Does not touch the date object passed
338
+ ```js
339
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 10, 'year'); // new Date("2032-10-05T11:12:11.000Z")
340
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -10, 'year'); // new Date("2012-10-05T11:12:11.000Z")
341
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 10, 'month'); // new Date("2023-08-05T11:12:11.000Z")
342
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -8970, 'month'); // new Date("1275-04-05T11:12:11.000Z")
343
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 200, 'day'); // new Date("2023-04-23T11:12:11.000Z")
344
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -400, 'day'); // new Date("2021-08-31T11:12:11.000Z")
345
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 2200, 'hour'); // new Date("2023-01-05T03:12:11.000Z")
346
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -10, 'hour'); // new Date("2022-10-05T01:12:11.000Z")
347
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 59, 'minute'); // new Date("2022-10-05T12:11:11.000Z")
348
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 336000, 'minute'); // new Date("2023-05-26T19:12:11.000Z")
349
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -34, 'minute'); // new Date("2022-10-05T10:38:11.000Z")
350
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -769, 'minute'); // new Date("2022-10-04T22:23:11.000Z")
351
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 59, 'second'); // new Date("2022-10-05T11:13:10.000Z")
352
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 2873 * 60, 'second'); // new Date("2022-10-07T11:05:11.000Z")
353
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), 336000 * 60, 'second'); // new Date("2023-05-26T19:12:11.000Z")
354
+ addUTC(new Date("2022-10-05T13:12:11+02:00"), -10, 'second'); // new Date("2022-10-05T11:12:01.000Z")
355
+ ```
356
+
290
357
  ### deep
291
358
  - **deepFreeze(val:Object)**
292
359
  Recursively freezes all properties of an object
@@ -16,7 +16,6 @@ function mapPrimitive(arr) {
16
16
  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
17
17
  if (!(0, _isNotEmpty2["default"])(arr)) return {};
18
18
  var OPTS = Object.assign({
19
- keytrim: !0,
20
19
  valtrim: !1,
21
20
  keyround: !1,
22
21
  valround: !1
@@ -34,11 +33,7 @@ function mapPrimitive(arr) {
34
33
  map[el] = OPTS.valround ? Math.round(el) : el;
35
34
  }
36
35
  } else if ((0, _isNotEmpty["default"])(el)) {
37
- if (OPTS.keytrim === !0) {
38
- map[el.trim()] = OPTS.valtrim ? el.trim() : el;
39
- } else {
40
- map[el] = OPTS.valtrim ? el.trim() : el;
41
- }
36
+ map[el.trim()] = OPTS.valtrim ? el.trim() : el;
42
37
  }
43
38
  }
44
39
  } catch (err) {
package/date/addUTC.js ADDED
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ exports["default"] = addUTC;
7
+ var _is = _interopRequireDefault(require("./is"));
8
+ var _isInteger = _interopRequireDefault(require("../number/isInteger"));
9
+ var _isNotEmpty = _interopRequireDefault(require("../string/isNotEmpty"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
+ function addUTC(val, amount, key) {
12
+ if (!(0, _is["default"])(val)) throw new Error('Date To UTC requires a date object');
13
+ if (!(0, _isInteger["default"])(amount)) throw new Error('Amount needs to be an integer');
14
+ if (!(0, _isNotEmpty["default"])(key)) throw new Error('Key needs to be a string with content');
15
+ var copy = new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), val.getUTCSeconds(), val.getUTCMilliseconds()));
16
+ switch (key) {
17
+ case 'years':
18
+ case 'year':
19
+ {
20
+ copy.setUTCFullYear(copy.getUTCFullYear() + amount);
21
+ return copy;
22
+ }
23
+ case 'months':
24
+ case 'month':
25
+ {
26
+ copy.setUTCMonth(copy.getUTCMonth() + amount);
27
+ return copy;
28
+ }
29
+ case 'days':
30
+ case 'day':
31
+ {
32
+ copy.setUTCDate(copy.getUTCDate() + amount);
33
+ return copy;
34
+ }
35
+ case 'hours':
36
+ case 'hour':
37
+ {
38
+ copy.setUTCHours(copy.getUTCHours() + amount);
39
+ return copy;
40
+ }
41
+ case 'minutes':
42
+ case 'minute':
43
+ {
44
+ copy.setUTCMinutes(copy.getUTCMinutes() + amount);
45
+ return copy;
46
+ }
47
+ case 'seconds':
48
+ case 'second':
49
+ {
50
+ copy.setUTCSeconds(copy.getUTCSeconds() + amount);
51
+ return copy;
52
+ }
53
+ default:
54
+ return copy;
55
+ }
56
+ }
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ exports["default"] = endOfUTC;
7
+ var _is = _interopRequireDefault(require("./is"));
8
+ var _isNotEmpty = _interopRequireDefault(require("../string/isNotEmpty"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
+ function endOfUTC(val, key) {
11
+ if (!(0, _is["default"])(val)) throw new Error('Date To UTC requires a date object');
12
+ if (!(0, _isNotEmpty["default"])(key)) throw new Error('Key needs to be a string with content');
13
+ switch (key) {
14
+ case 'year':
15
+ return new Date(Date.UTC(val.getUTCFullYear(), 11, 31, 23, 59, 59, 999));
16
+ case 'quarter':
17
+ {
18
+ var new_quarter = val.getUTCMonth() - val.getUTCMonth() % 3;
19
+ return new Date(Date.UTC(val.getUTCFullYear(), new_quarter >= 0 ? new_quarter + 3 : 3, 0, 23, 59, 59, 999));
20
+ }
21
+ case 'month':
22
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth() + 1, 0, 23, 59, 59, 999));
23
+ case 'week':
24
+ {
25
+ var date = new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 23, 59, 59, 999));
26
+ var day = date.getUTCDay();
27
+ if (day !== 0) date.setUTCDate(date.getUTCDate() + (7 - day));
28
+ return date;
29
+ }
30
+ case 'week_sun':
31
+ {
32
+ var _date = new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 23, 59, 59, 999));
33
+ var _day = _date.getUTCDay();
34
+ if (_day !== 6) _date.setUTCDate(_date.getUTCDate() + (6 - _day));
35
+ return _date;
36
+ }
37
+ case 'day':
38
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 23, 59, 59, 999));
39
+ case 'hour':
40
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), 59, 59, 999));
41
+ case 'minute':
42
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), 59, 999));
43
+ case 'second':
44
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), val.getUTCSeconds(), 999));
45
+ default:
46
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), val.getUTCSeconds(), val.getUTCMilliseconds()));
47
+ }
48
+ }
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ exports["default"] = startOfUTC;
7
+ var _is = _interopRequireDefault(require("./is"));
8
+ var _isNotEmpty = _interopRequireDefault(require("../string/isNotEmpty"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
+ function startOfUTC(val, key) {
11
+ if (!(0, _is["default"])(val)) throw new Error('Date To UTC requires a date object');
12
+ if (!(0, _isNotEmpty["default"])(key)) throw new Error('Key needs to be a string with content');
13
+ switch (key) {
14
+ case 'year':
15
+ return new Date(Date.UTC(val.getUTCFullYear(), 0, 1, 0, 0, 0, 0));
16
+ case 'quarter':
17
+ {
18
+ var new_quarter = val.getUTCMonth() - val.getUTCMonth() % 3;
19
+ return new Date(Date.UTC(val.getUTCFullYear(), new_quarter >= 0 ? new_quarter : 0, 1, 0, 0, 0, 0));
20
+ }
21
+ case 'month':
22
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), 1, 0, 0, 0, 0));
23
+ case 'week':
24
+ {
25
+ var date = new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 0, 0, 0, 0));
26
+ var subtract = date.getUTCDay() || 7;
27
+ if (subtract !== 1) date.setUTCDate(date.getUTCDate() - subtract + 1);
28
+ return date;
29
+ }
30
+ case 'week_sun':
31
+ {
32
+ var _date = new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 0, 0, 0, 0));
33
+ var _subtract = _date.getUTCDay();
34
+ if (_subtract !== 0) _date.setUTCDate(_date.getUTCDate() - _subtract);
35
+ return _date;
36
+ }
37
+ case 'day':
38
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), 0, 0, 0, 0));
39
+ case 'hour':
40
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), 0, 0, 0));
41
+ case 'minute':
42
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), 0, 0));
43
+ case 'second':
44
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), val.getUTCSeconds(), 0));
45
+ default:
46
+ return new Date(Date.UTC(val.getUTCFullYear(), val.getUTCMonth(), val.getUTCDate(), val.getUTCHours(), val.getUTCMinutes(), val.getUTCSeconds(), val.getUTCMilliseconds()));
47
+ }
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valkyriestudios/utils",
3
- "version": "6.3.0",
3
+ "version": "7.1.0",
4
4
  "description": "A collection of single-function utilities for common tasks",
5
5
  "main": "index.js",
6
6
  "author": {
@@ -20,7 +20,7 @@
20
20
  "test": "nyc --reporter=lcov --reporter=text-summary mocha --colors --require @babel/register ./test/**/*.test.js",
21
21
  "test_ci": "nyc --reporter=lcov mocha --colors --require @babel/register ./test/**/*.test.js",
22
22
  "lint": "./node_modules/.bin/eslint ./src",
23
- "build": "gulp && npm run lint",
23
+ "build": "npx babel src --out-dir ./ && npm run lint",
24
24
  "codecov": "codecov"
25
25
  },
26
26
  "repository": {
@@ -32,7 +32,8 @@
32
32
  },
33
33
  "homepage": "https://github.com/ValkyrieStudios/utils#readme",
34
34
  "devDependencies": {
35
- "@babel/core": "^7.21.5",
35
+ "@babel/cli": "^7.21.5",
36
+ "@babel/core": "^7.21.8",
36
37
  "@babel/preset-env": "^7.21.5",
37
38
  "@babel/register": "^7.21.0",
38
39
  "babel-plugin-check-es2015-constants": "^6.22.0",
@@ -43,9 +44,7 @@
43
44
  "chai": "^4.3.7",
44
45
  "chai-as-promised": "^7.1.1",
45
46
  "chai-spies": "^1.0.0",
46
- "eslint": "^8.39.0",
47
- "gulp": "^4.0.2",
48
- "gulp-babel": "^8.0.0",
47
+ "eslint": "^8.40.0",
49
48
  "mocha": "^10.2.0",
50
49
  "nyc": "^15.1.0"
51
50
  }