123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 'use strict';
- const events = require('events');
- const is = require('./is');
- const sharp = require('../build/Release/sharp.node');
- /**
- * An Object containing nested boolean values representing the available input and output formats/methods.
- * @member
- * @example
- * console.log(sharp.format);
- * @returns {Object}
- */
- const format = sharp.format();
- /**
- * An Object containing the version numbers of libvips and its dependencies.
- * @member
- * @example
- * console.log(sharp.versions);
- */
- let versions = {
- vips: sharp.libvipsVersion()
- };
- try {
- versions = require('../vendor/versions.json');
- } catch (err) {}
- /**
- * Gets or, when options are provided, sets the limits of _libvips'_ operation cache.
- * Existing entries in the cache will be trimmed after any change in limits.
- * This method always returns cache statistics,
- * useful for determining how much working memory is required for a particular task.
- *
- * @example
- * const stats = sharp.cache();
- * @example
- * sharp.cache( { items: 200 } );
- * sharp.cache( { files: 0 } );
- * sharp.cache(false);
- *
- * @param {Object|boolean} [options=true] - Object with the following attributes, or boolean where true uses default cache settings and false removes all caching
- * @param {number} [options.memory=50] - is the maximum memory in MB to use for this cache
- * @param {number} [options.files=20] - is the maximum number of files to hold open
- * @param {number} [options.items=100] - is the maximum number of operations to cache
- * @returns {Object}
- */
- function cache (options) {
- if (is.bool(options)) {
- if (options) {
- // Default cache settings of 50MB, 20 files, 100 items
- return sharp.cache(50, 20, 100);
- } else {
- return sharp.cache(0, 0, 0);
- }
- } else if (is.object(options)) {
- return sharp.cache(options.memory, options.files, options.items);
- } else {
- return sharp.cache();
- }
- }
- cache(true);
- /**
- * Gets or, when a concurrency is provided, sets
- * the number of threads _libvips'_ should create to process each image.
- * The default value is the number of CPU cores.
- * A value of `0` will reset to this default.
- *
- * The maximum number of images that can be processed in parallel
- * is limited by libuv's `UV_THREADPOOL_SIZE` environment variable.
- *
- * This method always returns the current concurrency.
- *
- * @example
- * const threads = sharp.concurrency(); // 4
- * sharp.concurrency(2); // 2
- * sharp.concurrency(0); // 4
- *
- * @param {number} [concurrency]
- * @returns {number} concurrency
- */
- function concurrency (concurrency) {
- return sharp.concurrency(is.integer(concurrency) ? concurrency : null);
- }
- /**
- * An EventEmitter that emits a `change` event when a task is either:
- * - queued, waiting for _libuv_ to provide a worker thread
- * - complete
- * @member
- * @example
- * sharp.queue.on('change', function(queueLength) {
- * console.log('Queue contains ' + queueLength + ' task(s)');
- * });
- */
- const queue = new events.EventEmitter();
- /**
- * Provides access to internal task counters.
- * - queue is the number of tasks this module has queued waiting for _libuv_ to provide a worker thread from its pool.
- * - process is the number of resize tasks currently being processed.
- *
- * @example
- * const counters = sharp.counters(); // { queue: 2, process: 4 }
- *
- * @returns {Object}
- */
- function counters () {
- return sharp.counters();
- }
- /**
- * Get and set use of SIMD vector unit instructions.
- * Requires libvips to have been compiled with liborc support.
- *
- * Improves the performance of `resize`, `blur` and `sharpen` operations
- * by taking advantage of the SIMD vector unit of the CPU, e.g. Intel SSE and ARM NEON.
- *
- * @example
- * const simd = sharp.simd();
- * // simd is `true` if the runtime use of liborc is currently enabled
- * @example
- * const simd = sharp.simd(false);
- * // prevent libvips from using liborc at runtime
- *
- * @param {boolean} [simd=true]
- * @returns {boolean}
- */
- function simd (simd) {
- return sharp.simd(is.bool(simd) ? simd : null);
- }
- simd(true);
- /**
- * Decorate the Sharp class with utility-related functions.
- * @private
- */
- module.exports = function (Sharp) {
- [
- cache,
- concurrency,
- counters,
- simd
- ].forEach(function (f) {
- Sharp[f.name] = f;
- });
- Sharp.format = format;
- Sharp.versions = versions;
- Sharp.queue = queue;
- };
|