get-or-throw 1.2.1 → 1.4.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 +16 -0
- package/dist/index.cjs +24 -2
- package/dist/index.d.cts +8 -6
- package/dist/index.d.ts +8 -6
- package/dist/index.js +24 -2
- package/package.json +4 -2
- package/src/get-or-throw.ts +40 -14
- package/tsconfig.json +1 -5
package/README.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
A convenience function for adhering to Typescript's `noUncheckedIndexedAccess`
|
|
4
4
|
setting.
|
|
5
5
|
|
|
6
|
+
Get a value from an object or array at the specified key or index. Throw an
|
|
7
|
+
error if the key or index does not exist, or if the resulting value is undefined
|
|
8
|
+
or null.
|
|
9
|
+
|
|
6
10
|
## Features
|
|
7
11
|
|
|
8
12
|
- Uses Typescript assertions for type narrowing.
|
|
@@ -41,4 +45,16 @@ console.log(getOrThrow(obj, "d"));
|
|
|
41
45
|
/** This will throw an error: "Failed to find d" */
|
|
42
46
|
const key = "d";
|
|
43
47
|
console.log(getOrThrow(obj, key, `Failed to find ${key}`));
|
|
48
|
+
|
|
49
|
+
/** This will throw an error: "Value at index 1 is undefined or null." */
|
|
50
|
+
const arr = [1, null, 3];
|
|
51
|
+
console.log(getOrThrow(arr, 1));
|
|
52
|
+
|
|
53
|
+
/** This will throw an error: "Value at index 1 is undefined or null." */
|
|
54
|
+
const arr = [1, undefined, 3];
|
|
55
|
+
console.log(getOrThrow(arr, 1));
|
|
56
|
+
|
|
57
|
+
/** This will throw an error: "Value at key 'b' is undefined or null." */
|
|
58
|
+
const obj = { a: 1, b: undefined, c: 3 };
|
|
59
|
+
console.log(getOrThrow(obj, "b"));
|
|
44
60
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -33,7 +33,18 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
|
|
|
33
33
|
index = length + index;
|
|
34
34
|
}
|
|
35
35
|
if (index >= 0 && index < length) {
|
|
36
|
-
|
|
36
|
+
const value = objOrArr[index];
|
|
37
|
+
if (value !== void 0 && value !== null) {
|
|
38
|
+
return value;
|
|
39
|
+
} else if (value === void 0) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
|
|
42
|
+
);
|
|
43
|
+
} else {
|
|
44
|
+
throw new Error(
|
|
45
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
37
48
|
} else {
|
|
38
49
|
throw new Error(
|
|
39
50
|
errorMessage ?? `Index ${String(keyOrIndex)} is out of bounds.`
|
|
@@ -41,7 +52,18 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
|
|
|
41
52
|
}
|
|
42
53
|
} else {
|
|
43
54
|
if (keyOrIndex in objOrArr) {
|
|
44
|
-
|
|
55
|
+
const value = objOrArr[keyOrIndex];
|
|
56
|
+
if (value !== void 0 && value !== null) {
|
|
57
|
+
return value;
|
|
58
|
+
} else if (value === void 0) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
|
|
61
|
+
);
|
|
62
|
+
} else {
|
|
63
|
+
throw new Error(
|
|
64
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
45
67
|
} else {
|
|
46
68
|
throw new Error(
|
|
47
69
|
errorMessage ?? `Key "${String(keyOrIndex)}" does not exist in the object.`
|
package/dist/index.d.cts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a value from an object or array,
|
|
3
|
-
* does not exist.
|
|
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 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
|
|
9
|
-
*
|
|
8
|
+
* @returns The value at the given key or index, guaranteed to be non-null and
|
|
9
|
+
* non-undefined.
|
|
10
|
+
* @throws An error if the key or index does not exist, or if the resulting
|
|
11
|
+
* value is undefined or null.
|
|
10
12
|
*/
|
|
11
|
-
declare function getOrThrow<T extends object, K extends keyof T>(
|
|
12
|
-
declare function getOrThrow<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>;
|
|
13
15
|
|
|
14
16
|
export { getOrThrow };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a value from an object or array,
|
|
3
|
-
* does not exist.
|
|
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 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
|
|
9
|
-
*
|
|
8
|
+
* @returns The value at the given key or index, guaranteed to be non-null and
|
|
9
|
+
* non-undefined.
|
|
10
|
+
* @throws An error if the key or index does not exist, or if the resulting
|
|
11
|
+
* value is undefined or null.
|
|
10
12
|
*/
|
|
11
|
-
declare function getOrThrow<T extends object, K extends keyof T>(
|
|
12
|
-
declare function getOrThrow<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>;
|
|
13
15
|
|
|
14
16
|
export { getOrThrow };
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,18 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
|
|
|
7
7
|
index = length + index;
|
|
8
8
|
}
|
|
9
9
|
if (index >= 0 && index < length) {
|
|
10
|
-
|
|
10
|
+
const value = objOrArr[index];
|
|
11
|
+
if (value !== void 0 && value !== null) {
|
|
12
|
+
return value;
|
|
13
|
+
} else if (value === void 0) {
|
|
14
|
+
throw new Error(
|
|
15
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
|
|
16
|
+
);
|
|
17
|
+
} else {
|
|
18
|
+
throw new Error(
|
|
19
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
11
22
|
} else {
|
|
12
23
|
throw new Error(
|
|
13
24
|
errorMessage ?? `Index ${String(keyOrIndex)} is out of bounds.`
|
|
@@ -15,7 +26,18 @@ function getOrThrow(objOrArr, keyOrIndex, errorMessage) {
|
|
|
15
26
|
}
|
|
16
27
|
} else {
|
|
17
28
|
if (keyOrIndex in objOrArr) {
|
|
18
|
-
|
|
29
|
+
const value = objOrArr[keyOrIndex];
|
|
30
|
+
if (value !== void 0 && value !== null) {
|
|
31
|
+
return value;
|
|
32
|
+
} else if (value === void 0) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
|
|
35
|
+
);
|
|
36
|
+
} else {
|
|
37
|
+
throw new Error(
|
|
38
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
19
41
|
} else {
|
|
20
42
|
throw new Error(
|
|
21
43
|
errorMessage ?? `Key "${String(keyOrIndex)}" does not exist in the object.`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "get-or-throw",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "A convenience function for adhering to Typescript's noUncheckedIndexedAccess rule",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"homepage": "https://github.com/0x80/get-or-throw#readme",
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@codecompose/typescript-config": "^1.
|
|
31
|
+
"@codecompose/typescript-config": "^1.1.2",
|
|
32
|
+
"del-cli": "^5.1.0",
|
|
32
33
|
"prettier": "^3.3.3",
|
|
33
34
|
"prettier-plugin-jsdoc": "^1.3.0",
|
|
34
35
|
"tsup": "^8.3.0",
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
39
|
"build": "tsup",
|
|
40
|
+
"clean": "del dist tsconfig.tsbuildinfo",
|
|
39
41
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
40
42
|
}
|
|
41
43
|
}
|
package/src/get-or-throw.ts
CHANGED
|
@@ -1,39 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a value from an object or array,
|
|
3
|
-
* does not exist.
|
|
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 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
|
|
9
|
-
*
|
|
8
|
+
* @returns The value at the given key or index, guaranteed to be non-null and
|
|
9
|
+
* non-undefined.
|
|
10
|
+
* @throws An error if the key or index does not exist, or if the resulting
|
|
11
|
+
* value is undefined or null.
|
|
10
12
|
*/
|
|
11
13
|
export function getOrThrow<T extends object, K extends keyof T>(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
objOrArr: T,
|
|
15
|
+
keyOrIndex: K,
|
|
14
16
|
errorMessage?: string
|
|
15
|
-
): T[K]
|
|
17
|
+
): NonNullable<T[K]>;
|
|
16
18
|
export function getOrThrow<T>(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
objOrArr: T[],
|
|
20
|
+
keyOrIndex: number,
|
|
19
21
|
errorMessage?: string
|
|
20
|
-
): T
|
|
22
|
+
): NonNullable<T>;
|
|
21
23
|
export function getOrThrow<T extends object, K extends keyof T>(
|
|
22
24
|
objOrArr: T | T[],
|
|
23
25
|
keyOrIndex: K | number,
|
|
24
26
|
errorMessage?: string
|
|
25
|
-
): T[K] | T {
|
|
27
|
+
): NonNullable<T[K]> | NonNullable<T> {
|
|
26
28
|
if (Array.isArray(objOrArr)) {
|
|
27
29
|
const length = objOrArr.length;
|
|
28
30
|
let index = keyOrIndex as number;
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
/** Allow for negative indexing. */
|
|
31
33
|
if (index < 0) {
|
|
32
34
|
index = length + index;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
if (index >= 0 && index < length) {
|
|
36
|
-
|
|
38
|
+
const value = objOrArr[index];
|
|
39
|
+
|
|
40
|
+
if (value !== undefined && value !== null) {
|
|
41
|
+
return value as NonNullable<T>;
|
|
42
|
+
} else if (value === undefined) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is undefined.`
|
|
45
|
+
);
|
|
46
|
+
} else {
|
|
47
|
+
throw new Error(
|
|
48
|
+
errorMessage ?? `Value at index ${String(keyOrIndex)} is null.`
|
|
49
|
+
);
|
|
50
|
+
}
|
|
37
51
|
} else {
|
|
38
52
|
throw new Error(
|
|
39
53
|
errorMessage ?? `Index ${String(keyOrIndex)} is out of bounds.`
|
|
@@ -41,7 +55,19 @@ export function getOrThrow<T extends object, K extends keyof T>(
|
|
|
41
55
|
}
|
|
42
56
|
} else {
|
|
43
57
|
if (keyOrIndex in objOrArr) {
|
|
44
|
-
|
|
58
|
+
const value = objOrArr[keyOrIndex as K];
|
|
59
|
+
|
|
60
|
+
if (value !== undefined && value !== null) {
|
|
61
|
+
return value as NonNullable<T[K]>;
|
|
62
|
+
} else if (value === undefined) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is undefined.`
|
|
65
|
+
);
|
|
66
|
+
} else {
|
|
67
|
+
throw new Error(
|
|
68
|
+
errorMessage ?? `Value at key "${String(keyOrIndex)}" is null.`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
45
71
|
} else {
|
|
46
72
|
throw new Error(
|
|
47
73
|
errorMessage ??
|