@nifrajs/image 4.0.2 → 5.1.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/dist/backend.d.ts CHANGED
@@ -109,6 +109,12 @@ export interface DecodedImage {
109
109
  export interface WasmImageCodecs {
110
110
  /** Decode any supported encoded image → RGBA. Throw on undecodable input. */
111
111
  decode(bytes: Uint8Array): Promise<DecodedImage> | DecodedImage;
112
+ /**
113
+ * Whether `decode` already applies a JPEG's EXIF orientation. Left unset, the backend turns the
114
+ * pixels itself unless a quarter-turn image visibly decoded to its displayed size; a square image
115
+ * cannot show that, so it is always turned. jSquash's JPEG decoder does not orient.
116
+ */
117
+ readonly orientsJpeg?: boolean;
112
118
  /** Resize RGBA to the target dimensions (the handler keeps the aspect ratio). */
113
119
  resize(image: DecodedImage, width: number, height: number): Promise<DecodedImage> | DecodedImage;
114
120
  /** Encode RGBA → the target format's bytes. */
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;mGACmG;AACnG,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAElD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAIrD,CAAA;AAED;kGACkG;AAClG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B;mFAC+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,sGAAsG;IACtG,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,uFAAuF;IACvF,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACrD;AAED;sDACsD;AACtD,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa;gBAA5C,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa,EACrD,OAAO,EAAE,MAAM;CAKlB;AAmBD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CA8B9C;AAiBD;iGACiG;AACjG,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,aAAa,CAAA;AAC5D,UAAU,aAAa;IACrB,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/F,mGAAmG;IACnG,MAAM,IAAI,aAAa,CAAA;IACvB,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAA;IAC/E,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAA;IACjD,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAA;IACjD,GAAG,IAAI,aAAa,CAAA;IACpB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAoChE;AAyED,yGAAyG;AACzG,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IAC/D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,iFAAiF;IACjF,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IAChG,+CAA+C;IAC/C,MAAM,CACJ,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAA;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CAwBtE"}
package/dist/backend.js CHANGED
@@ -152,10 +152,13 @@ const ORIENTATION_MAP = {
152
152
  };
153
153
  /**
154
154
  * `image` turned upright by the EXIF orientation of the JPEG it was decoded from. The encoders write no
155
- * EXIF, so pixels left as stored would display turned. A codec that already turned a quarter-turn image
156
- * (it decoded to the displayed size) is left as it is.
155
+ * EXIF, so pixels left as stored would display turned. A codec that declares it orients JPEGs is left
156
+ * alone; otherwise a quarter-turn image that decoded to its displayed size counts as already turned,
157
+ * except a square one, whose size cannot tell.
157
158
  */
158
- function upright(image, source) {
159
+ function upright(image, source, orientsJpeg) {
160
+ if (orientsJpeg === true)
161
+ return image;
159
162
  const map = ORIENTATION_MAP[jpegOrientation(source)];
160
163
  if (map === undefined)
161
164
  return image;
@@ -163,7 +166,12 @@ function upright(image, source) {
163
166
  const { width: w, height: h, data } = image;
164
167
  const quarter = a === 0;
165
168
  const shown = imageDimensions(source);
166
- if (quarter && shown !== null && shown.width === w && shown.height === h)
169
+ if (orientsJpeg === undefined &&
170
+ quarter &&
171
+ w !== h &&
172
+ shown !== null &&
173
+ shown.width === w &&
174
+ shown.height === h)
167
175
  return image;
168
176
  const outWidth = quarter ? h : w;
169
177
  const outHeight = quarter ? w : h;
@@ -202,7 +210,7 @@ export function wasmImageBackend(codecs) {
202
210
  },
203
211
  async transform({ bytes, width, quality, format }) {
204
212
  try {
205
- const decoded = upright(await codecs.decode(bytes), bytes);
213
+ const decoded = upright(await codecs.decode(bytes), bytes, codecs.orientsJpeg);
206
214
  // Aspect-preserving: the handler hands a width already clamped to the intrinsic width.
207
215
  const height = Math.max(1, Math.round((decoded.height * width) / decoded.width));
208
216
  const resized = width === decoded.width ? decoded : await codecs.resize(decoded, width, height);
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type FileHandle } from "node:fs/promises";
2
+ /**
3
+ * Open a name `realpath` already resolved, refusing it when any component became a symlink since.
4
+ * A local writer inside the served tree can swap an intermediate directory for a link after the
5
+ * containment check; `O_NOFOLLOW` alone would follow it. Darwin refuses such a path in the kernel;
6
+ * Linux reads back the name the descriptor holds. Elsewhere, Windows included, no file API can open
7
+ * without following a middle link or name an open descriptor's path, so the check in
8
+ * {@link opensAt} is a platform limit: it narrows the race to repeated swaps but cannot close it.
9
+ */
10
+ export declare function openResolved(realFile: string): Promise<FileHandle>;
11
+ /** Whether `handle` is the file at `realFile` with no symlink in its path. */
12
+ export declare function opensAt(handle: Pick<FileHandle, "fd" | "stat">, realFile: string): Promise<boolean>;
13
+ /**
14
+ * {@link opensAt} where no descriptor's path can be read. Exported for its test, which runs it on
15
+ * every host.
16
+ */
17
+ export declare function sameFileAt(handle: Pick<FileHandle, "stat">, realFile: string): Promise<boolean>;
18
+ //# sourceMappingURL=open-resolved.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-resolved.d.ts","sourceRoot":"","sources":["../src/open-resolved.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,kBAAkB,CAAA;AAOlF;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBxE;AAED,8EAA8E;AAC9E,wBAAsB,OAAO,CAC3B,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC,EACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CASlB"}
@@ -0,0 +1,64 @@
1
+ // Kept identical to packages/web/src/open-resolved.ts (a web test compares them); this package
2
+ // has no dependency through which to share it.
3
+ import { constants as FS } from "node:fs";
4
+ import { open, readlink, realpath, stat } from "node:fs/promises";
5
+ // Darwin's open(2) flag refusing a symlink in ANY component; `O_NOFOLLOW` covers only the last one.
6
+ const O_NOFOLLOW_ANY = 0x20000000;
7
+ // Deno's node:fs rejects flags it does not know with EINVAL; the first refusal turns the flag off.
8
+ let noFollowAny;
9
+ /**
10
+ * Open a name `realpath` already resolved, refusing it when any component became a symlink since.
11
+ * A local writer inside the served tree can swap an intermediate directory for a link after the
12
+ * containment check; `O_NOFOLLOW` alone would follow it. Darwin refuses such a path in the kernel;
13
+ * Linux reads back the name the descriptor holds. Elsewhere, Windows included, no file API can open
14
+ * without following a middle link or name an open descriptor's path, so the check in
15
+ * {@link opensAt} is a platform limit: it narrows the race to repeated swaps but cannot close it.
16
+ */
17
+ export async function openResolved(realFile) {
18
+ // Read per open, not at load: this module can sit in a client bundle graph, where `process` is
19
+ // undefined.
20
+ if (noFollowAny ?? process.platform === "darwin") {
21
+ try {
22
+ return await open(realFile, FS.O_RDONLY | O_NOFOLLOW_ANY);
23
+ }
24
+ catch (error) {
25
+ if (!(error instanceof Error && "code" in error && error.code === "EINVAL"))
26
+ throw error;
27
+ noFollowAny = false;
28
+ }
29
+ }
30
+ const handle = await open(realFile, FS.O_RDONLY | FS.O_NOFOLLOW);
31
+ try {
32
+ if (await opensAt(handle, realFile))
33
+ return handle;
34
+ }
35
+ catch { }
36
+ await handle.close();
37
+ throw Object.assign(new Error(`${realFile} moved while it was opened`), { code: "ELOOP" });
38
+ }
39
+ /** Whether `handle` is the file at `realFile` with no symlink in its path. */
40
+ export async function opensAt(handle, realFile) {
41
+ try {
42
+ return (await readlink(`/proc/self/fd/${handle.fd}`)) === realFile;
43
+ }
44
+ catch {
45
+ return sameFileAt(handle, realFile);
46
+ }
47
+ }
48
+ /**
49
+ * {@link opensAt} where no descriptor's path can be read. Exported for its test, which runs it on
50
+ * every host.
51
+ */
52
+ export async function sameFileAt(handle, realFile) {
53
+ // One step after another, so passing takes a swap back and a swap again between steps: the name
54
+ // resolves to itself, then to the opened file, then to itself again. Identities are compared as
55
+ // bigints because a Windows file index can exceed 2^53.
56
+ if ((await realpath(realFile)) !== realFile)
57
+ return false;
58
+ const opened = await handle.stat({ bigint: true });
59
+ const named = await stat(realFile, { bigint: true });
60
+ if (opened.dev !== named.dev || opened.ino !== named.ino)
61
+ return false;
62
+ return (await realpath(realFile)) === realFile;
63
+ }
64
+ //# sourceMappingURL=open-resolved.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-resolved.js","sourceRoot":"","sources":["../src/open-resolved.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,+CAA+C;AAC/C,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAmB,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAElF,oGAAoG;AACpG,MAAM,cAAc,GAAG,UAAU,CAAA;AACjC,mGAAmG;AACnG,IAAI,WAAgC,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,+FAA+F;IAC/F,aAAa;IACb,IAAI,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAA;YACxF,WAAW,GAAG,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,CAAA;IAChE,IAAI,CAAC;QACH,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACpB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,4BAA4B,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAuC,EACvC,QAAgB;IAEhB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,QAAQ,CAAC,iBAAiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAA;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAgC,EAChC,QAAgB;IAEhB,gGAAgG;IAChG,gGAAgG;IAChG,wDAAwD;IACxD,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtE,OAAO,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAA;AAChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,cAAc,CAAA;AAOrB,cAAc,cAAc,CAAA;AAE5B,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAC/B;sEACkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;+FAC2F;IAC3F,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,gGAAgG;IAChG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oGAAoG;IACpG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;uGACmG;IACnG,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,iDAAiD;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC;sCACkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B;;0FAEsF;IACtF,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAmCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,mBAAwB,GAChC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAGrC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,cAAc,CAAA;AAQrB,cAAc,cAAc,CAAA;AAE5B,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAC/B;sEACkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;+FAC2F;IAC3F,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,gGAAgG;IAChG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oGAAoG;IACpG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;uGACmG;IACnG,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,iDAAiD;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC;sCACkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B;;0FAEsF;IACtF,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAmCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,mBAAwB,GAChC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAGrC"}
package/dist/server.js CHANGED
@@ -10,10 +10,10 @@
10
10
  * edge. On Workers / Vercel-Edge / Deno-Deploy there is no native codec - use the CDN `cloudflareLoader`
11
11
  * from `@nifrajs/image` instead. The dependency-free core (`@nifrajs/image`) never imports this module.
12
12
  */
13
- import { constants as FS } from "node:fs";
14
- import { open, realpath } from "node:fs/promises";
13
+ import { realpath } from "node:fs/promises";
15
14
  import { resolve as resolvePath, sep } from "node:path";
16
15
  import { bunImageBackend, ImageProcessingError, } from "./backend.js";
16
+ import { openResolved } from "./open-resolved.js";
17
17
  import { verifyImageParams } from "./sign.js";
18
18
  // The codec seam + every official backend (Bun/sharp/WASM) live in the edge-safe `./backend.ts`
19
19
  // (`@nifrajs/image/backends`), importable WITHOUT this module's `node:fs` - so a WASM backend can ship to
@@ -245,8 +245,9 @@ async function fetchRemote(url, cfg, requestSignal) {
245
245
  timedOut = true;
246
246
  controller.abort();
247
247
  }, cfg.fetchTimeoutMs);
248
+ let res;
248
249
  try {
249
- const res = await cfg.fetchImpl(url, {
250
+ res = await cfg.fetchImpl(url, {
250
251
  redirect: "error", // a redirect could bounce to a disallowed origin - refuse it.
251
252
  signal: controller.signal,
252
253
  headers: { Accept: "image/*" },
@@ -271,6 +272,11 @@ async function fetchRemote(url, cfg, requestSignal) {
271
272
  finally {
272
273
  clearTimeout(timer);
273
274
  requestSignal.removeEventListener("abort", onRequestAbort);
275
+ // A rejection before the body was read (status, declared size, cancellation) leaves the
276
+ // exchange open; cancel what is left and abort the fetch so it ends with the admission slot.
277
+ if (res !== undefined && !res.bodyUsed)
278
+ res.body?.cancel().catch(() => { });
279
+ controller.abort();
274
280
  }
275
281
  }
276
282
  async function readLocal(src, cfg, signal) {
@@ -287,7 +293,8 @@ async function readLocal(src, cfg, signal) {
287
293
  return { ok: false, status: 403, code: "source_not_allowed" };
288
294
  }
289
295
  // Resolve containment, then open that verified name exactly once. Reopening `resolved` after these
290
- // checks would let a writable source tree swap a symlink between verification and read.
296
+ // checks would let a writable source tree swap a symlink between verification and read, and
297
+ // openResolved refuses the name once any component of it became one.
291
298
  let real;
292
299
  try {
293
300
  real = await realpath(resolved);
@@ -301,7 +308,7 @@ async function readLocal(src, cfg, signal) {
301
308
  }
302
309
  let handle;
303
310
  try {
304
- handle = await open(real, FS.O_RDONLY | FS.O_NOFOLLOW);
311
+ handle = await openResolved(real);
305
312
  const info = await handle.stat();
306
313
  if (!info.isFile())
307
314
  return { ok: false, status: 404, code: "source_not_found" };
@@ -351,16 +358,21 @@ async function readBoundedBytes(res, limit) {
351
358
  }
352
359
  const chunks = [];
353
360
  let total = 0;
354
- for (;;) {
355
- const { done, value } = await reader.read();
356
- if (done)
357
- break;
358
- total += value.byteLength;
359
- if (total > limit) {
360
- await reader.cancel();
361
- return null;
361
+ try {
362
+ for (;;) {
363
+ const { done, value } = await reader.read();
364
+ if (done)
365
+ break;
366
+ total += value.byteLength;
367
+ if (total > limit) {
368
+ await reader.cancel();
369
+ return null;
370
+ }
371
+ chunks.push(value);
362
372
  }
363
- chunks.push(value);
373
+ }
374
+ finally {
375
+ reader.releaseLock();
364
376
  }
365
377
  const out = new Uint8Array(total);
366
378
  let offset = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/image",
3
- "version": "4.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "Image optimization for nifra - a CLS-safe responsive <Image> + pluggable loaders (CDN or self-hosted) + pure-JS dimension reading. Zero-dependency core; optional Bun.Image-backed resize endpoint at @nifrajs/image/server.",
5
5
  "keywords": [
6
6
  "bun",
package/src/backend.ts CHANGED
@@ -233,17 +233,31 @@ const ORIENTATION_MAP: Readonly<Record<number, readonly number[]>> = {
233
233
 
234
234
  /**
235
235
  * `image` turned upright by the EXIF orientation of the JPEG it was decoded from. The encoders write no
236
- * EXIF, so pixels left as stored would display turned. A codec that already turned a quarter-turn image
237
- * (it decoded to the displayed size) is left as it is.
236
+ * EXIF, so pixels left as stored would display turned. A codec that declares it orients JPEGs is left
237
+ * alone; otherwise a quarter-turn image that decoded to its displayed size counts as already turned,
238
+ * except a square one, whose size cannot tell.
238
239
  */
239
- function upright(image: DecodedImage, source: Uint8Array): DecodedImage {
240
+ function upright(
241
+ image: DecodedImage,
242
+ source: Uint8Array,
243
+ orientsJpeg: boolean | undefined,
244
+ ): DecodedImage {
245
+ if (orientsJpeg === true) return image
240
246
  const map = ORIENTATION_MAP[jpegOrientation(source)]
241
247
  if (map === undefined) return image
242
248
  const [a = 0, b = 0, c = 0, d = 0, e = 0, f = 0] = map
243
249
  const { width: w, height: h, data } = image
244
250
  const quarter = a === 0
245
251
  const shown = imageDimensions(source)
246
- if (quarter && shown !== null && shown.width === w && shown.height === h) return image
252
+ if (
253
+ orientsJpeg === undefined &&
254
+ quarter &&
255
+ w !== h &&
256
+ shown !== null &&
257
+ shown.width === w &&
258
+ shown.height === h
259
+ )
260
+ return image
247
261
  const outWidth = quarter ? h : w
248
262
  const outHeight = quarter ? w : h
249
263
  const out = new Uint8Array(data.length)
@@ -275,6 +289,12 @@ export interface DecodedImage {
275
289
  export interface WasmImageCodecs {
276
290
  /** Decode any supported encoded image → RGBA. Throw on undecodable input. */
277
291
  decode(bytes: Uint8Array): Promise<DecodedImage> | DecodedImage
292
+ /**
293
+ * Whether `decode` already applies a JPEG's EXIF orientation. Left unset, the backend turns the
294
+ * pixels itself unless a quarter-turn image visibly decoded to its displayed size; a square image
295
+ * cannot show that, so it is always turned. jSquash's JPEG decoder does not orient.
296
+ */
297
+ readonly orientsJpeg?: boolean
278
298
  /** Resize RGBA to the target dimensions (the handler keeps the aspect ratio). */
279
299
  resize(image: DecodedImage, width: number, height: number): Promise<DecodedImage> | DecodedImage
280
300
  /** Encode RGBA → the target format's bytes. */
@@ -308,7 +328,7 @@ export function wasmImageBackend(codecs: WasmImageCodecs): ImageBackend {
308
328
  },
309
329
  async transform({ bytes, width, quality, format }) {
310
330
  try {
311
- const decoded = upright(await codecs.decode(bytes), bytes)
331
+ const decoded = upright(await codecs.decode(bytes), bytes, codecs.orientsJpeg)
312
332
  // Aspect-preserving: the handler hands a width already clamped to the intrinsic width.
313
333
  const height = Math.max(1, Math.round((decoded.height * width) / decoded.width))
314
334
  const resized =
@@ -0,0 +1,66 @@
1
+ // Kept identical to packages/web/src/open-resolved.ts (a web test compares them); this package
2
+ // has no dependency through which to share it.
3
+ import { constants as FS } from "node:fs"
4
+ import { type FileHandle, open, readlink, realpath, stat } from "node:fs/promises"
5
+
6
+ // Darwin's open(2) flag refusing a symlink in ANY component; `O_NOFOLLOW` covers only the last one.
7
+ const O_NOFOLLOW_ANY = 0x20000000
8
+ // Deno's node:fs rejects flags it does not know with EINVAL; the first refusal turns the flag off.
9
+ let noFollowAny: boolean | undefined
10
+
11
+ /**
12
+ * Open a name `realpath` already resolved, refusing it when any component became a symlink since.
13
+ * A local writer inside the served tree can swap an intermediate directory for a link after the
14
+ * containment check; `O_NOFOLLOW` alone would follow it. Darwin refuses such a path in the kernel;
15
+ * Linux reads back the name the descriptor holds. Elsewhere, Windows included, no file API can open
16
+ * without following a middle link or name an open descriptor's path, so the check in
17
+ * {@link opensAt} is a platform limit: it narrows the race to repeated swaps but cannot close it.
18
+ */
19
+ export async function openResolved(realFile: string): Promise<FileHandle> {
20
+ // Read per open, not at load: this module can sit in a client bundle graph, where `process` is
21
+ // undefined.
22
+ if (noFollowAny ?? process.platform === "darwin") {
23
+ try {
24
+ return await open(realFile, FS.O_RDONLY | O_NOFOLLOW_ANY)
25
+ } catch (error) {
26
+ if (!(error instanceof Error && "code" in error && error.code === "EINVAL")) throw error
27
+ noFollowAny = false
28
+ }
29
+ }
30
+ const handle = await open(realFile, FS.O_RDONLY | FS.O_NOFOLLOW)
31
+ try {
32
+ if (await opensAt(handle, realFile)) return handle
33
+ } catch {}
34
+ await handle.close()
35
+ throw Object.assign(new Error(`${realFile} moved while it was opened`), { code: "ELOOP" })
36
+ }
37
+
38
+ /** Whether `handle` is the file at `realFile` with no symlink in its path. */
39
+ export async function opensAt(
40
+ handle: Pick<FileHandle, "fd" | "stat">,
41
+ realFile: string,
42
+ ): Promise<boolean> {
43
+ try {
44
+ return (await readlink(`/proc/self/fd/${handle.fd}`)) === realFile
45
+ } catch {
46
+ return sameFileAt(handle, realFile)
47
+ }
48
+ }
49
+
50
+ /**
51
+ * {@link opensAt} where no descriptor's path can be read. Exported for its test, which runs it on
52
+ * every host.
53
+ */
54
+ export async function sameFileAt(
55
+ handle: Pick<FileHandle, "stat">,
56
+ realFile: string,
57
+ ): Promise<boolean> {
58
+ // One step after another, so passing takes a swap back and a swap again between steps: the name
59
+ // resolves to itself, then to the opened file, then to itself again. Identities are compared as
60
+ // bigints because a Windows file index can exceed 2^53.
61
+ if ((await realpath(realFile)) !== realFile) return false
62
+ const opened = await handle.stat({ bigint: true })
63
+ const named = await stat(realFile, { bigint: true })
64
+ if (opened.dev !== named.dev || opened.ino !== named.ino) return false
65
+ return (await realpath(realFile)) === realFile
66
+ }
package/src/server.ts CHANGED
@@ -11,8 +11,7 @@
11
11
  * from `@nifrajs/image` instead. The dependency-free core (`@nifrajs/image`) never imports this module.
12
12
  */
13
13
 
14
- import { constants as FS } from "node:fs"
15
- import { open, realpath } from "node:fs/promises"
14
+ import { realpath } from "node:fs/promises"
16
15
  import { resolve as resolvePath, sep } from "node:path"
17
16
 
18
17
  import {
@@ -22,6 +21,7 @@ import {
22
21
  type OutputFormat,
23
22
  } from "./backend.ts"
24
23
 
24
+ import { openResolved } from "./open-resolved.ts"
25
25
  import { verifyImageParams } from "./sign.ts"
26
26
 
27
27
  // The codec seam + every official backend (Bun/sharp/WASM) live in the edge-safe `./backend.ts`
@@ -335,8 +335,9 @@ async function fetchRemote(
335
335
  timedOut = true
336
336
  controller.abort()
337
337
  }, cfg.fetchTimeoutMs)
338
+ let res: Response | undefined
338
339
  try {
339
- const res = await cfg.fetchImpl(url, {
340
+ res = await cfg.fetchImpl(url, {
340
341
  redirect: "error", // a redirect could bounce to a disallowed origin - refuse it.
341
342
  signal: controller.signal,
342
343
  headers: { Accept: "image/*" },
@@ -355,6 +356,10 @@ async function fetchRemote(
355
356
  } finally {
356
357
  clearTimeout(timer)
357
358
  requestSignal.removeEventListener("abort", onRequestAbort)
359
+ // A rejection before the body was read (status, declared size, cancellation) leaves the
360
+ // exchange open; cancel what is left and abort the fetch so it ends with the admission slot.
361
+ if (res !== undefined && !res.bodyUsed) res.body?.cancel().catch(() => {})
362
+ controller.abort()
358
363
  }
359
364
  }
360
365
 
@@ -374,7 +379,8 @@ async function readLocal(
374
379
  return { ok: false, status: 403, code: "source_not_allowed" }
375
380
  }
376
381
  // Resolve containment, then open that verified name exactly once. Reopening `resolved` after these
377
- // checks would let a writable source tree swap a symlink between verification and read.
382
+ // checks would let a writable source tree swap a symlink between verification and read, and
383
+ // openResolved refuses the name once any component of it became one.
378
384
  let real: string
379
385
  try {
380
386
  real = await realpath(resolved)
@@ -385,9 +391,9 @@ async function readLocal(
385
391
  } catch {
386
392
  return { ok: false, status: 404, code: "source_not_found" }
387
393
  }
388
- let handle: Awaited<ReturnType<typeof open>> | undefined
394
+ let handle: Awaited<ReturnType<typeof openResolved>> | undefined
389
395
  try {
390
- handle = await open(real, FS.O_RDONLY | FS.O_NOFOLLOW)
396
+ handle = await openResolved(real)
391
397
  const info = await handle.stat()
392
398
  if (!info.isFile()) return { ok: false, status: 404, code: "source_not_found" }
393
399
  if (info.size > cfg.maxSourceBytes) {
@@ -430,15 +436,19 @@ async function readBoundedBytes(res: Response, limit: number): Promise<Uint8Arra
430
436
  }
431
437
  const chunks: Uint8Array[] = []
432
438
  let total = 0
433
- for (;;) {
434
- const { done, value } = await reader.read()
435
- if (done) break
436
- total += value.byteLength
437
- if (total > limit) {
438
- await reader.cancel()
439
- return null
439
+ try {
440
+ for (;;) {
441
+ const { done, value } = await reader.read()
442
+ if (done) break
443
+ total += value.byteLength
444
+ if (total > limit) {
445
+ await reader.cancel()
446
+ return null
447
+ }
448
+ chunks.push(value)
440
449
  }
441
- chunks.push(value)
450
+ } finally {
451
+ reader.releaseLock()
442
452
  }
443
453
  const out = new Uint8Array(total)
444
454
  let offset = 0