immerjs / immerjs/immer

CI Build issue patch - 'patch' is possibly 'undefined'.

Open
#1,143 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
29k
Forks
881
PR merge metrics
No merged PRs in 30d

Description

Hi! 👋

I was getting following error while doing build

./node_modules/.pnpm/immer@10.1.1/node_modules/immer/src/core/immerClass.ts:181:8
Type error: 'patch' is possibly 'undefined'.
  179 | 		for (i = patches.length - 1; i >= 0; i--) {
  180 | 			const patch = patches[i]
> 181 | 			if (patch.path.length === 0 && patch.op === "replace") {
      | 			    ^
  182 | 				base = patch.value
  183 | 				break
  184 | 			}
 ELIFECYCLE  Command failed with exit code 1.
Error: Command "pnpm build" exited with 1

Here is the diff that solved my problem:

diff --git a/node_modules/immer/src/core/immerClass.ts b/node_modules/immer/src/core/immerClass.ts
index f827361..37bb8c9 100644
--- a/node_modules/immer/src/core/immerClass.ts
+++ b/node_modules/immer/src/core/immerClass.ts
@@ -1,30 +1,30 @@
 import {
-	IProduceWithPatches,
+	DRAFT_STATE,
+	Draft,
+	Drafted,
 	IProduce,
+	IProduceWithPatches,
 	ImmerState,
-	Drafted,
-	isDraftable,
-	processResult,
-	Patch,
+	NOTHING,
 	Objectish,
-	DRAFT_STATE,
-	Draft,
+	Patch,
 	PatchListener,
-	isDraft,
-	isMap,
-	isSet,
 	createProxyProxy,
-	getPlugin,
+	current,
 	die,
 	enterScope,
-	revokeScope,
-	leaveScope,
-	usePatchesInScope,
-	getCurrentScope,
-	NOTHING,
 	freeze,
-	current
-} from "../internal"
+	getCurrentScope,
+	getPlugin,
+	isDraft,
+	isDraftable,
+	isMap,
+	isSet,
+	leaveScope,
+	processResult,
+	revokeScope,
+	usePatchesInScope
+} from "../internal";
 
 interface ProducersFns {
 	produce: IProduce
@@ -178,7 +178,7 @@ export class Immer implements ProducersFns {
 		let i: number
 		for (i = patches.length - 1; i >= 0; i--) {
 			const patch = patches[i]
-			if (patch.path.length === 0 && patch.op === "replace") {
+			if (patch?.path?.length === 0 && patch?.op === "replace") {
 				base = patch.value
 				break
 			}
diff --git a/node_modules/immer/src/utils/common.ts b/node_modules/immer/src/utils/common.ts
index 692157b..8db10ba 100644
--- a/node_modules/immer/src/utils/common.ts
+++ b/node_modules/immer/src/utils/common.ts
@@ -1,14 +1,14 @@
 import {
-	DRAFT_STATE,
-	DRAFTABLE,
-	Objectish,
-	Drafted,
-	AnyObject,
 	AnyMap,
+	AnyObject,
 	AnySet,
-	ImmerState,
 	ArchType,
 	die,
+	DRAFT_STATE,
+	DRAFTABLE,
+	Drafted,
+	ImmerState,
+	Objectish,
 	StrictMode
 } from "../internal"
 
@@ -160,14 +160,14 @@ export function shallowCopy(base: any, strict: StrictMode) {
 		for (let i = 0; i < keys.length; i++) {
 			const key: any = keys[i]
 			const desc = descriptors[key]
-			if (desc.writable === false) {
+			if (desc?.writable === false) {
 				desc.writable = true
 				desc.configurable = true
 			}
 			// like object.assign, we will read any _own_, get/set accessors. This helps in dealing
 			// with libraries that trap values, like mobx or vue
 			// unlike object.assign, non-enumerables will be copied as well
-			if (desc.get || desc.set)
+			if (desc?.get || desc?.set)
 				descriptors[key] = {
 					configurable: true,
 					writable: true, // could live with !!desc.set as well here...

This issue body was partially generated by patch-package.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the reported pnpm build failure in immer/src/core/immerClass.ts:181 and the related immer/src/utils/common.ts lines shown in the patch. Check how this dependency is handled by the repository and verify the build after any dependency-level fix; done means pnpm build completes without the reported TypeScript errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
build-system, ci-cd
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.