@bodil/monkey-business 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -21,44 +21,86 @@ Map.prototype.getOrSet = function getOrSet(key, defaultValue) {
21
21
  return newValue;
22
22
  };
23
23
  // Array
24
- Array.prototype.remove = function remove(value) {
25
- return this.removeIndex(this.indexOf(value));
26
- };
27
- Array.prototype.removeFn = function remove(predicate) {
28
- return this.removeIndex(this.findIndex(predicate));
29
- };
30
- Array.prototype.removeIndex = function remove(index) {
31
- if (!Number.isInteger(index)) {
32
- throw new TypeError(`Array.removeIndex(): index ${index} is not an integer`);
33
- }
34
- if (index < 0 || index >= this.length) {
35
- return None;
36
- }
37
- const removed = this.splice(index, 1).pop();
38
- return Option.from(removed);
39
- };
40
- Array.prototype.insert = function insert(value, index) {
41
- if (!Number.isInteger(index)) {
42
- throw new TypeError(`Array.insert(): index ${index} is not an integer`);
43
- }
44
- if (index > this.length || index < 0) {
45
- throw new RangeError(`Array.insert: index ${index} out of bounds`);
46
- }
47
- this.splice(index, 0, value);
48
- return this;
49
- };
50
- Array.prototype.insertOrdered = function insertOrdered(value, cmp, duplicates = "high") {
51
- return this.insert(value, (duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value));
52
- };
53
- Array.prototype.present = function present() {
54
- return this.filter((value) => value !== undefined);
55
- };
56
- Array.prototype.nonNullable = function nonNullable() {
57
- return this.filter((value) => value !== undefined);
58
- };
59
- Array.prototype.get = function get(index) {
60
- return Object.get(this, index);
61
- };
24
+ Object.defineProperties(Array.prototype, {
25
+ remove: {
26
+ enumerable: false,
27
+ get() {
28
+ return function remove(value) {
29
+ return this.removeIndex(this.indexOf(value));
30
+ };
31
+ },
32
+ },
33
+ removeFn: {
34
+ enumerable: false,
35
+ get() {
36
+ return function removeFn(predicate) {
37
+ return this.removeIndex(this.findIndex(predicate));
38
+ };
39
+ },
40
+ },
41
+ removeIndex: {
42
+ enumerable: false,
43
+ get() {
44
+ return function removeIndex(index) {
45
+ if (!Number.isInteger(index)) {
46
+ throw new TypeError(`Array.removeIndex(): index ${index} is not an integer`);
47
+ }
48
+ if (index < 0 || index >= this.length) {
49
+ return None;
50
+ }
51
+ const removed = this.splice(index, 1).pop();
52
+ return Option.from(removed);
53
+ };
54
+ },
55
+ },
56
+ insert: {
57
+ enumerable: false,
58
+ get() {
59
+ return function insert(value, index) {
60
+ if (!Number.isInteger(index)) {
61
+ throw new TypeError(`Array.insert(): index ${index} is not an integer`);
62
+ }
63
+ if (index > this.length || index < 0) {
64
+ throw new RangeError(`Array.insert: index ${index} out of bounds`);
65
+ }
66
+ this.splice(index, 0, value);
67
+ return this;
68
+ };
69
+ },
70
+ },
71
+ insertOrdered: {
72
+ enumerable: false,
73
+ get() {
74
+ return function insertOrdered(value, cmp, duplicates = "high") {
75
+ return this.insert(value, (duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value));
76
+ };
77
+ },
78
+ },
79
+ present: {
80
+ enumerable: false,
81
+ get() {
82
+ return function present() {
83
+ return this.filter((value) => value !== undefined);
84
+ };
85
+ },
86
+ },
87
+ nonNullable: {
88
+ enumerable: false,
89
+ get() {
90
+ return function nonNullable() {
91
+ return this.filter((value) => value !== undefined);
92
+ };
93
+ },
94
+ },
95
+ get: {
96
+ enumerable: false,
97
+ get() {
98
+ return function get(index) {
99
+ return Object.get(this, index);
100
+ };
101
+ },
102
+ },
103
+ });
62
104
  // Iterator
