@revizly/sharp 0.33.4-revizly2 → 0.33.4-revizly4

Sign up to get free protection for your applications and to get access to all the features.
package/install/check.js CHANGED
@@ -30,7 +30,7 @@ try {
30
30
  }
31
31
  };
32
32
 
33
- if (useGlobalLibvips()) {
33
+ if (useGlobalLibvips(log)) {
34
34
  buildFromSource(`Detected globally-installed libvips v${globalLibvipsVersion()}`);
35
35
  } else if (process.env.npm_config_build_from_source) {
36
36
  buildFromSource('Detected --build-from-source flag');
package/lib/libvips.js CHANGED
@@ -162,21 +162,23 @@ const pkgConfigPath = () => {
162
162
  }
163
163
  };
164
164
 
165
- const skipSearch = (status, reason) => {
166
- log(`Detected ${reason}, skipping search for globally-installed libvips`);
165
+ const skipSearch = (status, reason, logger) => {
166
+ if (logger) {
167
+ logger(`Detected ${reason}, skipping search for globally-installed libvips`);
168
+ }
167
169
  return status;
168
170
  };
169
171
 
170
- const useGlobalLibvips = () => {
172
+ const useGlobalLibvips = (logger) => {
171
173
  if (Boolean(process.env.SHARP_IGNORE_GLOBAL_LIBVIPS) === true) {
172
- return skipSearch(false, 'SHARP_IGNORE_GLOBAL_LIBVIPS');
174
+ return skipSearch(false, 'SHARP_IGNORE_GLOBAL_LIBVIPS', logger);
173
175
  }
174
176
  if (Boolean(process.env.SHARP_FORCE_GLOBAL_LIBVIPS) === true) {
175
- return skipSearch(true, 'SHARP_FORCE_GLOBAL_LIBVIPS');
177
+ return skipSearch(true, 'SHARP_FORCE_GLOBAL_LIBVIPS', logger);
176
178
  }
177
179
  /* istanbul ignore next */
178
180
  if (isRosetta()) {
179
- return skipSearch(false, 'Rosetta');
181
+ return skipSearch(false, 'Rosetta', logger);
180
182
  }
181
183
  const globalVipsVersion = globalLibvipsVersion();
182
184
  return !!globalVipsVersion && /* istanbul ignore next */
package/lib/output.js CHANGED
@@ -65,6 +65,7 @@ const bitdepthFromColourCount = (colours) => 1 << 31 - Math.clz32(Math.ceil(Math
65
65
  * `channels` and `premultiplied` (indicating if premultiplication was used).
66
66
  * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.
67
67
  * When using the attention crop strategy also contains `attentionX` and `attentionY`, the focal point of the cropped region.
68
+ * Animated output will also contain `pageHeight` and `pages`.
68
69
  * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text.
69
70
  * @returns {Promise<Object>} - when no callback is provided
70
71
  * @throws {Error} Invalid parameters
@@ -109,6 +110,7 @@ function toFile (fileOut, callback) {
109
110
  * - `info` contains the output image `format`, `size` (bytes), `width`, `height`,
110
111
  * `channels` and `premultiplied` (indicating if premultiplication was used).
111
112
  * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.
113
+ * Animated output will also contain `pageHeight` and `pages`.
112
114
  * May also contain `textAutofitDpi` (dpi the font was rendered at) if image was created from text.
113
115
  *
114
116
  * A `Promise` is returned when `callback` is not provided.
package/lib/utility.js CHANGED
@@ -75,6 +75,13 @@ if (!libvipsVersion.isGlobal) {
75
75
  }
76
76
  versions.sharp = require('../package.json').version;
77
77
 
78
+ /* istanbul ignore next */
79
+ if (versions.heif && format.heif) {
80
+ // Prebuilt binaries provide AV1
81
+ format.heif.input.fileSuffix = ['.avif'];
82
+ format.heif.output.alias = ['avif'];
83
+ }
84
+
78
85
  /**
79
86
  * Gets or, when options are provided, sets the limits of _libvips'_ operation cache.
80
87
  * Existing entries in the cache will be trimmed after any change in limits.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@revizly/sharp",
3
3
  "description": "High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images",
4
- "version": "0.33.4-revizly2",
4
+ "version": "0.33.4-revizly4",
5
5
  "author": "Lovell Fuller <npm@lovell.info>",
6
6
  "homepage": "https://sharp.pixelplumbing.com",
7
7
  "contributors": [
@@ -88,7 +88,8 @@
88
88
  "Mart Jansink <m.jansink@gmail.com>",
89
89
  "Lachlan Newman <lachnewman007@gmail.com>",
90
90
  "Dennis Beatty <dennis@dcbeatty.com>",
91
- "Ingvar Stepanyan <me@rreverser.com>"
91
+ "Ingvar Stepanyan <me@rreverser.com>",
92
+ "Don Denton <don@happycollision.com>"
92
93
  ],
93
94
  "scripts": {
94
95
  "install": "node install/check",
@@ -141,18 +142,18 @@
141
142
  "semver": "^7.6.0"
142
143
  },
143
144
  "optionalDependencies": {
144
- "@revizly/sharp-libvips-linux-arm64": "1.0.5",
145
- "@revizly/sharp-libvips-linux-x64": "1.0.5",
146
- "@revizly/sharp-linux-arm64": "0.33.4-revizly1",
147
- "@revizly/sharp-linux-x64": "0.33.4-revizly1"
145
+ "@revizly/sharp-libvips-linux-arm64": "1.0.6",
146
+ "@revizly/sharp-libvips-linux-x64": "1.0.6",
147
+ "@revizly/sharp-linux-arm64": "0.33.4-revizly3",
148
+ "@revizly/sharp-linux-x64": "0.33.4-revizly3"
148
149
  },
149
150
  "devDependencies": {
150
- "@emnapi/runtime": "^1.1.1",
151
- "@revizly/sharp-libvips-dev": "1.0.5",
151
+ "@emnapi/runtime": "^1.2.0",
152
+ "@revizly/sharp-libvips-dev": "1.0.6",
152
153
  "@types/node": "*",
153
154
  "async": "^3.2.5",
154
155
  "cc": "^3.0.1",
155
- "emnapi": "^1.1.1",
156
+ "emnapi": "^1.2.0",
156
157
  "exif-reader": "^2.0.1",
157
158
  "extract-zip": "^2.0.1",
158
159
  "icc": "^3.0.0",
package/src/pipeline.cc CHANGED
@@ -849,6 +849,11 @@ class PipelineWorker : public Napi::AsyncWorker {
849
849
  image = sharp::SetAnimationProperties(
850
850
  image, nPages, targetPageHeight, baton->delay, baton->loop);
851
851
 
852
+ if (image.get_typeof(VIPS_META_PAGE_HEIGHT) == G_TYPE_INT) {
853
+ baton->pageHeightOut = image.get_int(VIPS_META_PAGE_HEIGHT);
854
+ baton->pagesOut = image.get_int(VIPS_META_N_PAGES);
855
+ }
856
+
852
857
  // Output
853
858
  sharp::SetTimeout(image, baton->timeoutSeconds);
854
859
  if (baton->fileOut.empty()) {
@@ -1284,6 +1289,10 @@ class PipelineWorker : public Napi::AsyncWorker {
1284
1289
  if (baton->input->textAutofitDpi) {
1285
1290
  info.Set("textAutofitDpi", static_cast<uint32_t>(baton->input->textAutofitDpi));
1286
1291
  }
1292
+ if (baton->pageHeightOut) {
1293
+ info.Set("pageHeight", static_cast<int32_t>(baton->pageHeightOut));
1294
+ info.Set("pages", static_cast<int32_t>(baton->pagesOut));
1295
+ }
1287
1296
 
1288
1297
  if (baton->bufferOutLength > 0) {
1289
1298
  // Add buffer size to info
package/src/pipeline.h CHANGED
@@ -43,6 +43,8 @@ struct PipelineBaton {
43
43
  std::string fileOut;
44
44
  void *bufferOut;
45
45
  size_t bufferOutLength;
46
+ int pageHeightOut;
47
+ int pagesOut;
46
48
  std::vector<Composite *> composite;
47
49
  std::vector<sharp::InputDescriptor *> joinChannelIn;
48
50
  int topOffsetPre;
@@ -226,6 +228,8 @@ struct PipelineBaton {
226
228
  PipelineBaton():
227
229
  input(nullptr),
228
230
  bufferOutLength(0),
231
+ pageHeightOut(0),
232
+ pagesOut(0),
229
233
  topOffsetPre(-1),
230
234
  topOffsetPost(-1),
231
235
  channels(0),