@basemaps/lambda-tiler 6.20.0 → 6.21.1

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.
Files changed (618) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/build/__test__/tile.set.cache.test.js +4 -10
  3. package/build/cli/validate.js +2 -1
  4. package/build/index.d.ts.map +1 -1
  5. package/build/index.js +8 -1
  6. package/build/routes/__test__/attribution.test.js +3 -13
  7. package/build/routes/attribution.d.ts.map +1 -1
  8. package/build/routes/attribution.js +7 -20
  9. package/build/routes/tile.wmts.js +2 -2
  10. package/build/source.tracer.d.ts +17 -0
  11. package/build/source.tracer.d.ts.map +1 -0
  12. package/build/source.tracer.js +22 -0
  13. package/build/tile.set.cache.js +3 -3
  14. package/build/tile.set.d.ts +0 -16
  15. package/build/tile.set.d.ts.map +1 -1
  16. package/build/tile.set.js +1 -20
  17. package/build/tile.set.raster.d.ts +7 -4
  18. package/build/tile.set.raster.d.ts.map +1 -1
  19. package/build/tile.set.raster.js +14 -5
  20. package/build/tile.set.vector.d.ts +10 -4
  21. package/build/tile.set.vector.d.ts.map +1 -1
  22. package/build/tile.set.vector.js +17 -7
  23. package/bundle.sh +2 -2
  24. package/package.json +11 -11
  25. package/scripts/create.deployment.package.mjs +34 -0
  26. package/src/__test__/tile.set.cache.test.ts +4 -12
  27. package/src/cli/validate.ts +2 -1
  28. package/src/index.ts +11 -1
  29. package/src/routes/__test__/attribution.test.ts +3 -13
  30. package/src/routes/attribution.ts +6 -17
  31. package/src/routes/tile.wmts.ts +2 -2
  32. package/src/source.tracer.ts +34 -0
  33. package/src/tile.set.cache.ts +3 -3
  34. package/src/tile.set.raster.ts +28 -6
  35. package/src/tile.set.ts +0 -40
  36. package/src/tile.set.vector.ts +25 -6
  37. package/tsconfig.tsbuildinfo +1 -1
  38. package/dist/index.js +0 -30702
  39. package/dist/node_modules/ansi-regex/index.js +0 -4
  40. package/dist/node_modules/ansi-regex/license +0 -21
  41. package/dist/node_modules/ansi-regex/package.json +0 -108
  42. package/dist/node_modules/ansi-regex/readme.md +0 -39
  43. package/dist/node_modules/aproba/LICENSE +0 -14
  44. package/dist/node_modules/aproba/README.md +0 -94
  45. package/dist/node_modules/aproba/index.js +0 -105
  46. package/dist/node_modules/aproba/package.json +0 -62
  47. package/dist/node_modules/are-we-there-yet/CHANGES.md +0 -37
  48. package/dist/node_modules/are-we-there-yet/LICENSE +0 -5
  49. package/dist/node_modules/are-we-there-yet/README.md +0 -195
  50. package/dist/node_modules/are-we-there-yet/index.js +0 -4
  51. package/dist/node_modules/are-we-there-yet/package.json +0 -63
  52. package/dist/node_modules/are-we-there-yet/tracker-base.js +0 -11
  53. package/dist/node_modules/are-we-there-yet/tracker-group.js +0 -107
  54. package/dist/node_modules/are-we-there-yet/tracker-stream.js +0 -36
  55. package/dist/node_modules/are-we-there-yet/tracker.js +0 -30
  56. package/dist/node_modules/base64-js/LICENSE +0 -21
  57. package/dist/node_modules/base64-js/README.md +0 -34
  58. package/dist/node_modules/base64-js/base64js.min.js +0 -1
  59. package/dist/node_modules/base64-js/index.d.ts +0 -3
  60. package/dist/node_modules/base64-js/index.js +0 -150
  61. package/dist/node_modules/base64-js/package.json +0 -75
  62. package/dist/node_modules/bl/.travis.yml +0 -17
  63. package/dist/node_modules/bl/BufferList.js +0 -396
  64. package/dist/node_modules/bl/LICENSE.md +0 -13
  65. package/dist/node_modules/bl/README.md +0 -247
  66. package/dist/node_modules/bl/bl.js +0 -84
  67. package/dist/node_modules/bl/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  68. package/dist/node_modules/bl/node_modules/readable-stream/GOVERNANCE.md +0 -136
  69. package/dist/node_modules/bl/node_modules/readable-stream/LICENSE +0 -47
  70. package/dist/node_modules/bl/node_modules/readable-stream/README.md +0 -106
  71. package/dist/node_modules/bl/node_modules/readable-stream/errors-browser.js +0 -127
  72. package/dist/node_modules/bl/node_modules/readable-stream/errors.js +0 -116
  73. package/dist/node_modules/bl/node_modules/readable-stream/experimentalWarning.js +0 -17
  74. package/dist/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js +0 -139
  75. package/dist/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js +0 -39
  76. package/dist/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js +0 -1124
  77. package/dist/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js +0 -201
  78. package/dist/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js +0 -697
  79. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -207
  80. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -210
  81. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -105
  82. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -104
  83. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  84. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from.js +0 -64
  85. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -97
  86. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/state.js +0 -27
  87. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  88. package/dist/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  89. package/dist/node_modules/bl/node_modules/readable-stream/package.json +0 -97
  90. package/dist/node_modules/bl/node_modules/readable-stream/readable-browser.js +0 -9
  91. package/dist/node_modules/bl/node_modules/readable-stream/readable.js +0 -16
  92. package/dist/node_modules/bl/package.json +0 -69
  93. package/dist/node_modules/bl/test/convert.js +0 -21
  94. package/dist/node_modules/bl/test/indexOf.js +0 -492
  95. package/dist/node_modules/bl/test/isBufferList.js +0 -32
  96. package/dist/node_modules/bl/test/test.js +0 -869
  97. package/dist/node_modules/buffer/AUTHORS.md +0 -70
  98. package/dist/node_modules/buffer/LICENSE +0 -21
  99. package/dist/node_modules/buffer/README.md +0 -410
  100. package/dist/node_modules/buffer/index.d.ts +0 -186
  101. package/dist/node_modules/buffer/index.js +0 -1817
  102. package/dist/node_modules/buffer/package.json +0 -127
  103. package/dist/node_modules/chownr/LICENSE +0 -15
  104. package/dist/node_modules/chownr/README.md +0 -3
  105. package/dist/node_modules/chownr/chownr.js +0 -167
  106. package/dist/node_modules/chownr/package.json +0 -62
  107. package/dist/node_modules/code-point-at/index.js +0 -32
  108. package/dist/node_modules/code-point-at/license +0 -21
  109. package/dist/node_modules/code-point-at/package.json +0 -70
  110. package/dist/node_modules/code-point-at/readme.md +0 -32
  111. package/dist/node_modules/color/LICENSE +0 -21
  112. package/dist/node_modules/color/README.md +0 -123
  113. package/dist/node_modules/color/index.js +0 -497
  114. package/dist/node_modules/color/package.json +0 -74
  115. package/dist/node_modules/color-convert/CHANGELOG.md +0 -54
  116. package/dist/node_modules/color-convert/LICENSE +0 -21
  117. package/dist/node_modules/color-convert/README.md +0 -68
  118. package/dist/node_modules/color-convert/conversions.js +0 -839
  119. package/dist/node_modules/color-convert/index.js +0 -81
  120. package/dist/node_modules/color-convert/package.json +0 -83
  121. package/dist/node_modules/color-convert/route.js +0 -97
  122. package/dist/node_modules/color-name/LICENSE +0 -8
  123. package/dist/node_modules/color-name/README.md +0 -11
  124. package/dist/node_modules/color-name/index.js +0 -152
  125. package/dist/node_modules/color-name/package.json +0 -57
  126. package/dist/node_modules/color-string/LICENSE +0 -21
  127. package/dist/node_modules/color-string/README.md +0 -62
  128. package/dist/node_modules/color-string/index.js +0 -242
  129. package/dist/node_modules/color-string/package.json +0 -81
  130. package/dist/node_modules/console-control-strings/LICENSE +0 -13
  131. package/dist/node_modules/console-control-strings/README.md +0 -145
  132. package/dist/node_modules/console-control-strings/README.md~ +0 -140
  133. package/dist/node_modules/console-control-strings/index.js +0 -125
  134. package/dist/node_modules/console-control-strings/package.json +0 -61
  135. package/dist/node_modules/core-util-is/LICENSE +0 -19
  136. package/dist/node_modules/core-util-is/README.md +0 -3
  137. package/dist/node_modules/core-util-is/lib/util.js +0 -107
  138. package/dist/node_modules/core-util-is/package.json +0 -68
  139. package/dist/node_modules/decompress-response/index.d.ts +0 -22
  140. package/dist/node_modules/decompress-response/index.js +0 -58
  141. package/dist/node_modules/decompress-response/license +0 -9
  142. package/dist/node_modules/decompress-response/package.json +0 -88
  143. package/dist/node_modules/decompress-response/readme.md +0 -48
  144. package/dist/node_modules/deep-extend/CHANGELOG.md +0 -46
  145. package/dist/node_modules/deep-extend/LICENSE +0 -20
  146. package/dist/node_modules/deep-extend/README.md +0 -91
  147. package/dist/node_modules/deep-extend/index.js +0 -1
  148. package/dist/node_modules/deep-extend/lib/deep-extend.js +0 -150
  149. package/dist/node_modules/deep-extend/package.json +0 -92
  150. package/dist/node_modules/delegates/History.md +0 -22
  151. package/dist/node_modules/delegates/License +0 -20
  152. package/dist/node_modules/delegates/Makefile +0 -8
  153. package/dist/node_modules/delegates/Readme.md +0 -94
  154. package/dist/node_modules/delegates/index.js +0 -121
  155. package/dist/node_modules/delegates/package.json +0 -48
  156. package/dist/node_modules/delegates/test/index.js +0 -94
  157. package/dist/node_modules/detect-libc/LICENSE +0 -201
  158. package/dist/node_modules/detect-libc/README.md +0 -78
  159. package/dist/node_modules/detect-libc/bin/detect-libc.js +0 -18
  160. package/dist/node_modules/detect-libc/lib/detect-libc.js +0 -92
  161. package/dist/node_modules/detect-libc/package.json +0 -70
  162. package/dist/node_modules/end-of-stream/LICENSE +0 -21
  163. package/dist/node_modules/end-of-stream/README.md +0 -54
  164. package/dist/node_modules/end-of-stream/index.js +0 -94
  165. package/dist/node_modules/end-of-stream/package.json +0 -66
  166. package/dist/node_modules/expand-template/.travis.yml +0 -6
  167. package/dist/node_modules/expand-template/LICENSE +0 -21
  168. package/dist/node_modules/expand-template/README.md +0 -43
  169. package/dist/node_modules/expand-template/index.js +0 -26
  170. package/dist/node_modules/expand-template/package.json +0 -60
  171. package/dist/node_modules/expand-template/test.js +0 -67
  172. package/dist/node_modules/fs-constants/LICENSE +0 -21
  173. package/dist/node_modules/fs-constants/README.md +0 -26
  174. package/dist/node_modules/fs-constants/browser.js +0 -1
  175. package/dist/node_modules/fs-constants/index.js +0 -1
  176. package/dist/node_modules/fs-constants/package.json +0 -47
  177. package/dist/node_modules/gauge/CHANGELOG.md +0 -160
  178. package/dist/node_modules/gauge/LICENSE +0 -13
  179. package/dist/node_modules/gauge/README.md +0 -399
  180. package/dist/node_modules/gauge/base-theme.js +0 -14
  181. package/dist/node_modules/gauge/error.js +0 -24
  182. package/dist/node_modules/gauge/has-color.js +0 -12
  183. package/dist/node_modules/gauge/index.js +0 -233
  184. package/dist/node_modules/gauge/package.json +0 -91
  185. package/dist/node_modules/gauge/plumbing.js +0 -48
  186. package/dist/node_modules/gauge/process.js +0 -3
  187. package/dist/node_modules/gauge/progress-bar.js +0 -35
  188. package/dist/node_modules/gauge/render-template.js +0 -181
  189. package/dist/node_modules/gauge/set-immediate.js +0 -7
  190. package/dist/node_modules/gauge/set-interval.js +0 -3
  191. package/dist/node_modules/gauge/spin.js +0 -5
  192. package/dist/node_modules/gauge/template-item.js +0 -73
  193. package/dist/node_modules/gauge/theme-set.js +0 -115
  194. package/dist/node_modules/gauge/themes.js +0 -54
  195. package/dist/node_modules/gauge/wide-truncate.js +0 -25
  196. package/dist/node_modules/github-from-package/.travis.yml +0 -4
  197. package/dist/node_modules/github-from-package/LICENSE +0 -18
  198. package/dist/node_modules/github-from-package/example/package.json +0 -8
  199. package/dist/node_modules/github-from-package/example/url.js +0 -3
  200. package/dist/node_modules/github-from-package/index.js +0 -17
  201. package/dist/node_modules/github-from-package/package.json +0 -58
  202. package/dist/node_modules/github-from-package/readme.markdown +0 -53
  203. package/dist/node_modules/github-from-package/test/a.json +0 -8
  204. package/dist/node_modules/github-from-package/test/b.json +0 -5
  205. package/dist/node_modules/github-from-package/test/c.json +0 -5
  206. package/dist/node_modules/github-from-package/test/d.json +0 -7
  207. package/dist/node_modules/github-from-package/test/e.json +0 -5
  208. package/dist/node_modules/github-from-package/test/url.js +0 -19
  209. package/dist/node_modules/has-unicode/LICENSE +0 -14
  210. package/dist/node_modules/has-unicode/README.md +0 -43
  211. package/dist/node_modules/has-unicode/index.js +0 -16
  212. package/dist/node_modules/has-unicode/package.json +0 -58
  213. package/dist/node_modules/ieee754/LICENSE +0 -11
  214. package/dist/node_modules/ieee754/README.md +0 -51
  215. package/dist/node_modules/ieee754/index.d.ts +0 -10
  216. package/dist/node_modules/ieee754/index.js +0 -85
  217. package/dist/node_modules/ieee754/package.json +0 -84
  218. package/dist/node_modules/inherits/LICENSE +0 -16
  219. package/dist/node_modules/inherits/README.md +0 -42
  220. package/dist/node_modules/inherits/inherits.js +0 -9
  221. package/dist/node_modules/inherits/inherits_browser.js +0 -27
  222. package/dist/node_modules/inherits/package.json +0 -65
  223. package/dist/node_modules/ini/LICENSE +0 -15
  224. package/dist/node_modules/ini/README.md +0 -102
  225. package/dist/node_modules/ini/ini.js +0 -206
  226. package/dist/node_modules/ini/package.json +0 -66
  227. package/dist/node_modules/is-arrayish/LICENSE +0 -21
  228. package/dist/node_modules/is-arrayish/README.md +0 -16
  229. package/dist/node_modules/is-arrayish/index.js +0 -9
  230. package/dist/node_modules/is-arrayish/package.json +0 -77
  231. package/dist/node_modules/is-arrayish/yarn-error.log +0 -1443
  232. package/dist/node_modules/is-fullwidth-code-point/index.js +0 -46
  233. package/dist/node_modules/is-fullwidth-code-point/license +0 -21
  234. package/dist/node_modules/is-fullwidth-code-point/package.json +0 -77
  235. package/dist/node_modules/is-fullwidth-code-point/readme.md +0 -39
  236. package/dist/node_modules/isarray/.travis.yml +0 -4
  237. package/dist/node_modules/isarray/Makefile +0 -6
  238. package/dist/node_modules/isarray/README.md +0 -60
  239. package/dist/node_modules/isarray/component.json +0 -19
  240. package/dist/node_modules/isarray/index.js +0 -5
  241. package/dist/node_modules/isarray/package.json +0 -73
  242. package/dist/node_modules/isarray/test.js +0 -20
  243. package/dist/node_modules/lru-cache/LICENSE +0 -15
  244. package/dist/node_modules/lru-cache/README.md +0 -166
  245. package/dist/node_modules/lru-cache/index.js +0 -334
  246. package/dist/node_modules/lru-cache/package.json +0 -69
  247. package/dist/node_modules/mimic-response/index.d.ts +0 -17
  248. package/dist/node_modules/mimic-response/index.js +0 -77
  249. package/dist/node_modules/mimic-response/license +0 -9
  250. package/dist/node_modules/mimic-response/package.json +0 -74
  251. package/dist/node_modules/mimic-response/readme.md +0 -78
  252. package/dist/node_modules/minimist/.travis.yml +0 -8
  253. package/dist/node_modules/minimist/LICENSE +0 -18
  254. package/dist/node_modules/minimist/example/parse.js +0 -2
  255. package/dist/node_modules/minimist/index.js +0 -245
  256. package/dist/node_modules/minimist/package.json +0 -74
  257. package/dist/node_modules/minimist/readme.markdown +0 -95
  258. package/dist/node_modules/minimist/test/all_bool.js +0 -32
  259. package/dist/node_modules/minimist/test/bool.js +0 -178
  260. package/dist/node_modules/minimist/test/dash.js +0 -31
  261. package/dist/node_modules/minimist/test/default_bool.js +0 -35
  262. package/dist/node_modules/minimist/test/dotted.js +0 -22
  263. package/dist/node_modules/minimist/test/kv_short.js +0 -16
  264. package/dist/node_modules/minimist/test/long.js +0 -31
  265. package/dist/node_modules/minimist/test/num.js +0 -36
  266. package/dist/node_modules/minimist/test/parse.js +0 -197
  267. package/dist/node_modules/minimist/test/parse_modified.js +0 -9
  268. package/dist/node_modules/minimist/test/proto.js +0 -44
  269. package/dist/node_modules/minimist/test/short.js +0 -67
  270. package/dist/node_modules/minimist/test/stop_early.js +0 -15
  271. package/dist/node_modules/minimist/test/unknown.js +0 -102
  272. package/dist/node_modules/minimist/test/whitespace.js +0 -8
  273. package/dist/node_modules/mkdirp-classic/LICENSE +0 -21
  274. package/dist/node_modules/mkdirp-classic/README.md +0 -18
  275. package/dist/node_modules/mkdirp-classic/index.js +0 -98
  276. package/dist/node_modules/mkdirp-classic/package.json +0 -47
  277. package/dist/node_modules/napi-build-utils/LICENSE +0 -21
  278. package/dist/node_modules/napi-build-utils/README.md +0 -48
  279. package/dist/node_modules/napi-build-utils/index.js +0 -213
  280. package/dist/node_modules/napi-build-utils/index.md +0 -81
  281. package/dist/node_modules/napi-build-utils/package.json +0 -68
  282. package/dist/node_modules/node-abi/.circleci/config.yml +0 -63
  283. package/dist/node_modules/node-abi/.github/workflows/update-abi.yml +0 -41
  284. package/dist/node_modules/node-abi/.releaserc.json +0 -9
  285. package/dist/node_modules/node-abi/CODE_OF_CONDUCT.md +0 -73
  286. package/dist/node_modules/node-abi/CONTRIBUTING.md +0 -53
  287. package/dist/node_modules/node-abi/LICENSE +0 -21
  288. package/dist/node_modules/node-abi/README.md +0 -50
  289. package/dist/node_modules/node-abi/abi_registry.json +0 -179
  290. package/dist/node_modules/node-abi/index.js +0 -179
  291. package/dist/node_modules/node-abi/package.json +0 -66
  292. package/dist/node_modules/node-abi/scripts/update-abi-registry.js +0 -119
  293. package/dist/node_modules/node-abi/test/index.js +0 -166
  294. package/dist/node_modules/node-addon-api/LICENSE.md +0 -13
  295. package/dist/node_modules/node-addon-api/README.md +0 -293
  296. package/dist/node_modules/node-addon-api/common.gypi +0 -21
  297. package/dist/node_modules/node-addon-api/except.gypi +0 -25
  298. package/dist/node_modules/node-addon-api/index.js +0 -11
  299. package/dist/node_modules/node-addon-api/napi-inl.deprecated.h +0 -192
  300. package/dist/node_modules/node-addon-api/napi-inl.h +0 -6209
  301. package/dist/node_modules/node-addon-api/napi.h +0 -2983
  302. package/dist/node_modules/node-addon-api/node_api.gyp +0 -9
  303. package/dist/node_modules/node-addon-api/noexcept.gypi +0 -26
  304. package/dist/node_modules/node-addon-api/nothing.c +0 -0
  305. package/dist/node_modules/node-addon-api/package-support.json +0 -21
  306. package/dist/node_modules/node-addon-api/package.json +0 -422
  307. package/dist/node_modules/node-addon-api/tools/README.md +0 -73
  308. package/dist/node_modules/node-addon-api/tools/check-napi.js +0 -100
  309. package/dist/node_modules/node-addon-api/tools/clang-format.js +0 -68
  310. package/dist/node_modules/node-addon-api/tools/conversion.js +0 -309
  311. package/dist/node_modules/node-addon-api/tools/eslint-format.js +0 -71
  312. package/dist/node_modules/npmlog/CHANGELOG.md +0 -49
  313. package/dist/node_modules/npmlog/LICENSE +0 -15
  314. package/dist/node_modules/npmlog/README.md +0 -216
  315. package/dist/node_modules/npmlog/log.js +0 -309
  316. package/dist/node_modules/npmlog/package.json +0 -61
  317. package/dist/node_modules/number-is-nan/index.js +0 -4
  318. package/dist/node_modules/number-is-nan/license +0 -21
  319. package/dist/node_modules/number-is-nan/package.json +0 -67
  320. package/dist/node_modules/number-is-nan/readme.md +0 -28
  321. package/dist/node_modules/object-assign/index.js +0 -90
  322. package/dist/node_modules/object-assign/license +0 -21
  323. package/dist/node_modules/object-assign/package.json +0 -74
  324. package/dist/node_modules/object-assign/readme.md +0 -61
  325. package/dist/node_modules/once/LICENSE +0 -15
  326. package/dist/node_modules/once/README.md +0 -79
  327. package/dist/node_modules/once/once.js +0 -42
  328. package/dist/node_modules/once/package.json +0 -68
  329. package/dist/node_modules/prebuild-install/CHANGELOG.md +0 -98
  330. package/dist/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
  331. package/dist/node_modules/prebuild-install/LICENSE +0 -21
  332. package/dist/node_modules/prebuild-install/README.md +0 -159
  333. package/dist/node_modules/prebuild-install/asset.js +0 -44
  334. package/dist/node_modules/prebuild-install/bin.js +0 -78
  335. package/dist/node_modules/prebuild-install/download.js +0 -142
  336. package/dist/node_modules/prebuild-install/error.js +0 -14
  337. package/dist/node_modules/prebuild-install/help.txt +0 -16
  338. package/dist/node_modules/prebuild-install/index.js +0 -1
  339. package/dist/node_modules/prebuild-install/log.js +0 -25
  340. package/dist/node_modules/prebuild-install/node_modules/detect-libc/LICENSE +0 -201
  341. package/dist/node_modules/prebuild-install/node_modules/detect-libc/README.md +0 -160
  342. package/dist/node_modules/prebuild-install/node_modules/detect-libc/index.d.ts +0 -11
  343. package/dist/node_modules/prebuild-install/node_modules/detect-libc/lib/detect-libc.js +0 -178
  344. package/dist/node_modules/prebuild-install/node_modules/detect-libc/lib/process.js +0 -16
  345. package/dist/node_modules/prebuild-install/node_modules/detect-libc/package.json +0 -71
  346. package/dist/node_modules/prebuild-install/package.json +0 -126
  347. package/dist/node_modules/prebuild-install/proxy.js +0 -35
  348. package/dist/node_modules/prebuild-install/rc.js +0 -60
  349. package/dist/node_modules/prebuild-install/util.js +0 -143
  350. package/dist/node_modules/process-nextick-args/index.js +0 -45
  351. package/dist/node_modules/process-nextick-args/license.md +0 -19
  352. package/dist/node_modules/process-nextick-args/package.json +0 -50
  353. package/dist/node_modules/process-nextick-args/readme.md +0 -18
  354. package/dist/node_modules/pump/.travis.yml +0 -5
  355. package/dist/node_modules/pump/LICENSE +0 -21
  356. package/dist/node_modules/pump/README.md +0 -65
  357. package/dist/node_modules/pump/index.js +0 -82
  358. package/dist/node_modules/pump/package.json +0 -60
  359. package/dist/node_modules/pump/test-browser.js +0 -66
  360. package/dist/node_modules/pump/test-node.js +0 -53
  361. package/dist/node_modules/rc/LICENSE.APACHE2 +0 -15
  362. package/dist/node_modules/rc/LICENSE.BSD +0 -26
  363. package/dist/node_modules/rc/LICENSE.MIT +0 -24
  364. package/dist/node_modules/rc/README.md +0 -227
  365. package/dist/node_modules/rc/browser.js +0 -7
  366. package/dist/node_modules/rc/cli.js +0 -4
  367. package/dist/node_modules/rc/index.js +0 -53
  368. package/dist/node_modules/rc/lib/utils.js +0 -104
  369. package/dist/node_modules/rc/package.json +0 -64
  370. package/dist/node_modules/rc/test/ini.js +0 -16
  371. package/dist/node_modules/rc/test/nested-env-vars.js +0 -50
  372. package/dist/node_modules/rc/test/test.js +0 -59
  373. package/dist/node_modules/readable-stream/.travis.yml +0 -34
  374. package/dist/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  375. package/dist/node_modules/readable-stream/GOVERNANCE.md +0 -136
  376. package/dist/node_modules/readable-stream/LICENSE +0 -47
  377. package/dist/node_modules/readable-stream/README.md +0 -58
  378. package/dist/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  379. package/dist/node_modules/readable-stream/duplex-browser.js +0 -1
  380. package/dist/node_modules/readable-stream/duplex.js +0 -1
  381. package/dist/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  382. package/dist/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  383. package/dist/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  384. package/dist/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  385. package/dist/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  386. package/dist/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  387. package/dist/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  388. package/dist/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  389. package/dist/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  390. package/dist/node_modules/readable-stream/package.json +0 -81
  391. package/dist/node_modules/readable-stream/passthrough.js +0 -1
  392. package/dist/node_modules/readable-stream/readable-browser.js +0 -7
  393. package/dist/node_modules/readable-stream/readable.js +0 -19
  394. package/dist/node_modules/readable-stream/transform.js +0 -1
  395. package/dist/node_modules/readable-stream/writable-browser.js +0 -1
  396. package/dist/node_modules/readable-stream/writable.js +0 -8
  397. package/dist/node_modules/safe-buffer/LICENSE +0 -21
  398. package/dist/node_modules/safe-buffer/README.md +0 -584
  399. package/dist/node_modules/safe-buffer/index.d.ts +0 -187
  400. package/dist/node_modules/safe-buffer/index.js +0 -62
  401. package/dist/node_modules/safe-buffer/package.json +0 -64
  402. package/dist/node_modules/semver/CHANGELOG.md +0 -111
  403. package/dist/node_modules/semver/LICENSE +0 -15
  404. package/dist/node_modules/semver/README.md +0 -566
  405. package/dist/node_modules/semver/bin/semver.js +0 -173
  406. package/dist/node_modules/semver/classes/comparator.js +0 -135
  407. package/dist/node_modules/semver/classes/index.js +0 -5
  408. package/dist/node_modules/semver/classes/range.js +0 -510
  409. package/dist/node_modules/semver/classes/semver.js +0 -287
  410. package/dist/node_modules/semver/functions/clean.js +0 -6
  411. package/dist/node_modules/semver/functions/cmp.js +0 -48
  412. package/dist/node_modules/semver/functions/coerce.js +0 -51
  413. package/dist/node_modules/semver/functions/compare-build.js +0 -7
  414. package/dist/node_modules/semver/functions/compare-loose.js +0 -3
  415. package/dist/node_modules/semver/functions/compare.js +0 -5
  416. package/dist/node_modules/semver/functions/diff.js +0 -23
  417. package/dist/node_modules/semver/functions/eq.js +0 -3
  418. package/dist/node_modules/semver/functions/gt.js +0 -3
  419. package/dist/node_modules/semver/functions/gte.js +0 -3
  420. package/dist/node_modules/semver/functions/inc.js +0 -15
  421. package/dist/node_modules/semver/functions/lt.js +0 -3
  422. package/dist/node_modules/semver/functions/lte.js +0 -3
  423. package/dist/node_modules/semver/functions/major.js +0 -3
  424. package/dist/node_modules/semver/functions/minor.js +0 -3
  425. package/dist/node_modules/semver/functions/neq.js +0 -3
  426. package/dist/node_modules/semver/functions/parse.js +0 -33
  427. package/dist/node_modules/semver/functions/patch.js +0 -3
  428. package/dist/node_modules/semver/functions/prerelease.js +0 -6
  429. package/dist/node_modules/semver/functions/rcompare.js +0 -3
  430. package/dist/node_modules/semver/functions/rsort.js +0 -3
  431. package/dist/node_modules/semver/functions/satisfies.js +0 -10
  432. package/dist/node_modules/semver/functions/sort.js +0 -3
  433. package/dist/node_modules/semver/functions/valid.js +0 -6
  434. package/dist/node_modules/semver/index.js +0 -48
  435. package/dist/node_modules/semver/internal/constants.js +0 -17
  436. package/dist/node_modules/semver/internal/debug.js +0 -9
  437. package/dist/node_modules/semver/internal/identifiers.js +0 -23
  438. package/dist/node_modules/semver/internal/parse-options.js +0 -11
  439. package/dist/node_modules/semver/internal/re.js +0 -182
  440. package/dist/node_modules/semver/package.json +0 -74
  441. package/dist/node_modules/semver/preload.js +0 -2
  442. package/dist/node_modules/semver/range.bnf +0 -16
  443. package/dist/node_modules/semver/ranges/gtr.js +0 -4
  444. package/dist/node_modules/semver/ranges/intersects.js +0 -7
  445. package/dist/node_modules/semver/ranges/ltr.js +0 -4
  446. package/dist/node_modules/semver/ranges/max-satisfying.js +0 -25
  447. package/dist/node_modules/semver/ranges/min-satisfying.js +0 -24
  448. package/dist/node_modules/semver/ranges/min-version.js +0 -60
  449. package/dist/node_modules/semver/ranges/outside.js +0 -80
  450. package/dist/node_modules/semver/ranges/simplify.js +0 -44
  451. package/dist/node_modules/semver/ranges/subset.js +0 -222
  452. package/dist/node_modules/semver/ranges/to-comparators.js +0 -8
  453. package/dist/node_modules/semver/ranges/valid.js +0 -11
  454. package/dist/node_modules/set-blocking/CHANGELOG.md +0 -26
  455. package/dist/node_modules/set-blocking/LICENSE.txt +0 -14
  456. package/dist/node_modules/set-blocking/README.md +0 -31
  457. package/dist/node_modules/set-blocking/index.js +0 -7
  458. package/dist/node_modules/set-blocking/package.json +0 -70
  459. package/dist/node_modules/sharp/LICENSE +0 -191
  460. package/dist/node_modules/sharp/README.md +0 -117
  461. package/dist/node_modules/sharp/binding.gyp +0 -233
  462. package/dist/node_modules/sharp/build/Release/sharp-linux-x64.node +0 -0
  463. package/dist/node_modules/sharp/install/can-compile.js +0 -11
  464. package/dist/node_modules/sharp/install/dll-copy.js +0 -37
  465. package/dist/node_modules/sharp/install/libvips.js +0 -176
  466. package/dist/node_modules/sharp/lib/agent.js +0 -40
  467. package/dist/node_modules/sharp/lib/channel.js +0 -171
  468. package/dist/node_modules/sharp/lib/colour.js +0 -171
  469. package/dist/node_modules/sharp/lib/composite.js +0 -178
  470. package/dist/node_modules/sharp/lib/constructor.js +0 -379
  471. package/dist/node_modules/sharp/lib/index.js +0 -13
  472. package/dist/node_modules/sharp/lib/input.js +0 -471
  473. package/dist/node_modules/sharp/lib/is.js +0 -143
  474. package/dist/node_modules/sharp/lib/libvips.js +0 -108
  475. package/dist/node_modules/sharp/lib/operation.js +0 -671
  476. package/dist/node_modules/sharp/lib/output.js +0 -1166
  477. package/dist/node_modules/sharp/lib/platform.js +0 -25
  478. package/dist/node_modules/sharp/lib/resize.js +0 -454
  479. package/dist/node_modules/sharp/lib/sharp.js +0 -31
  480. package/dist/node_modules/sharp/lib/utility.js +0 -180
  481. package/dist/node_modules/sharp/package.json +0 -436
  482. package/dist/node_modules/sharp/src/common.cc +0 -883
  483. package/dist/node_modules/sharp/src/common.h +0 -328
  484. package/dist/node_modules/sharp/src/libvips/cplusplus/VConnection.cpp +0 -152
  485. package/dist/node_modules/sharp/src/libvips/cplusplus/VError.cpp +0 -50
  486. package/dist/node_modules/sharp/src/libvips/cplusplus/VImage.cpp +0 -1505
  487. package/dist/node_modules/sharp/src/libvips/cplusplus/VInterpolate.cpp +0 -63
  488. package/dist/node_modules/sharp/src/libvips/cplusplus/vips-operators.cpp +0 -3710
  489. package/dist/node_modules/sharp/src/metadata.cc +0 -285
  490. package/dist/node_modules/sharp/src/metadata.h +0 -91
  491. package/dist/node_modules/sharp/src/operations.cc +0 -311
  492. package/dist/node_modules/sharp/src/operations.h +0 -113
  493. package/dist/node_modules/sharp/src/pipeline.cc +0 -1584
  494. package/dist/node_modules/sharp/src/pipeline.h +0 -345
  495. package/dist/node_modules/sharp/src/sharp.cc +0 -52
  496. package/dist/node_modules/sharp/src/stats.cc +0 -193
  497. package/dist/node_modules/sharp/src/stats.h +0 -70
  498. package/dist/node_modules/sharp/src/utilities.cc +0 -243
  499. package/dist/node_modules/sharp/src/utilities.h +0 -29
  500. package/dist/node_modules/sharp/vendor/8.11.3/linux-x64/THIRD-PARTY-NOTICES.md +0 -41
  501. package/dist/node_modules/sharp/vendor/8.11.3/linux-x64/lib/libvips-cpp.so.42 +0 -0
  502. package/dist/node_modules/sharp/vendor/8.11.3/linux-x64/platform.json +0 -1
  503. package/dist/node_modules/sharp/vendor/8.11.3/linux-x64/versions.json +0 -30
  504. package/dist/node_modules/signal-exit/LICENSE.txt +0 -16
  505. package/dist/node_modules/signal-exit/README.md +0 -39
  506. package/dist/node_modules/signal-exit/index.js +0 -200
  507. package/dist/node_modules/signal-exit/package.json +0 -66
  508. package/dist/node_modules/signal-exit/signals.js +0 -53
  509. package/dist/node_modules/simple-concat/.travis.yml +0 -3
  510. package/dist/node_modules/simple-concat/LICENSE +0 -20
  511. package/dist/node_modules/simple-concat/README.md +0 -44
  512. package/dist/node_modules/simple-concat/index.js +0 -15
  513. package/dist/node_modules/simple-concat/package.json +0 -72
  514. package/dist/node_modules/simple-concat/test/basic.js +0 -41
  515. package/dist/node_modules/simple-get/.github/dependabot.yml +0 -15
  516. package/dist/node_modules/simple-get/.github/workflows/ci.yml +0 -23
  517. package/dist/node_modules/simple-get/LICENSE +0 -20
  518. package/dist/node_modules/simple-get/README.md +0 -333
  519. package/dist/node_modules/simple-get/index.js +0 -108
  520. package/dist/node_modules/simple-get/package.json +0 -93
  521. package/dist/node_modules/simple-swizzle/LICENSE +0 -21
  522. package/dist/node_modules/simple-swizzle/README.md +0 -39
  523. package/dist/node_modules/simple-swizzle/index.js +0 -29
  524. package/dist/node_modules/simple-swizzle/package.json +0 -71
  525. package/dist/node_modules/string-width/index.js +0 -37
  526. package/dist/node_modules/string-width/license +0 -21
  527. package/dist/node_modules/string-width/package.json +0 -89
  528. package/dist/node_modules/string-width/readme.md +0 -42
  529. package/dist/node_modules/string_decoder/.travis.yml +0 -50
  530. package/dist/node_modules/string_decoder/LICENSE +0 -48
  531. package/dist/node_modules/string_decoder/README.md +0 -47
  532. package/dist/node_modules/string_decoder/lib/string_decoder.js +0 -296
  533. package/dist/node_modules/string_decoder/package.json +0 -61
  534. package/dist/node_modules/strip-ansi/index.js +0 -6
  535. package/dist/node_modules/strip-ansi/license +0 -21
  536. package/dist/node_modules/strip-ansi/package.json +0 -102
  537. package/dist/node_modules/strip-ansi/readme.md +0 -33
  538. package/dist/node_modules/strip-json-comments/index.js +0 -70
  539. package/dist/node_modules/strip-json-comments/license +0 -21
  540. package/dist/node_modules/strip-json-comments/package.json +0 -74
  541. package/dist/node_modules/strip-json-comments/readme.md +0 -64
  542. package/dist/node_modules/tar-fs/.travis.yml +0 -6
  543. package/dist/node_modules/tar-fs/LICENSE +0 -21
  544. package/dist/node_modules/tar-fs/README.md +0 -165
  545. package/dist/node_modules/tar-fs/index.js +0 -351
  546. package/dist/node_modules/tar-fs/package.json +0 -69
  547. package/dist/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  548. package/dist/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  549. package/dist/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  550. package/dist/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  551. package/dist/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  552. package/dist/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  553. package/dist/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  554. package/dist/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  555. package/dist/node_modules/tar-fs/test/fixtures/e/file +0 -0
  556. package/dist/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  557. package/dist/node_modules/tar-fs/test/index.js +0 -346
  558. package/dist/node_modules/tar-stream/LICENSE +0 -21
  559. package/dist/node_modules/tar-stream/README.md +0 -168
  560. package/dist/node_modules/tar-stream/extract.js +0 -257
  561. package/dist/node_modules/tar-stream/headers.js +0 -295
  562. package/dist/node_modules/tar-stream/index.js +0 -2
  563. package/dist/node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  564. package/dist/node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md +0 -136
  565. package/dist/node_modules/tar-stream/node_modules/readable-stream/LICENSE +0 -47
  566. package/dist/node_modules/tar-stream/node_modules/readable-stream/README.md +0 -106
  567. package/dist/node_modules/tar-stream/node_modules/readable-stream/errors-browser.js +0 -127
  568. package/dist/node_modules/tar-stream/node_modules/readable-stream/errors.js +0 -116
  569. package/dist/node_modules/tar-stream/node_modules/readable-stream/experimentalWarning.js +0 -17
  570. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_duplex.js +0 -139
  571. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_passthrough.js +0 -39
  572. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_readable.js +0 -1124
  573. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_transform.js +0 -201
  574. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_writable.js +0 -697
  575. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -207
  576. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -210
  577. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -105
  578. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -104
  579. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  580. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from.js +0 -64
  581. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -97
  582. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/state.js +0 -27
  583. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  584. package/dist/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  585. package/dist/node_modules/tar-stream/node_modules/readable-stream/package.json +0 -97
  586. package/dist/node_modules/tar-stream/node_modules/readable-stream/readable-browser.js +0 -9
  587. package/dist/node_modules/tar-stream/node_modules/readable-stream/readable.js +0 -16
  588. package/dist/node_modules/tar-stream/pack.js +0 -255
  589. package/dist/node_modules/tar-stream/package.json +0 -90
  590. package/dist/node_modules/tar-stream/sandbox.js +0 -11
  591. package/dist/node_modules/tunnel-agent/LICENSE +0 -55
  592. package/dist/node_modules/tunnel-agent/README.md +0 -4
  593. package/dist/node_modules/tunnel-agent/index.js +0 -244
  594. package/dist/node_modules/tunnel-agent/package.json +0 -56
  595. package/dist/node_modules/util-deprecate/History.md +0 -16
  596. package/dist/node_modules/util-deprecate/LICENSE +0 -24
  597. package/dist/node_modules/util-deprecate/README.md +0 -53
  598. package/dist/node_modules/util-deprecate/browser.js +0 -67
  599. package/dist/node_modules/util-deprecate/node.js +0 -6
  600. package/dist/node_modules/util-deprecate/package.json +0 -58
  601. package/dist/node_modules/wide-align/LICENSE +0 -14
  602. package/dist/node_modules/wide-align/README.md +0 -47
  603. package/dist/node_modules/wide-align/align.js +0 -65
  604. package/dist/node_modules/wide-align/package.json +0 -66
  605. package/dist/node_modules/wrappy/LICENSE +0 -15
  606. package/dist/node_modules/wrappy/README.md +0 -36
  607. package/dist/node_modules/wrappy/package.json +0 -58
  608. package/dist/node_modules/wrappy/wrappy.js +0 -33
  609. package/dist/node_modules/yallist/LICENSE +0 -15
  610. package/dist/node_modules/yallist/README.md +0 -204
  611. package/dist/node_modules/yallist/iterator.js +0 -8
  612. package/dist/node_modules/yallist/package.json +0 -62
  613. package/dist/node_modules/yallist/yallist.js +0 -426
  614. package/dist/package-lock.json +0 -507
  615. package/dist/package.json +0 -63
  616. package/dist/static/expected_tile_2193_153_255_z7.png +0 -0
  617. package/dist/static/expected_tile_NZTM2000Quad_30_33_z6.png +0 -0
  618. package/dist/static/expected_tile_WebMercatorQuad_252_156_z8.png +0 -0