63
105
  Iterator.empty = function empty() {
64
106
  return Iterator.from([]);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sCAAsC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAgB,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAqJ5C,SAAS;AAET,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,CAAsC,GAAM,EAAE,GAAM;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CACnC,GAAsB,EACtB,EAAmD;IAEnD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM;AAEN,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAEtC,GAAM,EACN,YAAkC;IAElC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACxB,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,QAAQ;AAER,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAoB,KAAQ;IAChE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,MAAM,CAEtC,SAA8D;IAE9D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,SAA0B,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,MAAM,CAAoB,KAAa;IAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,8BAA8B,KAAK,oBAAoB,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAoB,KAAQ,EAAE,KAAa;IAC/E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,yBAAyB,KAAK,oBAAoB,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAAC,uBAAuB,KAAK,gBAAgB,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAElD,KAAQ,EACR,GAAe,EACf,aAA6B,MAAM;IAEnC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO;IACtC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAQ,EAAuB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW;IAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAQ,EAA2B,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AACnF,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAoB,KAAa;IAC/D,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,WAAW;AAEX,QAAQ,CAAC,KAAK,GAAG,SAAS,KAAK;IAC3B,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAE7C,SAA+C;IAE/C,MAAM,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,QAAQ,CAAC,IAAI,CAAI;QACpB,IAAI;YACA,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,MAAM,CAAC;gBAClB,CAAC;gBACD,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBACnC,OAAO,MAAM,CAAC;gBAClB,CAAC;YACL,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC5C,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAE7C,SAA+C;IAE/C,MAAM,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,QAAQ,CAAC,IAAI,CAAI;QACpB,IAAI;YACA,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,MAAM,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBACpC,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,MAAM,CAAC;gBAClB,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAEzC,KAA8D;IAE9D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAE7C,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,QAAQ,CAAC,IAAI,CAAW;QAC3B,IAAI;YACA,IAAI,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAC5C,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,GAAG,IAAI,CAAC;oBACZ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;wBAClB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;wBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC3C,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACxC,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,oBAAoB,GAAG,SAAS,oBAAoB,CAEnE,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACxC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACzC,QAAQ,GAAG,WAAW,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QACpD,QAAQ,IAAI,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO;IAGzC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW;IAGjD,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CACrF,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -95,4 +95,13 @@ test("Iterator.takeOne", () => {
95
95
  expect(iter.takeOne()).isSome(3);
96
96
  expect(iter.takeOne()).isNone();
97
97
  });
98
+ test("Array methods are non-enumerable", () => {
99
+ const array = [1, 2, 3, 4, 5];
100
+ const keys = [];
101
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array, guard-for-in
102
+ for (const key in array) {
103
+ keys.push(key);
104
+ }
105
+ expect(keys).deep.equal(["0", "1", "2", "3", "4"]);
106
+ });
98
107
  //# sourceMappingURL=index.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bodil/monkey-business",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Let's give JS core types a polish",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,7 +10,8 @@
10
10
  "module": "dist/index.js",
11
11
  "types": "dist/index.d.ts",
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "src"
14
15
  ],
