ds300 / patch-package

Fix broken node modules instantly 🏃🏽‍♀️💨
MIT License
10.47k stars 295 forks source link

Respect `copy from`/`copy to` extended headers #530

Open aaronadamsCA opened 3 months ago

aaronadamsCA commented 3 months ago

Under TypeScript node16 module resolution, I often find myself needing to fix broken ESM types in packages by copying their type definition files (example package).

These diffs currently show a new file command with the full content of the copied file, which makes them very long and hard to maintain from release to release.

diff --git a/dist/hls.js.d.ts b/dist/hls.d.mts
similarity index 100%
rename from dist/hls.js.d.ts
rename to dist/hls.d.mts
diff --git a/dist/hls.d.ts b/dist/hls.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7ba8086b369797b5778b5295443cdd07e6beb72c
--- /dev/null
+++ b/dist/hls.d.ts
@@ -0,0 +1,3105 @@
+export declare interface AbrComponentAPI extends ComponentAPI {
+    firstAutoLevel: number;
+    forcedAutoLevel: number;
(3000+ more lines)

I can generate my own much smaller patch using git diff --find-copies-harder. It's both easier to understand and easier to keep updated with the underlying package.

diff --git a/dist/hls.js.d.ts b/dist/hls.d.mts
similarity index 100%
copy from dist/hls.js.d.ts
copy to dist/hls.d.mts
diff --git a/dist/hls.js.d.ts b/dist/hls.d.ts
similarity index 100%
rename from dist/hls.js.d.ts
rename to dist/hls.d.ts

Unfortunately patch-package silently ignores these copy from/copy to headers.

When applying a patch generated by git diff, it would be great if this package would copy files. If that's not possible, then it should at least refuse to apply the patch.

Full list of extended header lines: https://git-scm.com/docs/diff-generate-patch#generate_patch_text_with_p

Thanks!