@@ -1,1166 +0,0 @@
1
- 'use strict';
2
-
3
- const path = require('path');
4
- const is = require('./is');
5
- const sharp = require('./sharp');
6
-
7
- const formats = new Map([
8
- ['heic', 'heif'],
9
- ['heif', 'heif'],
10
- ['avif', 'avif'],
11
- ['jpeg', 'jpeg'],
12
- ['jpg', 'jpeg'],
13
- ['png', 'png'],
14
- ['raw', 'raw'],
15
- ['tiff', 'tiff'],
16
- ['tif', 'tiff'],
17
- ['webp', 'webp'],
18
- ['gif', 'gif'],
19
- ['jp2', 'jp2'],
20
- ['jpx', 'jp2'],
21
- ['j2k', 'jp2'],
22
- ['j2c', 'jp2']
23
- ]);
24
-
25
- const errMagickSave = new Error('GIF output requires libvips with support for ImageMagick');
26
- const errJp2Save = new Error('JP2 output requires libvips with support for OpenJPEG');
27
-
28
- /**
29
- * Write output image data to a file.
30
- *
31
- * If an explicit output format is not selected, it will be inferred from the extension,
32
- * with JPEG, PNG, WebP, AVIF, TIFF, DZI, and libvips' V format supported.
33
- * Note that raw pixel data is only supported for buffer output.
34
- *
35
- * By default all metadata will be removed, which includes EXIF-based orientation.
36
- * See {@link withMetadata} for control over this.
37
- *
38
- * The caller is responsible for ensuring directory structures and permissions exist.
39
- *
40
- * A `Promise` is returned when `callback` is not provided.
41
- *
42
- * @example
43
- * sharp(input)
44
- * .toFile('output.png', (err, info) => { ... });
45
- *
46
- * @example
47
- * sharp(input)
48
- * .toFile('output.png')
49
- * .then(info => { ... })
50
- * .catch(err => { ... });
51
- *
52
- * @param {string} fileOut - the path to write the image data to.
53
- * @param {Function} [callback] - called on completion with two arguments `(err, info)`.
54
- * `info` contains the output image `format`, `size` (bytes), `width`, `height`,
55
- * `channels` and `premultiplied` (indicating if premultiplication was used).
56
- * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.
57
- * @returns {Promise<Object>} - when no callback is provided
58
- * @throws {Error} Invalid parameters
59
- */
60
- function toFile (fileOut, callback) {
61
- let err;
62
- if (!is.string(fileOut)) {
63
- err = new Error('Missing output file path');
64
- } else if (is.string(this.options.input.file) && path.resolve(this.options.input.file) === path.resolve(fileOut)) {
65
- err = new Error('Cannot use same file for input and output');
66
- } else if (this.options.formatOut === 'input' && fileOut.toLowerCase().endsWith('.gif') && !this.constructor.format.magick.output.file) {
67
- err = errMagickSave;
68
- }
69
- if (err) {
70
- if (is.fn(callback)) {
71
- callback(err);
72
- } else {
73
- return Promise.reject(err);
74
- }
75
- } else {
76
- this.options.fileOut = fileOut;
77
- return this._pipeline(callback);
78
- }
79
- return this;
80
- }
81
-
82
- /**
83
- * Write output to a Buffer.
84
- * JPEG, PNG, WebP, AVIF, TIFF and raw pixel data output are supported.
85
- *
86
- * If no explicit format is set, the output format will match the input image, except GIF and SVG input which become PNG output.
87
- *
88
- * By default all metadata will be removed, which includes EXIF-based orientation.
89
- * See {@link withMetadata} for control over this.
90
- *
91
- * `callback`, if present, gets three arguments `(err, data, info)` where:
92
- * - `err` is an error, if any.
93
- * - `data` is the output image data.
94
- * - `info` contains the output image `format`, `size` (bytes), `width`, `height`,
95
- * `channels` and `premultiplied` (indicating if premultiplication was used).
96
- * When using a crop strategy also contains `cropOffsetLeft` and `cropOffsetTop`.
97
- *
98
- * A `Promise` is returned when `callback` is not provided.
99
- *
100
- * @example
101
- * sharp(input)
102
- * .toBuffer((err, data, info) => { ... });
103
- *
104
- * @example
105
- * sharp(input)
106
- * .toBuffer()
107
- * .then(data => { ... })
108
- * .catch(err => { ... });
109
- *
110
- * @example
111
- * sharp(input)
112
- * .toBuffer({ resolveWithObject: true })
113
- * .then(({ data, info }) => { ... })
114
- * .catch(err => { ... });
115
- *
116
- * @example
117
- * const { data, info } = await sharp('my-image.jpg')
118
- * // output the raw pixels
119
- * .raw()
120
- * .toBuffer({ resolveWithObject: true });
121
- *
122
- * // create a more type safe way to work with the raw pixel data
123
- * // this will not copy the data, instead it will change `data`s underlying ArrayBuffer
124
- * // so `data` and `pixelArray` point to the same memory location
125
- * const pixelArray = new Uint8ClampedArray(data.buffer);
126
- *
127
- * // When you are done changing the pixelArray, sharp takes the `pixelArray` as an input
128
- * const { width, height, channels } = info;
129
- * await sharp(pixelArray, { raw: { width, height, channels } })
130
- * .toFile('my-changed-image.jpg');
131
- *
132
- * @param {Object} [options]
133
- * @param {boolean} [options.resolveWithObject] Resolve the Promise with an Object containing `data` and `info` properties instead of resolving only with `data`.
134
- * @param {Function} [callback]
135
- * @returns {Promise<Buffer>} - when no callback is provided
136
- */
137
- function toBuffer (options, callback) {
138
- if (is.object(options)) {
139
- this._setBooleanOption('resolveWithObject', options.resolveWithObject);
140
- } else if (this.options.resolveWithObject) {
141
- this.options.resolveWithObject = false;
142
- }
143
- return this._pipeline(is.fn(options) ? options : callback);
144
- }
145
-
146
- /**
147
- * Include all metadata (EXIF, XMP, IPTC) from the input image in the output image.
148
- * This will also convert to and add a web-friendly sRGB ICC profile unless a custom
149
- * output profile is provided.
150
- *
151
- * The default behaviour, when `withMetadata` is not used, is to convert to the device-independent
152
- * sRGB colour space and strip all metadata, including the removal of any ICC profile.
153
- *
154
- * @example
155
- * sharp('input.jpg')
156
- * .withMetadata()
157
- * .toFile('output-with-metadata.jpg')
158
- * .then(info => { ... });
159
- *
160
- * @example
161
- * // Set "IFD0-Copyright" in output EXIF metadata
162
- * const data = await sharp(input)
163
- * .withMetadata({
164
- * exif: {
165
- * IFD0: {
166
- * Copyright: 'Wernham Hogg'
167
- * }
168
- * }
169
- * })
170
- * .toBuffer();
171
- *
172
- * * @example
173
- * // Set output metadata to 96 DPI
174
- * const data = await sharp(input)
175
- * .withMetadata({ density: 96 })
176
- * .toBuffer();
177
- *
178
- * @param {Object} [options]
179
- * @param {number} [options.orientation] value between 1 and 8, used to update the EXIF `Orientation` tag.
180
- * @param {string} [options.icc] filesystem path to output ICC profile, defaults to sRGB.
181
- * @param {Object<Object>} [options.exif={}] Object keyed by IFD0, IFD1 etc. of key/value string pairs to write as EXIF data.
182
- * @param {number} [options.density] Number of pixels per inch (DPI).
183
- * @returns {Sharp}
184
- * @throws {Error} Invalid parameters
185
- */
186
- function withMetadata (options) {
187
- this.options.withMetadata = is.bool(options) ? options : true;
188
- if (is.object(options)) {
189
- if (is.defined(options.orientation)) {
190
- if (is.integer(options.orientation) && is.inRange(options.orientation, 1, 8)) {
191
- this.options.withMetadataOrientation = options.orientation;
192
- } else {
193
- throw is.invalidParameterError('orientation', 'integer between 1 and 8', options.orientation);
194
- }
195
- }
196
- if (is.defined(options.density)) {
197
- if (is.number(options.density) && options.density > 0) {
198
- this.options.withMetadataDensity = options.density;
199
- } else {
200
- throw is.invalidParameterError('density', 'positive number', options.density);
201
- }
202
- }
203
- if (is.defined(options.icc)) {
204
- if (is.string(options.icc)) {
205
- this.options.withMetadataIcc = options.icc;
206
- } else {
207
- throw is.invalidParameterError('icc', 'string filesystem path to ICC profile', options.icc);
208
- }
209
- }
210
- if (is.defined(options.exif)) {
211
- if (is.object(options.exif)) {
212
- for (const [ifd, entries] of Object.entries(options.exif)) {
213
- if (is.object(entries)) {
214
- for (const [k, v] of Object.entries(entries)) {
215
- if (is.string(v)) {
216
- this.options.withMetadataStrs[`exif-${ifd.toLowerCase()}-${k}`] = v;
217
- } else {
218
- throw is.invalidParameterError(`exif.${ifd}.${k}`, 'string', v);
219
- }
220
- }
221
- } else {
222
- throw is.invalidParameterError(`exif.${ifd}`, 'object', entries);
223
- }
224
- }
225
- } else {
226
- throw is.invalidParameterError('exif', 'object', options.exif);
227
- }
228
- }
229
- }
230
- return this;
231
- }
232
-
233
- /**
234
- * Force output to a given format.
235
- *
236
- * @example
237
- * // Convert any input to PNG output
238
- * const data = await sharp(input)
239
- * .toFormat('png')
240
- * .toBuffer();
241
- *
242
- * @param {(string|Object)} format - as a string or an Object with an 'id' attribute
243
- * @param {Object} options - output options
244
- * @returns {Sharp}
245
- * @throws {Error} unsupported format or options
246
- */
247
- function toFormat (format, options) {
248
- const actualFormat = formats.get((is.object(format) && is.string(format.id) ? format.id : format).toLowerCase());
249
- if (!actualFormat) {
250
- throw is.invalidParameterError('format', `one of: ${[...formats.keys()].join(', ')}`, format);
251
- }
252
- return this[actualFormat](options);
253
- }
254
-
255
- /**
256
- * Use these JPEG options for output image.
257
- *
258
- * @example
259
- * // Convert any input to very high quality JPEG output
260
- * const data = await sharp(input)
261
- * .jpeg({
262
- * quality: 100,
263
- * chromaSubsampling: '4:4:4'
264
- * })
265
- * .toBuffer();
266
- *
267
- * @example
268
- * // Use mozjpeg to reduce output JPEG file size (slower)
269
- * const data = await sharp(input)
270
- * .jpeg({ mozjpeg: true })
271
- * .toBuffer();
272
- *
273
- * @param {Object} [options] - output options
274
- * @param {number} [options.quality=80] - quality, integer 1-100
275
- * @param {boolean} [options.progressive=false] - use progressive (interlace) scan
276
- * @param {string} [options.chromaSubsampling='4:2:0'] - set to '4:4:4' to prevent chroma subsampling otherwise defaults to '4:2:0' chroma subsampling
277
- * @param {boolean} [options.optimiseCoding=true] - optimise Huffman coding tables
278
- * @param {boolean} [options.optimizeCoding=true] - alternative spelling of optimiseCoding
279
- * @param {boolean} [options.mozjpeg=false] - use mozjpeg defaults, equivalent to `{ trellisQuantisation: true, overshootDeringing: true, optimiseScans: true, quantisationTable: 3 }`
280
- * @param {boolean} [options.trellisQuantisation=false] - apply trellis quantisation
281
- * @param {boolean} [options.overshootDeringing=false] - apply overshoot deringing
282
- * @param {boolean} [options.optimiseScans=false] - optimise progressive scans, forces progressive
283
- * @param {boolean} [options.optimizeScans=false] - alternative spelling of optimiseScans
284
- * @param {number} [options.quantisationTable=0] - quantization table to use, integer 0-8
285
- * @param {number} [options.quantizationTable=0] - alternative spelling of quantisationTable
286
- * @param {boolean} [options.force=true] - force JPEG output, otherwise attempt to use input format
287
- * @returns {Sharp}
288
- * @throws {Error} Invalid options
289
- */
290
- function jpeg (options) {
291
- if (is.object(options)) {
292
- if (is.defined(options.quality)) {
293
- if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {
294
- this.options.jpegQuality = options.quality;
295
- } else {
296
- throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);
297
- }
298
- }
299
- if (is.defined(options.progressive)) {
300
- this._setBooleanOption('jpegProgressive', options.progressive);
301
- }
302
- if (is.defined(options.chromaSubsampling)) {
303
- if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {
304
- this.options.jpegChromaSubsampling = options.chromaSubsampling;
305
- } else {
306
- throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);
307
- }
308
- }
309
- const optimiseCoding = is.bool(options.optimizeCoding) ? options.optimizeCoding : options.optimiseCoding;
310
- if (is.defined(optimiseCoding)) {
311
- this._setBooleanOption('jpegOptimiseCoding', optimiseCoding);
312
- }
313
- if (is.defined(options.mozjpeg)) {
314
- if (is.bool(options.mozjpeg)) {
315
- if (options.mozjpeg) {
316
- this.options.jpegTrellisQuantisation = true;
317
- this.options.jpegOvershootDeringing = true;
318
- this.options.jpegOptimiseScans = true;
319
- this.options.jpegProgressive = true;
320
- this.options.jpegQuantisationTable = 3;
321
- }
322
- } else {
323
- throw is.invalidParameterError('mozjpeg', 'boolean', options.mozjpeg);
324
- }
325
- }
326
- const trellisQuantisation = is.bool(options.trellisQuantization) ? options.trellisQuantization : options.trellisQuantisation;
327
- if (is.defined(trellisQuantisation)) {
328
- this._setBooleanOption('jpegTrellisQuantisation', trellisQuantisation);
329
- }
330
- if (is.defined(options.overshootDeringing)) {
331
- this._setBooleanOption('jpegOvershootDeringing', options.overshootDeringing);
332
- }
333
- const optimiseScans = is.bool(options.optimizeScans) ? options.optimizeScans : options.optimiseScans;
334
- if (is.defined(optimiseScans)) {
335
- this._setBooleanOption('jpegOptimiseScans', optimiseScans);
336
- if (optimiseScans) {
337
- this.options.jpegProgressive = true;
338
- }
339
- }
340
- const quantisationTable = is.number(options.quantizationTable) ? options.quantizationTable : options.quantisationTable;
341
- if (is.defined(quantisationTable)) {
342
- if (is.integer(quantisationTable) && is.inRange(quantisationTable, 0, 8)) {
343
- this.options.jpegQuantisationTable = quantisationTable;
344
- } else {
345
- throw is.invalidParameterError('quantisationTable', 'integer between 0 and 8', quantisationTable);
346
- }
347
- }
348
- }
349
- return this._updateFormatOut('jpeg', options);
350
- }
351
-
352
- /**
353
- * Use these PNG options for output image.
354
- *
355
- * By default, PNG output is full colour at 8 or 16 bits per pixel.
356
- * Indexed PNG input at 1, 2 or 4 bits per pixel is converted to 8 bits per pixel.
357
- * Set `palette` to `true` for slower, indexed PNG output.
358
- *
359
- * @example
360
- * // Convert any input to full colour PNG output
361
- * const data = await sharp(input)
362
- * .png()
363
- * .toBuffer();
364
- *
365
- * @example
366
- * // Convert any input to indexed PNG output (slower)
367
- * const data = await sharp(input)
368
- * .png({ palette: true })
369
- * .toBuffer();
370
- *
371
- * @param {Object} [options]
372
- * @param {boolean} [options.progressive=false] - use progressive (interlace) scan
373
- * @param {number} [options.compressionLevel=6] - zlib compression level, 0 (fastest, largest) to 9 (slowest, smallest)
374
- * @param {boolean} [options.adaptiveFiltering=false] - use adaptive row filtering
375
- * @param {boolean} [options.palette=false] - quantise to a palette-based image with alpha transparency support
376
- * @param {number} [options.quality=100] - use the lowest number of colours needed to achieve given quality, sets `palette` to `true`
377
- * @param {number} [options.colours=256] - maximum number of palette entries, sets `palette` to `true`
378
- * @param {number} [options.colors=256] - alternative spelling of `options.colours`, sets `palette` to `true`
379
- * @param {number} [options.dither=1.0] - level of Floyd-Steinberg error diffusion, sets `palette` to `true`
380
- * @param {boolean} [options.force=true] - force PNG output, otherwise attempt to use input format
381
- * @returns {Sharp}
382
- * @throws {Error} Invalid options
383
- */
384
- function png (options) {
385
- if (is.object(options)) {
386
- if (is.defined(options.progressive)) {
387
- this._setBooleanOption('pngProgressive', options.progressive);
388
- }
389
- if (is.defined(options.compressionLevel)) {
390
- if (is.integer(options.compressionLevel) && is.inRange(options.compressionLevel, 0, 9)) {
391
- this.options.pngCompressionLevel = options.compressionLevel;
392
- } else {
393
- throw is.invalidParameterError('compressionLevel', 'integer between 0 and 9', options.compressionLevel);
394
- }
395
- }
396
- if (is.defined(options.adaptiveFiltering)) {
397
- this._setBooleanOption('pngAdaptiveFiltering', options.adaptiveFiltering);
398
- }
399
- if (is.defined(options.palette)) {
400
- this._setBooleanOption('pngPalette', options.palette);
401
- } else if (is.defined(options.quality) || is.defined(options.colours || options.colors) || is.defined(options.dither)) {
402
- this._setBooleanOption('pngPalette', true);
403
- }
404
- if (this.options.pngPalette) {
405
- if (is.defined(options.quality)) {
406
- if (is.integer(options.quality) && is.inRange(options.quality, 0, 100)) {
407
- this.options.pngQuality = options.quality;
408
- } else {
409
- throw is.invalidParameterError('quality', 'integer between 0 and 100', options.quality);
410
- }
411
- }
412
- const colours = options.colours || options.colors;
413
- if (is.defined(colours)) {
414
- if (is.integer(colours) && is.inRange(colours, 2, 256)) {
415
- this.options.pngBitdepth = 1 << 31 - Math.clz32(Math.ceil(Math.log2(colours)));
416
- } else {
417
- throw is.invalidParameterError('colours', 'integer between 2 and 256', colours);
418
- }
419
- }
420
- if (is.defined(options.dither)) {
421
- if (is.number(options.dither) && is.inRange(options.dither, 0, 1)) {
422
- this.options.pngDither = options.dither;
423
- } else {
424
- throw is.invalidParameterError('dither', 'number between 0.0 and 1.0', options.dither);
425
- }
426
- }
427
- }
428
- }
429
- return this._updateFormatOut('png', options);
430
- }
431
-
432
- /**
433
- * Use these WebP options for output image.
434
- *
435
- * @example
436
- * // Convert any input to lossless WebP output
437
- * const data = await sharp(input)
438
- * .webp({ lossless: true })
439
- * .toBuffer();
440
- *
441
- * @example
442
- * // Optimise the file size of an animated WebP
443
- * const outputWebp = await sharp(inputWebp, { animated: true })
444
- * .webp({ reductionEffort: 6 })
445
- * .toBuffer();
446
- *
447
- * @param {Object} [options] - output options
448
- * @param {number} [options.quality=80] - quality, integer 1-100
449
- * @param {number} [options.alphaQuality=100] - quality of alpha layer, integer 0-100
450
- * @param {boolean} [options.lossless=false] - use lossless compression mode
451
- * @param {boolean} [options.nearLossless=false] - use near_lossless compression mode
452
- * @param {boolean} [options.smartSubsample=false] - use high quality chroma subsampling
453
- * @param {number} [options.reductionEffort=4] - level of CPU effort to reduce file size, integer 0-6
454
- * @param {number} [options.pageHeight] - page height for animated output
455
- * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation
456
- * @param {number[]} [options.delay] - list of delays between animation frames (in milliseconds)
457
- * @param {boolean} [options.force=true] - force WebP output, otherwise attempt to use input format
458
- * @returns {Sharp}
459
- * @throws {Error} Invalid options
460
- */
461
- function webp (options) {
462
- if (is.object(options) && is.defined(options.quality)) {
463
- if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {
464
- this.options.webpQuality = options.quality;
465
- } else {
466
- throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);
467
- }
468
- }
469
- if (is.object(options) && is.defined(options.alphaQuality)) {
470
- if (is.integer(options.alphaQuality) && is.inRange(options.alphaQuality, 0, 100)) {
471
- this.options.webpAlphaQuality = options.alphaQuality;
472
- } else {
473
- throw is.invalidParameterError('alphaQuality', 'integer between 0 and 100', options.alphaQuality);
474
- }
475
- }
476
- if (is.object(options) && is.defined(options.lossless)) {
477
- this._setBooleanOption('webpLossless', options.lossless);
478
- }
479
- if (is.object(options) && is.defined(options.nearLossless)) {
480
- this._setBooleanOption('webpNearLossless', options.nearLossless);
481
- }
482
- if (is.object(options) && is.defined(options.smartSubsample)) {
483
- this._setBooleanOption('webpSmartSubsample', options.smartSubsample);
484
- }
485
- if (is.object(options) && is.defined(options.reductionEffort)) {
486
- if (is.integer(options.reductionEffort) && is.inRange(options.reductionEffort, 0, 6)) {
487
- this.options.webpReductionEffort = options.reductionEffort;
488
- } else {
489
- throw is.invalidParameterError('reductionEffort', 'integer between 0 and 6', options.reductionEffort);
490
- }
491
- }
492
-
493
- trySetAnimationOptions(options, this.options);
494
- return this._updateFormatOut('webp', options);
495
- }
496
-
497
- /**
498
- * Use these GIF options for output image.
499
- *
500
- * Requires libvips compiled with support for ImageMagick or GraphicsMagick.
501
- * The prebuilt binaries do not include this - see
502
- * {@link https://sharp.pixelplumbing.com/install#custom-libvips installing a custom libvips}.
503
- *
504
- * @param {Object} [options] - output options
505
- * @param {number} [options.pageHeight] - page height for animated output
506
- * @param {number} [options.loop=0] - number of animation iterations, use 0 for infinite animation
507
- * @param {number[]} [options.delay] - list of delays between animation frames (in milliseconds)
508
- * @param {boolean} [options.force=true] - force GIF output, otherwise attempt to use input format
509
- * @returns {Sharp}
510
- * @throws {Error} Invalid options
511
- */
512
- /* istanbul ignore next */
513
- function gif (options) {
514
- if (!this.constructor.format.magick.output.buffer) {
515
- throw errMagickSave;
516
- }
517
- trySetAnimationOptions(options, this.options);
518
- return this._updateFormatOut('gif', options);
519
- }
520
-
521
- /**
522
- * Use these JP2 options for output image.
523
- *
524
- * Requires libvips compiled with support for OpenJPEG.
525
- * The prebuilt binaries do not include this - see
526
- * {@link https://sharp.pixelplumbing.com/install#custom-libvips installing a custom libvips}.
527
- *
528
- * @example
529
- * // Convert any input to lossless JP2 output
530
- * const data = await sharp(input)
531
- * .jp2({ lossless: true })
532
- * .toBuffer();
533
- *
534
- * @example
535
- * // Convert any input to very high quality JP2 output
536
- * const data = await sharp(input)
537
- * .jp2({
538
- * quality: 100,
539
- * chromaSubsampling: '4:4:4'
540
- * })
541
- * .toBuffer();
542
- *
543
- * @since 0.29.1
544
- *
545
- * @param {Object} [options] - output options
546
- * @param {number} [options.quality=80] - quality, integer 1-100
547
- * @param {boolean} [options.lossless=false] - use lossless compression mode
548
- * @param {number} [options.tileWidth=512] - horizontal tile size
549
- * @param {number} [options.tileHeight=512] - vertical tile size
550
- * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
551
- * @returns {Sharp}
552
- * @throws {Error} Invalid options
553
- */
554
- /* istanbul ignore next */
555
- function jp2 (options) {
556
- if (!this.constructor.format.jp2k.output.buffer) {
557
- throw errJp2Save;
558
- }
559
- if (is.object(options)) {
560
- if (is.defined(options.quality)) {
561
- if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {
562
- this.options.jp2Quality = options.quality;
563
- } else {
564
- throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);
565
- }
566
- }
567
- if (is.defined(options.lossless)) {
568
- if (is.bool(options.lossless)) {
569
- this.options.jp2Lossless = options.lossless;
570
- } else {
571
- throw is.invalidParameterError('lossless', 'boolean', options.lossless);
572
- }
573
- }
574
- if (is.defined(options.tileWidth)) {
575
- if (is.integer(options.tileWidth) && is.inRange(options.tileWidth, 1, 32768)) {
576
- this.options.jp2TileWidth = options.tileWidth;
577
- } else {
578
- throw is.invalidParameterError('tileWidth', 'integer between 1 and 32768', options.tileWidth);
579
- }
580
- }
581
- if (is.defined(options.tileHeight)) {
582
- if (is.integer(options.tileHeight) && is.inRange(options.tileHeight, 1, 32768)) {
583
- this.options.jp2TileHeight = options.tileHeight;
584
- } else {
585
- throw is.invalidParameterError('tileHeight', 'integer between 1 and 32768', options.tileHeight);
586
- }
587
- }
588
- if (is.defined(options.chromaSubsampling)) {
589
- if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {
590
- this.options.heifChromaSubsampling = options.chromaSubsampling;
591
- } else {
592
- throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);
593
- }
594
- }
595
- }
596
- return this._updateFormatOut('jp2', options);
597
- }
598
-
599
- /**
600
- * Set animation options if available.
601
- * @private
602
- *
603
- * @param {Object} [source] - output options
604
- * @param {number} [source.pageHeight] - page height for animated output
605
- * @param {number} [source.loop=0] - number of animation iterations, use 0 for infinite animation
606
- * @param {number[]} [source.delay] - list of delays between animation frames (in milliseconds)
607
- * @param {Object} [target] - target object for valid options
608
- * @throws {Error} Invalid options
609
- */
610
- function trySetAnimationOptions (source, target) {
611
- if (is.object(source) && is.defined(source.pageHeight)) {
612
- if (is.integer(source.pageHeight) && source.pageHeight > 0) {
613
- target.pageHeight = source.pageHeight;
614
- } else {
615
- throw is.invalidParameterError('pageHeight', 'integer larger than 0', source.pageHeight);
616
- }
617
- }
618
- if (is.object(source) && is.defined(source.loop)) {
619
- if (is.integer(source.loop) && is.inRange(source.loop, 0, 65535)) {
620
- target.loop = source.loop;
621
- } else {
622
- throw is.invalidParameterError('loop', 'integer between 0 and 65535', source.loop);
623
- }
624
- }
625
- if (is.object(source) && is.defined(source.delay)) {
626
- if (
627
- Array.isArray(source.delay) &&
628
- source.delay.every(is.integer) &&
629
- source.delay.every(v => is.inRange(v, 0, 65535))) {
630
- target.delay = source.delay;
631
- } else {
632
- throw is.invalidParameterError('delay', 'array of integers between 0 and 65535', source.delay);
633
- }
634
- }
635
- }
636
-
637
- /**
638
- * Use these TIFF options for output image.
639
- *
640
- * The `density` can be set in pixels/inch via {@link withMetadata} instead of providing `xres` and `yres` in pixels/mm.
641
- *
642
- * @example
643
- * // Convert SVG input to LZW-compressed, 1 bit per pixel TIFF output
644
- * sharp('input.svg')
645
- * .tiff({
646
- * compression: 'lzw',
647
- * bitdepth: 1
648
- * })
649
- * .toFile('1-bpp-output.tiff')
650
- * .then(info => { ... });
651
- *
652
- * @param {Object} [options] - output options
653
- * @param {number} [options.quality=80] - quality, integer 1-100
654
- * @param {boolean} [options.force=true] - force TIFF output, otherwise attempt to use input format
655
- * @param {string} [options.compression='jpeg'] - compression options: lzw, deflate, jpeg, ccittfax4
656
- * @param {string} [options.predictor='horizontal'] - compression predictor options: none, horizontal, float
657
- * @param {boolean} [options.pyramid=false] - write an image pyramid
658
- * @param {boolean} [options.tile=false] - write a tiled tiff
659
- * @param {number} [options.tileWidth=256] - horizontal tile size
660
- * @param {number} [options.tileHeight=256] - vertical tile size
661
- * @param {number} [options.xres=1.0] - horizontal resolution in pixels/mm
662
- * @param {number} [options.yres=1.0] - vertical resolution in pixels/mm
663
- * @param {number} [options.bitdepth=8] - reduce bitdepth to 1, 2 or 4 bit
664
- * @returns {Sharp}
665
- * @throws {Error} Invalid options
666
- */
667
- function tiff (options) {
668
- if (is.object(options)) {
669
- if (is.defined(options.quality)) {
670
- if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {
671
- this.options.tiffQuality = options.quality;
672
- } else {
673
- throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);
674
- }
675
- }
676
- if (is.defined(options.bitdepth)) {
677
- if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [1, 2, 4, 8])) {
678
- this.options.tiffBitdepth = options.bitdepth;
679
- } else {
680
- throw is.invalidParameterError('bitdepth', '1, 2, 4 or 8', options.bitdepth);
681
- }
682
- }
683
- // tiling
684
- if (is.defined(options.tile)) {
685
- this._setBooleanOption('tiffTile', options.tile);
686
- }
687
- if (is.defined(options.tileWidth)) {
688
- if (is.integer(options.tileWidth) && options.tileWidth > 0) {
689
- this.options.tiffTileWidth = options.tileWidth;
690
- } else {
691
- throw is.invalidParameterError('tileWidth', 'integer greater than zero', options.tileWidth);
692
- }
693
- }
694
- if (is.defined(options.tileHeight)) {
695
- if (is.integer(options.tileHeight) && options.tileHeight > 0) {
696
- this.options.tiffTileHeight = options.tileHeight;
697
- } else {
698
- throw is.invalidParameterError('tileHeight', 'integer greater than zero', options.tileHeight);
699
- }
700
- }
701
- // pyramid
702
- if (is.defined(options.pyramid)) {
703
- this._setBooleanOption('tiffPyramid', options.pyramid);
704
- }
705
- // resolution
706
- if (is.defined(options.xres)) {
707
- if (is.number(options.xres) && options.xres > 0) {
708
- this.options.tiffXres = options.xres;
709
- } else {
710
- throw is.invalidParameterError('xres', 'number greater than zero', options.xres);
711
- }
712
- }
713
- if (is.defined(options.yres)) {
714
- if (is.number(options.yres) && options.yres > 0) {
715
- this.options.tiffYres = options.yres;
716
- } else {
717
- throw is.invalidParameterError('yres', 'number greater than zero', options.yres);
718
- }
719
- }
720
- // compression
721
- if (is.defined(options.compression)) {
722
- if (is.string(options.compression) && is.inArray(options.compression, ['lzw', 'deflate', 'jpeg', 'ccittfax4', 'none'])) {
723
- this.options.tiffCompression = options.compression;
724
- } else {
725
- throw is.invalidParameterError('compression', 'one of: lzw, deflate, jpeg, ccittfax4, none', options.compression);
726
- }
727
- }
728
- // predictor
729
- if (is.defined(options.predictor)) {
730
- if (is.string(options.predictor) && is.inArray(options.predictor, ['none', 'horizontal', 'float'])) {
731
- this.options.tiffPredictor = options.predictor;
732
- } else {
733
- throw is.invalidParameterError('predictor', 'one of: none, horizontal, float', options.predictor);
734
- }
735
- }
736
- }
737
- return this._updateFormatOut('tiff', options);
738
- }
739
-
740
- /**
741
- * Use these AVIF options for output image.
742
- *
743
- * Whilst it is possible to create AVIF images smaller than 16x16 pixels,
744
- * most web browsers do not display these properly.
745
- *
746
- * AVIF image sequences are not supported.
747
- *
748
- * @since 0.27.0
749
- *
750
- * @param {Object} [options] - output options
751
- * @param {number} [options.quality=50] - quality, integer 1-100
752
- * @param {boolean} [options.lossless=false] - use lossless compression
753
- * @param {number} [options.speed=5] - CPU effort vs file size, 0 (slowest/smallest) to 9 (fastest/largest)
754
- * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
755
- * @returns {Sharp}
756
- * @throws {Error} Invalid options
757
- */
758
- function avif (options) {
759
- return this.heif({ ...options, compression: 'av1' });
760
- }
761
-
762
- /**
763
- * Use these HEIF options for output image.
764
- *
765
- * Support for patent-encumbered HEIC images requires the use of a
766
- * globally-installed libvips compiled with support for libheif, libde265 and x265.
767
- *
768
- * @since 0.23.0
769
- *
770
- * @param {Object} [options] - output options
771
- * @param {number} [options.quality=50] - quality, integer 1-100
772
- * @param {string} [options.compression='av1'] - compression format: av1, hevc
773
- * @param {boolean} [options.lossless=false] - use lossless compression
774
- * @param {number} [options.speed=5] - CPU effort vs file size, 0 (slowest/smallest) to 9 (fastest/largest)
775
- * @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
776
- * @returns {Sharp}
777
- * @throws {Error} Invalid options
778
- */
779
- function heif (options) {
780
- if (is.object(options)) {
781
- if (is.defined(options.quality)) {
782
- if (is.integer(options.quality) && is.inRange(options.quality, 1, 100)) {
783
- this.options.heifQuality = options.quality;
784
- } else {
785
- throw is.invalidParameterError('quality', 'integer between 1 and 100', options.quality);
786
- }
787
- }
788
- if (is.defined(options.lossless)) {
789
- if (is.bool(options.lossless)) {
790
- this.options.heifLossless = options.lossless;
791
- } else {
792
- throw is.invalidParameterError('lossless', 'boolean', options.lossless);
793
- }
794
- }
795
- if (is.defined(options.compression)) {
796
- if (is.string(options.compression) && is.inArray(options.compression, ['av1', 'hevc'])) {
797
- this.options.heifCompression = options.compression;
798
- } else {
799
- throw is.invalidParameterError('compression', 'one of: av1, hevc', options.compression);
800
- }
801
- }
802
- if (is.defined(options.speed)) {
803
- if (is.integer(options.speed) && is.inRange(options.speed, 0, 9)) {
804
- this.options.heifSpeed = options.speed;
805
- } else {
806
- throw is.invalidParameterError('speed', 'integer between 0 and 9', options.speed);
807
- }
808
- }
809
- if (is.defined(options.chromaSubsampling)) {
810
- if (is.string(options.chromaSubsampling) && is.inArray(options.chromaSubsampling, ['4:2:0', '4:4:4'])) {
811
- this.options.heifChromaSubsampling = options.chromaSubsampling;
812
- } else {
813
- throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);
814
- }
815
- }
816
- }
817
- return this._updateFormatOut('heif', options);
818
- }
819
-
820
- /**
821
- * Force output to be raw, uncompressed pixel data.
822
- * Pixel ordering is left-to-right, top-to-bottom, without padding.
823
- * Channel ordering will be RGB or RGBA for non-greyscale colourspaces.
824
- *
825
- * @example
826
- * // Extract raw, unsigned 8-bit RGB pixel data from JPEG input
827
- * const { data, info } = await sharp('input.jpg')
828
- * .raw()
829
- * .toBuffer({ resolveWithObject: true });
830
- *
831
- * @example
832
- * // Extract alpha channel as raw, unsigned 16-bit pixel data from PNG input
833
- * const data = await sharp('input.png')
834
- * .ensureAlpha()
835
- * .extractChannel(3)
836
- * .toColourspace('b-w')
837
- * .raw({ depth: 'ushort' })
838
- * .toBuffer();
839
- *
840
- * @param {Object} [options] - output options
841
- * @param {string} [options.depth='uchar'] - bit depth, one of: char, uchar (default), short, ushort, int, uint, float, complex, double, dpcomplex
842
- * @throws {Error} Invalid options
843
- */
844
- function raw (options) {
845
- if (is.object(options)) {
846
- if (is.defined(options.depth)) {
847
- if (is.string(options.depth) && is.inArray(options.depth,
848
- ['char', 'uchar', 'short', 'ushort', 'int', 'uint', 'float', 'complex', 'double', 'dpcomplex']
849
- )) {
850
- this.options.rawDepth = options.depth;
851
- } else {
852
- throw is.invalidParameterError('depth', 'one of: char, uchar, short, ushort, int, uint, float, complex, double, dpcomplex', options.depth);
853
- }
854
- }
855
- }
856
- return this._updateFormatOut('raw');
857
- }
858
-
859
- /**
860
- * Use tile-based deep zoom (image pyramid) output.
861
- * Set the format and options for tile images via the `toFormat`, `jpeg`, `png` or `webp` functions.
862
- * Use a `.zip` or `.szi` file extension with `toFile` to write to a compressed archive file format.
863
- *
864
- * Warning: multiple sharp instances concurrently producing tile output can expose a possible race condition in some versions of libgsf.
865
- *
866
- * @example
867
- * sharp('input.tiff')
868
- * .png()
869
- * .tile({
870
- * size: 512
871
- * })
872
- * .toFile('output.dz', function(err, info) {
873
- * // output.dzi is the Deep Zoom XML definition
874
- * // output_files contains 512x512 tiles grouped by zoom level
875
- * });
876
- *
877
- * @param {Object} [options]
878
- * @param {number} [options.size=256] tile size in pixels, a value between 1 and 8192.
879
- * @param {number} [options.overlap=0] tile overlap in pixels, a value between 0 and 8192.
880
- * @param {number} [options.angle=0] tile angle of rotation, must be a multiple of 90.
881
- * @param {string|Object} [options.background={r: 255, g: 255, b: 255, alpha: 1}] - background colour, parsed by the [color](https://www.npmjs.org/package/color) module, defaults to white without transparency.
882
- * @param {string} [options.depth] how deep to make the pyramid, possible values are `onepixel`, `onetile` or `one`, default based on layout.
883
- * @param {number} [options.skipBlanks=-1] threshold to skip tile generation, a value 0 - 255 for 8-bit images or 0 - 65535 for 16-bit images
884
- * @param {string} [options.container='fs'] tile container, with value `fs` (filesystem) or `zip` (compressed file).
885
- * @param {string} [options.layout='dz'] filesystem layout, possible values are `dz`, `iiif`, `zoomify` or `google`.
886
- * @param {boolean} [options.centre=false] centre image in tile.
887
- * @param {boolean} [options.center=false] alternative spelling of centre.
888
- * @param {string} [options.id='https://example.com/iiif'] when `layout` is `iiif`, sets the `@id` attribute of `info.json`
889
- * @returns {Sharp}
890
- * @throws {Error} Invalid parameters
891
- */
892
- function tile (options) {
893
- if (is.object(options)) {
894
- // Size of square tiles, in pixels
895
- if (is.defined(options.size)) {
896
- if (is.integer(options.size) && is.inRange(options.size, 1, 8192)) {
897
- this.options.tileSize = options.size;
898
- } else {
899
- throw is.invalidParameterError('size', 'integer between 1 and 8192', options.size);
900
- }
901
- }
902
- // Overlap of tiles, in pixels
903
- if (is.defined(options.overlap)) {
904
- if (is.integer(options.overlap) && is.inRange(options.overlap, 0, 8192)) {
905
- if (options.overlap > this.options.tileSize) {
906
- throw is.invalidParameterError('overlap', `<= size (${this.options.tileSize})`, options.overlap);
907
- }
908
- this.options.tileOverlap = options.overlap;
909
- } else {
910
- throw is.invalidParameterError('overlap', 'integer between 0 and 8192', options.overlap);
911
- }
912
- }
913
- // Container
914
- if (is.defined(options.container)) {
915
- if (is.string(options.container) && is.inArray(options.container, ['fs', 'zip'])) {
916
- this.options.tileContainer = options.container;
917
- } else {
918
- throw is.invalidParameterError('container', 'one of: fs, zip', options.container);
919
- }
920
- }
921
- // Layout
922
- if (is.defined(options.layout)) {
923
- if (is.string(options.layout) && is.inArray(options.layout, ['dz', 'google', 'iiif', 'zoomify'])) {
924
- this.options.tileLayout = options.layout;
925
- } else {
926
- throw is.invalidParameterError('layout', 'one of: dz, google, iiif, zoomify', options.layout);
927
- }
928
- }
929
- // Angle of rotation,
930
- if (is.defined(options.angle)) {
931
- if (is.integer(options.angle) && !(options.angle % 90)) {
932
- this.options.tileAngle = options.angle;
933
- } else {
934
- throw is.invalidParameterError('angle', 'positive/negative multiple of 90', options.angle);
935
- }
936
- }
937
- // Background colour
938
- this._setBackgroundColourOption('tileBackground', options.background);
939
- // Depth of tiles
940
- if (is.defined(options.depth)) {
941
- if (is.string(options.depth) && is.inArray(options.depth, ['onepixel', 'onetile', 'one'])) {
942
- this.options.tileDepth = options.depth;
943
- } else {
944
- throw is.invalidParameterError('depth', 'one of: onepixel, onetile, one', options.depth);
945
- }
946
- }
947
- // Threshold to skip blank tiles
948
- if (is.defined(options.skipBlanks)) {
949
- if (is.integer(options.skipBlanks) && is.inRange(options.skipBlanks, -1, 65535)) {
950
- this.options.tileSkipBlanks = options.skipBlanks;
951
- } else {
952
- throw is.invalidParameterError('skipBlanks', 'integer between -1 and 255/65535', options.skipBlanks);
953
- }
954
- } else if (is.defined(options.layout) && options.layout === 'google') {
955
- this.options.tileSkipBlanks = 5;
956
- }
957
- // Center image in tile
958
- const centre = is.bool(options.center) ? options.center : options.centre;
959
- if (is.defined(centre)) {
960
- this._setBooleanOption('tileCentre', centre);
961
- }
962
- // @id attribute for IIIF layout
963
- if (is.defined(options.id)) {
964
- if (is.string(options.id)) {
965
- this.options.tileId = options.id;
966
- } else {
967
- throw is.invalidParameterError('id', 'string', options.id);
968
- }
969
- }
970
- }
971
- // Format
972
- if (is.inArray(this.options.formatOut, ['jpeg', 'png', 'webp'])) {
973
- this.options.tileFormat = this.options.formatOut;
974
- } else if (this.options.formatOut !== 'input') {
975
- throw is.invalidParameterError('format', 'one of: jpeg, png, webp', this.options.formatOut);
976
- }
977
- return this._updateFormatOut('dz');
978
- }
979
-
980
- /**
981
- * Set a timeout for processing, in seconds.
982
- * Use a value of zero to continue processing indefinitely, the default behaviour.
983
- *
984
- * The clock starts when libvips opens an input image for processing.
985
- * Time spent waiting for a libuv thread to become available is not included.
986
- *
987
- * @since 0.29.2
988
- *
989
- * @param {Object} options
990
- * @param {number} options.seconds - Number of seconds after which processing will be stopped
991
- * @returns {Sharp}
992
- */
993
- function timeout (options) {
994
- if (!is.plainObject(options)) {
995
- throw is.invalidParameterError('options', 'object', options);
996
- }
997
- if (is.integer(options.seconds) && is.inRange(options.seconds, 0, 3600)) {
998
- this.options.timeoutSeconds = options.seconds;
999
- } else {
1000
- throw is.invalidParameterError('seconds', 'integer between 0 and 3600', options.seconds);
1001
- }
1002
- return this;
1003
- }
1004
-
1005
- /**
1006
- * Update the output format unless options.force is false,
1007
- * in which case revert to input format.
1008
- * @private
1009
- * @param {string} formatOut
1010
- * @param {Object} [options]
1011
- * @param {boolean} [options.force=true] - force output format, otherwise attempt to use input format
1012
- * @returns {Sharp}
1013
- */
1014
- function _updateFormatOut (formatOut, options) {
1015
- if (!(is.object(options) && options.force === false)) {
1016
- this.options.formatOut = formatOut;
1017
- }
1018
- return this;
1019
- }
1020
-
1021
- /**
1022
- * Update a boolean attribute of the this.options Object.
1023
- * @private
1024
- * @param {string} key
1025
- * @param {boolean} val
1026
- * @throws {Error} Invalid key
1027
- */
1028
- function _setBooleanOption (key, val) {
1029
- if (is.bool(val)) {
1030
- this.options[key] = val;
1031
- } else {
1032
- throw is.invalidParameterError(key, 'boolean', val);
1033
- }
1034
- }
1035
-
1036
- /**
1037
- * Called by a WriteableStream to notify us it is ready for data.
1038
- * @private
1039
- */
1040
- function _read () {
1041
- /* istanbul ignore else */
1042
- if (!this.options.streamOut) {
1043
- this.options.streamOut = true;
1044
- this._pipeline();
1045
- }
1046
- }
1047
-
1048
- /**
1049
- * Invoke the C++ image processing pipeline
1050
- * Supports callback, stream and promise variants
1051
- * @private
1052
- */
1053
- function _pipeline (callback) {
1054
- if (typeof callback === 'function') {
1055
- // output=file/buffer
1056
- if (this._isStreamInput()) {
1057
- // output=file/buffer, input=stream
1058
- this.on('finish', () => {
1059
- this._flattenBufferIn();
1060
- sharp.pipeline(this.options, callback);
1061
- });
1062
- } else {
1063
- // output=file/buffer, input=file/buffer
1064
- sharp.pipeline(this.options, callback);
1065
- }
1066
- return this;
1067
- } else if (this.options.streamOut) {
1068
- // output=stream
1069
- if (this._isStreamInput()) {
1070
- // output=stream, input=stream
1071
- this.once('finish', () => {
1072
- this._flattenBufferIn();
1073
- sharp.pipeline(this.options, (err, data, info) => {
1074
- if (err) {
1075
- this.emit('error', err);
1076
- } else {
1077
- this.emit('info', info);
1078
- this.push(data);
1079
- }
1080
- this.push(null);
1081
- });
1082
- });
1083
- if (this.streamInFinished) {
1084
- this.emit('finish');
1085
- }
1086
- } else {
1087
- // output=stream, input=file/buffer
1088
- sharp.pipeline(this.options, (err, data, info) => {
1089
- if (err) {
1090
- this.emit('error', err);
1091
- } else {
1092
- this.emit('info', info);
1093
- this.push(data);
1094
- }
1095
- this.push(null);
1096
- });
1097
- }
1098
- return this;
1099
- } else {
1100
- // output=promise
1101
- if (this._isStreamInput()) {
1102
- // output=promise, input=stream
1103
- return new Promise((resolve, reject) => {
1104
- this.once('finish', () => {
1105
- this._flattenBufferIn();
1106
- sharp.pipeline(this.options, (err, data, info) => {
1107
- if (err) {
1108
- reject(err);
1109
- } else {
1110
- if (this.options.resolveWithObject) {
1111
- resolve({ data, info });
1112
- } else {
1113
- resolve(data);
1114
- }
1115
- }
1116
- });
1117
- });
1118
- });
1119
- } else {
1120
- // output=promise, input=file/buffer
1121
- return new Promise((resolve, reject) => {
1122
- sharp.pipeline(this.options, (err, data, info) => {
1123
- if (err) {
1124
- reject(err);
1125
- } else {
1126
- if (this.options.resolveWithObject) {
1127
- resolve({ data: data, info: info });
1128
- } else {
1129
- resolve(data);
1130
- }
1131
- }
1132
- });
1133
- });
1134
- }
1135
- }
1136
- }
1137
-
1138
- /**
1139
- * Decorate the Sharp prototype with output-related functions.
1140
- * @private
1141
- */
1142
- module.exports = function (Sharp) {
1143
- Object.assign(Sharp.prototype, {
1144
- // Public
1145
- toFile,
1146
- toBuffer,
1147
- withMetadata,
1148
- toFormat,
1149
- jpeg,
1150
- jp2,
1151
- png,
1152
- webp,
1153
- tiff,
1154
- avif,
1155
- heif,
1156
- gif,
1157
- raw,
1158
- tile,
1159
- timeout,
1160
- // Private
1161
- _updateFormatOut,
1162
- _setBooleanOption,
1163
- _read,
1164
- _pipeline
1165
- });
1166
- };