15
16
  "exports": {
16
17
  ".": {
@@ -0,0 +1,126 @@
1
+ import { test, expect, expectTypeOf } from "vitest";
2
+ import type { Option } from "@bodil/opt";
3
+ import { Order } from "@bodil/core";
4
+
5
+ import ".";
6
+
7
+ import "@bodil/opt-vitest";
8
+
9
+ const Iterator = globalThis.Iterator;
10
+
11
+ test("Object.get", () => {
12
+ const obj = { foo: "foo", bar: 31337 };
13
+ expect(Object.get(obj, "foo")).isSome("foo");
14
+ expectTypeOf(Object.get(obj, "foo")).toEqualTypeOf<Option<string>>();
15
+ expect(Object.get(obj, "bar")).isSome(31337);
16
+ expectTypeOf(Object.get(obj, "bar")).toEqualTypeOf<Option<number>>();
17
+ // @ts-expect-error
18
+ expect(Object.get(obj, "baz")).isNone();
19
+ });
20
+
21
+ test("Array.get", () => {
22
+ const array = [4, 5, 6];
23
+ expect(array.get(-1)).isNone();
24
+ expect(array.get(0)).isSome(4);
25
+ expect(array.get(1)).isSome(5);
26
+ expect(array.get(2)).isSome(6);
27
+ expect(array.get(3)).isNone();
28
+
29
+ const sparseArray: Array<number> = [];
30
+ sparseArray[1] = 31337;
31
+ expect(sparseArray.get(0)).isNone();
32
+ expect(sparseArray.get(1)).isSome(31337);
33
+ expect(sparseArray.get(2)).isNone();
34
+ expectTypeOf(sparseArray.get(0)).toEqualTypeOf<Option<number>>();
35
+ });
36
+
37
+ test("Object.mapEntries", () => {
38
+ const obj1 = { foo: 1, bar: 2, baz: 3 };
39
+ expect(Object.mapEntries(obj1, ([key, value]) => [key.toUpperCase(), `${value + 1}`])).toEqual({
40
+ FOO: "2",
41
+ BAR: "3",
42
+ BAZ: "4",
43
+ });
44
+ });
45
+
46
+ test("Map.getOrSet", () => {
47
+ const defaultValue = () => "Robert";
48
+ const map = new Map();
49
+ map.set("foo", "Joe");
50
+ expect(map.getOrSet("foo", defaultValue)).toEqual("Joe");
51
+ expect(map.getOrSet("bar", defaultValue)).toEqual("Robert");
52
+ expect(map.get("bar")).toEqual("Robert");
53
+ });
54
+
55
+ test("Array.insert", () => {
56
+ const array = [1, 2, 3, 4, 5];
57
+ const result = array.insert(1337, 3);
58
+ expect(result).toEqual([1, 2, 3, 1337, 4, 5]);
59
+ expect(array).toEqual([1, 2, 3, 1337, 4, 5]);
60
+ expect(result).toBe(array);
61
+
62
+ expect(() => array.insert(1337, 10)).toThrow(RangeError);
63
+ });
64
+
65
+ test("Array.insertOrdered", () => {
66
+ const array = [1, 3, 5, 7, 9];
67
+ const result = array.insertOrdered(6, Order.ascending);
68
+ expect(result).toEqual([1, 3, 5, 6, 7, 9]);
69
+ expect(array).toEqual([1, 3, 5, 6, 7, 9]);
70
+ const result2 = array.insertOrdered(1337, Order.ascending);
71
+ expect(result2).toEqual([1, 3, 5, 6, 7, 9, 1337]);
72
+ expect(array).toEqual([1, 3, 5, 6, 7, 9, 1337]);
73
+ });
74
+
75
+ test("Array.remove", () => {
76
+ const array = [1, 2, 3, 4, 5];
77
+ expect(array.remove(3)).isSome(3);
78
+ expect(array).toEqual([1, 2, 4, 5]);
79
+ expect(array.remove(6)).isNone();
80
+ expect(array).toEqual([1, 2, 4, 5]);
81
+ });
82
+
83
+ test("Array.filterPresent", () => {
84
+ const array: Array<number | undefined> = [1, 2, undefined, 3, undefined, 4];
85
+ const cleanArray = array.present();
86
+ expect(array.some((v) => v === undefined)).toBeTruthy();
87
+ expect(cleanArray.some((v) => v === undefined)).toBeFalsy();
88
+ expect(cleanArray).toEqual([1, 2, 3, 4]);
89
+ expectTypeOf(cleanArray).toMatchTypeOf<Array<number>>();
90
+ });
91
+
92
+ test("Iterator.partition", () => {
93
+ expect(Array.from(Iterator.from([1, 2, 3, 4]).partition(2))).toEqual([
94
+ [1, 2],
95
+ [3, 4],
96
+ ]);
97
+
98
+ expect(Array.from(Iterator.from([1, 2, 3]).partition(2))).toEqual([[1, 2], [3]]);
99
+ });
100
+
101
+ test("Iterator.frontBiasedPartition", () => {
102
+ expect(Array.from(Iterator.from([1, 2, 3, 4]).frontBiasedPartition(2))).toEqual([
103
+ [1, 2],
104
+ [3, 4],
105
+ ]);
106
+
107
+ expect(Array.from(Iterator.from([1, 2, 3]).frontBiasedPartition(2))).toEqual([[1], [2, 3]]);
108
+ });
109
+
110
+ test("Iterator.takeOne", () => {
111
+ const iter = [1, 2, 3][Symbol.iterator]();
112
+ expect(iter.takeOne()).isSome(1);
113
+ expect(iter.takeOne()).isSome(2);
114
+ expect(iter.takeOne()).isSome(3);
115
+ expect(iter.takeOne()).isNone();
116
+ });
117
+
118
+ test("Array methods are non-enumerable", () => {
119
+ const array = [1, 2, 3, 4, 5];
120
+ const keys: Array<any> = [];
121
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array, guard-for-in
122
+ for (const key in array) {
123
+ keys.push(key);
124
+ }
125
+ expect(keys).deep.equal(["0", "1", "2", "3", "4"]);
126
+ });
package/src/index.ts ADDED
@@ -0,0 +1,418 @@
1
+ /* eslint-disable @typescript-eslint/no-this-alias */
2
+ // deno-lint-ignore-file no-this-alias
3
+
4
+ import { None, Option, Some } from "@bodil/opt";
5
+ import { type OrderFn, bisectHigh, bisectLow } from "@bodil/core/order";
6
+ import type { Present } from "@bodil/core/types";
7
+ import { assert } from "@bodil/core/assert";
8
+
9
+ declare global {
10
+ interface ObjectConstructor {
11
+ /**
12
+ * Checked key lookup. Returns {@link None} if a key isn't present.
13
+ * Returns a {@link Some} if the key is present, even if the value is
14
+ * `undefined`.
15
+ */
16
+ get<O extends object, K extends keyof O>(obj: O, key: K): Option<O[K]>;
17
+
18
+ /**
19
+ * Create a new object by mapping an existing object's `Object.entries`
20
+ * through a function.
21
+ */
22
+ mapEntries<A, B>(
23
+ obj: Record<string, A>,
24
+ fn: (entry: [key: string, value: A]) => [string, B]
25
+ ): Record<string, B>;
26
+ }
27
+
28
+ interface Map<K, V> {
29
+ /**
30
+ * If `key` exists in the map, return the value associated with it.
31
+ * Otherwise, call `value()` to create a new value, insert that into the
32
+ * map under `key`, and return it.
33
+ */
34
+ getOrSet(key: K, defaultValue: () => V): V;
35
+ }
36
+
37
+ interface Array<T> {
38
+ /**
39
+ * Insert `value` at `index` in the array.
40
+ */
41
+ insert(value: T, index: number): Array<T>;
42
+
43
+ /**
44
+ * Insert `value` into the array at the correct position according to
45
+ * the ordering function `cmp`. The array must already be ordered
46
+ * accordingly.
47
+ *
48
+ * If `duplicates` is `"low"`, the correct position in case of
49
+ * duplicates is considered to be the index of the first occurrence of a
50
+ * duplicate. If it is `"high"`, which is the default, the correct
51
+ * position is considered to be the index after the last occurrence of a
52
+ * duplicate.
53
+ */
54
+ insertOrdered(value: T, cmp: OrderFn<T>, duplicates?: "low" | "high"): Array<T>;
55
+
56
+ /**
57
+ * Remove the first occurrence of a given value from an array.
58
+ *
59
+ * Returns an {@link Option} containing the removed value, or {@link None} if
60
+ * no matches were found.
61
+ */
62
+ remove(value: T): Option<T>;
63
+
64
+ /**
65
+ * Remove the first value for which the provided predicate function
66
+ * returns `true` from the array.
67
+ *
68
+ * Returns an {@link Option} containing the removed value, or {@link None} if
69
+ * no matches were found.
70
+ */
71
+ removeFn(predicate: (value: T, index: number, obj: Array<T>) => boolean): Option<T>;
72
+
73
+ /**
74
+ * Remove the value at the given index from the array.
75
+ *
76
+ * Returns an {@link Option} containing the removed value, or {@link None} if
77
+ * the index was out of bounds.
78
+ */
79
+ removeIndex(index: number): Option<T>;
80
+
81
+ /**
82
+ * Return a copy of the array with any `undefined` values removed.
83
+ */
84
+ present(): Array<Present<T>>;
85
+
86
+ /**
87
+ * Return a copy of the array with any `null` or `undefined` values removed.
88
+ */
89
+ nonNullable(): Array<NonNullable<T>>;
90
+
91
+ /**
92
+ * Checked index operator. Returns {@link None} if an index isn't
93
+ * present, even for sparse arrays. Returns a {@link Some} if the index
94
+ * is present, even if the value is `undefined`.
95
+ */
96
+ get(index: number): Option<T>;
97
+ }
98
+
99
+ interface IteratorConstructor {
100
+ /**
101
+ * Construct an empty iterator.
102
+ */
103
+ empty<T>(): IteratorObject<T>;
104
+ }
105
+
106
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
107
+ interface IteratorObject<T, TReturn, TNext> {
108
+ /**
109
+ * Get the next value from the iterator, wrapped in an {@link Option}
110
+ * type. If the iterator has no more values, return {@link None}.
111
+ *
112
+ * This is the nicely utility typed version of {@link Iterator#next}.
113
+ */
114
+ takeOne(): Option<T>;
115
+ /**
116
+ * Take items from the iterator only until the first time `predicate` returns false.
117
+ */
118
+ takeWhile<S extends T>(
119
+ predicate: (value: T, index: number) => value is S
120
+ ): IteratorObject<S, undefined>;
121
+ takeWhile(predicate: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
122
+ /**
123
+ * Ignore all items matching `predicate` until the first item that
124
+ * doesn't match.
125
+ */
126
+ skipWhile(predicate: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
127
+ /**
128
+ * Iterate until calling `mapFn` on an item returns a value, then return
129
+ * that value. Return `undefined` if `mapFn` never returns a value.
130
+ */
131
+ findMap<U>(mapFn: (value: T) => NonNullable<U> | undefined): NonNullable<U> | undefined;
132
+ /**
133
+ * Split the input up into arrays of at most `size` items.
134
+ */
135
+ partition(size: number): IteratorObject<Array<T>, undefined>;
136
+ /**
137
+ * As {@link IteratorObject#partition}, but if the input length isn't
138
+ * divisible by `size`, ensure the *first* array is the shortest one
139
+ * rather than the last.
140
+ *
141
+ * Be warned that this requires the entire input iterable to be read up
142
+ * front to decide its length, so this function is not lazy.
143
+ */
144
+ frontBiasedPartition(size: number): Array<Array<T>>;
145
+ /**
146
+ * Filter out any items which are `undefined`.
147
+ */
148
+ present(): IteratorObject<Present<T>, undefined>;
149
+ /**
150
+ * Filter out any items which are `null` or `undefined`.
151
+ */
152
+ nonNullable(): IteratorObject<NonNullable<T>, undefined>;
153
+ }
154
+ }
155
+
156
+ // Object
157
+
158
+ Object.get = function get<O extends object, K extends keyof O>(obj: O, key: K): Option<O[K]> {
159
+ return Object.hasOwn(obj, key) ? Some(obj[key]) : None;
160
+ };
161
+
162
+ Object.mapEntries = function mapEntries<A, B>(
163
+ obj: Record<string, A>,
164
+ fn: (entry: [key: string, value: A]) => [string, B]
165
+ ): Record<string, B> {
166
+ return Object.fromEntries(Object.entries(obj).map(fn));
167
+ };
168
+
169
+ // Map
170
+
171
+ Map.prototype.getOrSet = function getOrSet<K, V>(
172
+ this: Map<K, NonNullable<V>>,
173
+ key: K,
174
+ defaultValue: () => NonNullable<V>
175
+ ): V {
176
+ const result = this.get(key);
177
+ if (result !== undefined) {
178
+ return result;
179
+ }
180
+ const newValue = defaultValue();
181
+ this.set(key, newValue);
182
+ return newValue;
183
+ };
184
+
185
+ // Array
186
+
187
+ Object.defineProperties(Array.prototype, {
188
+ remove: {
189
+ enumerable: false,
190
+ get() {
191
+ return function remove<T>(this: Array<T>, value: T): Option<T> {
192
+ return this.removeIndex(this.indexOf(value));
193
+ };
194
+ },
195
+ },
196
+ removeFn: {
197
+ enumerable: false,
198
+ get() {
199
+ return function removeFn<T>(
200
+ this: Array<T>,
201
+ predicate: (value: T, index: number, obj: Array<T>) => boolean
202
+ ): Option<T> {
203
+ return this.removeIndex(this.findIndex(predicate as () => boolean));
204
+ };
205
+ },
206
+ },
207
+ removeIndex: {
208
+ enumerable: false,
209
+ get() {
210
+ return function removeIndex<T>(this: Array<T>, index: number): Option<T> {
211
+ if (!Number.isInteger(index)) {
212
+ throw new TypeError(`Array.removeIndex(): index ${index} is not an integer`);
213
+ }
214
+ if (index < 0 || index >= this.length) {
215
+ return None;
216
+ }
217
+ const removed = this.splice(index, 1).pop();
218
+ return Option.from(removed);
219
+ };
220
+ },
221
+ },
222
+ insert: {
223
+ enumerable: false,
224
+ get() {
225
+ return function insert<T>(this: Array<T>, value: T, index: number): Array<T> {
226
+ if (!Number.isInteger(index)) {
227
+ throw new TypeError(`Array.insert(): index ${index} is not an integer`);
228
+ }
229
+ if (index > this.length || index < 0) {
230
+ throw new RangeError(`Array.insert: index ${index} out of bounds`);
231
+ }
232
+ this.splice(index, 0, value);
233
+ return this;
234
+ };
235
+ },
236
+ },
237
+ insertOrdered: {
238
+ enumerable: false,
239
+ get() {
240
+ return function insertOrdered<T>(
241
+ this: Array<T>,
242
+ value: T,
243
+ cmp: OrderFn<T>,
244
+ duplicates: "low" | "high" = "high"
245
+ ): Array<T> {
246
+ return this.insert(
247
+ value,
248
+ (duplicates === "low" ? bisectLow : bisectHigh)(cmp, this, value)
249
+ );
250
+ };
251
+ },
252
+ },
253
+ present: {
254
+ enumerable: false,
255
+ get() {
256
+ return function present<T>(this: Array<T>): Array<Present<T>> {
257
+ return this.filter((value: T): value is Present<T> => value !== undefined);
258
+ };
259
+ },
260
+ },
261
+ nonNullable: {
262
+ enumerable: false,
263
+ get() {
264
+ return function nonNullable<T>(this: Array<T>): Array<NonNullable<T>> {
265
+ return this.filter((value: T): value is NonNullable<T> => value !== undefined);
266
+ };
267
+ },
268
+ },
269
+ get: {
270
+ enumerable: false,
271
+ get() {
272
+ return function get<T>(this: Array<T>, index: number): Option<T> {
273
+ return Object.get(this, index);
274
+ };
275
+ },
276
+ },
277
+ });
278
+
279
+ // Iterator
280
+
281
+ Iterator.empty = function empty<T>(): IteratorObject<T> {
282
+ return Iterator.from([]);
283
+ };
284
+
285
+ Iterator.prototype.takeOne = function takeOne<T>(this: Iterator<T>): Option<T> {
286
+ const result = this.next();
287
+ return result.done === true ? None : Some(result.value);
288
+ };
289
+
290
+ Iterator.prototype.takeWhile = function takeWhile<T>(
291
+ this: IteratorObject<T, undefined>,
292
+ predicate: (value: T, index: number) => boolean
293
+ ): IteratorObject<T, undefined> {
294
+ const iter = this;
295
+ let index = 0;
296
+ let done = false;
297
+ return Iterator.from<T>({
298
+ next(): IteratorResult<T, undefined> {
299
+ if (!done) {
300
+ const result = iter.next();
301
+ if (result.done === true) {
302
+ return result;
303
+ }
304
+ if (predicate(result.value, index++)) {
305
+ return result;
306
+ }
307
+ }
308
+ done = true;
309
+ return { done: true, value: undefined };
310
+ },
311
+ });
312
+ };
313
+
314
+ Iterator.prototype.skipWhile = function skipWhile<T>(
315
+ this: IteratorObject<T, undefined>,
316
+ predicate: (value: T, index: number) => boolean
317
+ ): IteratorObject<T, undefined> {
318
+ const iter = this;
319
+ let index = 0;
320
+ let skipped = false;
321
+ return Iterator.from<T>({
322
+ next(): IteratorResult<T, undefined> {
323
+ if (skipped) {
324
+ return iter.next();
325
+ }
326
+ while (true) {
327
+ const result = iter.next();
328
+ if (result.done === true) {
329
+ return result;
330
+ }
331
+ if (!predicate(result.value, index++)) {
332
+ skipped = true;
333
+ return result;
334
+ }
335
+ }
336
+ },
337
+ });
338
+ };
339
+
340
+ Iterator.prototype.findMap = function findMap<T, U>(
341
+ this: IteratorObject<T, undefined>,
342
+ mapFn: (value: T, index: number) => NonNullable<U> | undefined
343
+ ): NonNullable<U> | undefined {
344
+ let index = 0;
345
+ while (true) {
346
+ const result = this.next();
347
+ if (result.done === true) {
348
+ return undefined;
349
+ }
350
+ const mapped = mapFn(result.value, index++);
351
+ if (mapped !== undefined) {
352
+ return mapped;
353
+ }
354
+ }
355
+ };
356
+
357
+ Iterator.prototype.partition = function partition<T>(
358
+ this: IteratorObject<T, undefined>,
359
+ size: number
360
+ ): IteratorObject<Array<T>, undefined> {
361
+ const iter = this;
362
+ let done = false;
363
+ return Iterator.from<Array<T>>({
364
+ next(): IteratorResult<Array<T>, undefined> {
365
+ if (done) {
366
+ return { done: true, value: undefined };
367
+ }
368
+ const part = [];
369
+ while (true) {
370
+ const result = iter.next();
371
+ if (result.done === true) {
372
+ done = true;
373
+ return part.length > 0
374
+ ? { done: false, value: part }
375
+ : { done: true, value: undefined };
376
+ }
377
+ part.push(result.value);
378
+ if (part.length === size) {
379
+ return { done: false, value: part };
380
+ }
381
+ }
382
+ },
383
+ });
384
+ };
385
+
386
+ Iterator.prototype.frontBiasedPartition = function frontBiasedPartition<T>(
387
+ this: IteratorObject<T, undefined>,
388
+ size: number
389
+ ): Array<Array<T>> {
390
+ const input = this.toArray();
391
+ let inputPos = 0;
392
+ const firstLength = input.length % size;
393
+ const output: Array<Array<T>> = [];
394
+ if (firstLength > 0) {
395
+ output.push(input.slice(0, firstLength));
396
+ inputPos = firstLength;
397
+ }
398
+ while (inputPos < input.length) {
399
+ output.push(input.slice(inputPos, inputPos + size));
400
+ inputPos += size;
401
+ }
402
+ assert(inputPos === input.length);
403
+ return output;
404
+ };
405
+
406
+ Iterator.prototype.present = function present<T>(
407
+ this: IteratorObject<T, undefined>
408
+ ): IteratorObject<Present<T>, undefined> {
409
+ return Iterator.from(this.filter((item): item is Present<T> => item !== undefined));
410
+ };
411
+
412
+ Iterator.prototype.nonNullable = function nonNullable<T>(
413
+ this: IteratorObject<T, undefined>
414
+ ): IteratorObject<NonNullable<T>, undefined> {
415
+ return Iterator.from(
416
+ this.filter((item): item is NonNullable<T> => item !== undefined && item !== null)
417
+ );
418
+ };