get-or-throw 1.3.0 → 1.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.
package/README.md CHANGED
@@ -1,7 +1,13 @@
1
1
  # get-or-throw
2
2
 
3
- A convenience function for adhering to Typescript's `noUncheckedIndexedAccess`
4
- setting.
3
+ A simple convenience function for safely accessing values in objects and arrays.
4
+ It gets a value from an object or array at a specified key or index, and throw
5
+ an error if the resulting value is `undefined` or `null`. Optionally, you can
6
+ set custom error message.
7
+
8
+ This was created to make it easy to adhere to Typescript's
9
+ [noUncheckedIndexedAccess](https://www.typescriptlang.org/tsconfig/#noUncheckedIndexedAccess)
10
+ setting, which is recommended for strict type checking.
5
11
 
6
12
  ## Features
7
13
 
@@ -10,6 +16,7 @@ setting.
10
16
  - Supports negative indexing for arrays.
11
17
  - Allows for custom error messages.
12
18
  - Zero dependencies.
19
+ - Provides `got` as alias for `getOrThrow`
13
20
 
14
21
  ## Installation
15
22
 
@@ -41,4 +48,18 @@ console.log(getOrThrow(obj, "d"));
41
48
  /** This will throw an error: "Failed to find d" */
42
49
  const key = "d";
43
50
  console.log(getOrThrow(obj, key, `Failed to find ${key}`));
51
+
52
+ /** This will throw an error: "Value at index 1 is undefined or null." */
53
+ const arr = [1, null, 3];
54
+ console.log(getOrThrow(arr, 1));
55
+
56
+ /** This will throw an error: "Value at index 1 is undefined or null." */
57
+ const arr = [1, undefined, 3];
58
+ console.log(getOrThrow(arr, 1));
59
+
60
+ /** This will throw an error: "Value at key 'b' is undefined or null." */
61
+ const obj = { a: 1, b: undefined, c: 3 };
62
+ console.log(getOrThrow(obj, "b"));
44
63
  ```
64
+
65
+ ## Alias
package/dist/index.cjs CHANGED
@@ -20,7 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
- getOrThrow: () => getOrThrow
23
+ getOrThrow: () => getOrThrow,
24
+ got: () => getOrThrow
24
25
  });
25
26
  module.exports = __toCommonJS(src_exports);
26
27
 
@@ -34,12 +35,16 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
34
35
  }
35
36
  if (index >= 0 && index < length) {
36
37
  const value = objOrArr[index];
37
- if (value === void 0) {
38
+ if (value !== void 0 && value !== null) {
39
+ return value;
40
+ } else if (value === void 0) {
38
41
  throw new Error(
39
42
  errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
40
43
  );
41
44
  } else {
42
- return value;
45
+ throw new Error(
46
+ errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
47
+ );
43
48
  }
44
49
  } else {
45
50
  throw new Error(
@@ -49,12 +54,16 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
49
54
  } else {
50
55
  if (keyOrIndex in objOrArr) {
51
56
  const value = objOrArr[keyOrIndex];
52
- if (value === void 0) {
57
+ if (value !== void 0 && value !== null) {
58
+ return value;
59
+ } else if (value === void 0) {
53
60
  throw new Error(
54
61
  errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
55
62
  );
56
63
  } else {
57
- return value;
64
+ throw new Error(
65
+ errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
66
+ );
58
67
  }
59
68
  } else {
60
69
  throw new Error(
@@ -65,5 +74,6 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
65
74
  }
66
75
  // Annotate the CommonJS export names for ESM import in node:
67
76
  0 && (module.exports = {
68
- getOrThrow
77
+ getOrThrow,
78
+ got
69
79
  });
package/dist/index.d.cts CHANGED
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * Get a value from an object or array, and throw an error if the key or index
3
- * does not exist or if the resulting value is undefined.
3
+ * does not exist or if the resulting value is undefined or null.
4
4
  *
5
5
  * @param objOrArr The object or array to get the value from.
6
6
  * @param keyOrIndex The key or index to get the value from.
7
7
  * @param errorMessage Optional error message to include in the error thrown.
8
- * @returns The value at the given key or index.
8
+ * @returns The value at the given key or index, guaranteed to be non-null and
9
+ * non-undefined.
9
10
  * @throws An error if the key or index does not exist, or if the resulting
10
- * value is undefined.
11
+ * value is undefined or null.
11
12
  */
12
- declare function getOrThrow<T extends object, K extends keyof T>(obj: T, key: K, errorMessage?: string): T[K];
13
- declare function getOrThrow<T>(arr: T[], index: number, errorMessage?: string): T;
13
+ declare function getOrThrow<T extends object, K extends keyof T>(objOrArr: T, keyOrIndex: K, errorMessage?: string): NonNullable<T[K]>;
14
+ declare function getOrThrow<T>(objOrArr: T[], keyOrIndex: number, errorMessage?: string): NonNullable<T>;
14
15
 
15
- export { getOrThrow };
16
+ export { getOrThrow, getOrThrow as got };
package/dist/index.d.ts CHANGED
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * Get a value from an object or array, and throw an error if the key or index
3
- * does not exist or if the resulting value is undefined.
3
+ * does not exist or if the resulting value is undefined or null.
4
4
  *
5
5
  * @param objOrArr The object or array to get the value from.
6
6
  * @param keyOrIndex The key or index to get the value from.
7
7
  * @param errorMessage Optional error message to include in the error thrown.
8
- * @returns The value at the given key or index.
8
+ * @returns The value at the given key or index, guaranteed to be non-null and
9
+ * non-undefined.
9
10
  * @throws An error if the key or index does not exist, or if the resulting
10
- * value is undefined.
11
+ * value is undefined or null.
11
12
  */
12
- declare function getOrThrow<T extends object, K extends keyof T>(obj: T, key: K, errorMessage?: string): T[K];
13
- declare function getOrThrow<T>(arr: T[], index: number, errorMessage?: string): T;
13
+ declare function getOrThrow<T extends object, K extends keyof T>(objOrArr: T, keyOrIndex: K, errorMessage?: string): NonNullable<T[K]>;
14
+ declare function getOrThrow<T>(objOrArr: T[], keyOrIndex: number, errorMessage?: string): NonNullable<T>;
14
15
 
15
- export { getOrThrow };
16
+ export { getOrThrow, getOrThrow as got };
package/dist/index.js CHANGED
@@ -8,12 +8,16 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
8
8
  }
9
9
  if (index >= 0 && index < length) {
10
10
  const value = objOrArr[index];
11
- if (value === void 0) {
11
+ if (value !== void 0 && value !== null) {
12
+ return value;
13
+ } else if (value === void 0) {
12
14
  throw new Error(
13
15
  errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
14
16
  );
15
17
  } else {
16
- return value;
18
+ throw new Error(
19
+ errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
20
+ );
17
21
  }
18
22
  } else {
19
23
  throw new Error(
@@ -23,12 +27,16 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
23
27
  } else {
24
28
  if (keyOrIndex in objOrArr) {
25
29
  const value = objOrArr[keyOrIndex];
26
- if (value === void 0) {
30
+ if (value !== void 0 && value !== null) {
31
+ return value;
32
+ } else if (value === void 0) {
27
33
  throw new Error(
28
34
  errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
29
35
  );
30
36
  } else {
31
- return value;
37
+ throw new Error(
38
+ errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
39
+ );
32
40
  }
33
41
  } else {
34
42
  throw new Error(
@@ -38,5 +46,6 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
38
46
  }
39
47
  }
40
48
  export {
41
- getOrThrow
49
+ getOrThrow,
50
+ getOrThrow as got
42
51
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "get-or-throw",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "A convenience function for adhering to Typescript's noUncheckedIndexedAccess rule",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -1,34 +1,35 @@
1
1
  /**
2
2
  * Get a value from an object or array, and throw an error if the key or index
3
- * does not exist or if the resulting value is undefined.
3
+ * does not exist or if the resulting value is undefined or null.
4
4
  *
5
5
  * @param objOrArr The object or array to get the value from.
6
6
  * @param keyOrIndex The key or index to get the value from.
7
7
  * @param errorMessage Optional error message to include in the error thrown.
8
- * @returns The value at the given key or index.
8
+ * @returns The value at the given key or index, guaranteed to be non-null and
9
+ * non-undefined.
9
10
  * @throws An error if the key or index does not exist, or if the resulting
10
- * value is undefined.
11
+ * value is undefined or null.
11
12
  */
12
13
  export function getOrThrow<T extends object, K extends keyof T>(
13
- obj: T,
14
- key: K,
14
+ objOrArr: T,
15
+ keyOrIndex: K,
15
16
  errorMessage?: string
16
- ): T[K];
17
+ ): NonNullable<T[K]>;
17
18
  export function getOrThrow<T>(
18
- arr: T[],
19
- index: number,
19
+ objOrArr: T[],
20
+ keyOrIndex: number,
20
21
  errorMessage?: string
21
- ): T;
22
+ ): NonNullable<T>;
22
23
  export function getOrThrow<T extends object, K extends keyof T>(
23
24
  objOrArr: T | T[],
24
25
  keyOrIndex: K | number,
25
26
  errorMessage?: string
26
- ): T[K] | T {
27
+ ): NonNullable<T[K]> | NonNullable<T> {
27
28
  if (Array.isArray(objOrArr)) {
28
29
  const length = objOrArr.length;
29
30
  let index = keyOrIndex as number;
30
31
 
31
- // Handle negative indexing
32
+ /** Allow for negative indexing. */
32
33
  if (index < 0) {
33
34
  index = length + index;
34
35
  }
@@ -36,12 +37,16 @@ export function getOrThrow<T extends object, K extends keyof T>(
36
37
  if (index >= 0 && index < length) {
37
38
  const value = objOrArr[index];
38
39
 
39
- if (value === undefined) {
40
+ if (value !== undefined && value !== null) {
41
+ return value as NonNullable<T>;
42
+ } else if (value === undefined) {
40
43
  throw new Error(
41
44
  errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
42
45
  );
43
46
  } else {
44
- return value;
47
+ throw new Error(
48
+ errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
49
+ );
45
50
  }
46
51
  } else {
47
52
  throw new Error(
@@ -52,12 +57,16 @@ export function getOrThrow<T extends object, K extends keyof T>(
52
57
  if (keyOrIndex in objOrArr) {
53
58
  const value = objOrArr[keyOrIndex as K];
54
59
 
55
- if (value === undefined) {
60
+ if (value !== undefined && value !== null) {
61
+ return value as NonNullable<T[K]>;
62
+ } else if (value === undefined) {
56
63
  throw new Error(
57
64
  errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
58
65
  );
59
66
  } else {
60
- return value;
67
+ throw new Error(
68
+ errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
69
+ );
61
70
  }
62
71
  } else {
63
72
  throw new Error(
@@ -67,3 +76,6 @@ export function getOrThrow<T extends object, K extends keyof T>(
67
76
  }
68
77
  }
69
78
  }
79
+
80
+ /** Export the same function under the alias 'got' */
81
+ export { getOrThrow as got };