Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
/* eslint-disable no-console, prefer-arrow-callback, prefer-rest-params */
const { existsSync } = require('fs')
const { resolve } = require('path')
const { moveSync } = require('fs-extra')
const sharp = require('sharp')
const { noop } = require('lodash')
const { getBrowserData } = require('../shared')
sharp.concurrency(1)
function isValid(
assert,
screenshot,
filename,
baseline,
sessionId,
browserName,
callback = noop
) {
if (screenshot.status !== 0) {
console.log('Error saving screenshot...', screenshot)
callback(false)
}
assert.compareScreenshot(filename, baseline, browserName, result => {
callback(!!result)
// Strict mode.
'use strict'
// Package modules.
const sharp = require('sharp')
const sinon = require('sinon')
// Configure.
const methods = Object.getOwnPropertyNames(sharp.prototype)
// Patch methods, add reset and restore handlers.
methods.forEach((name) => sinon.spy(sharp.prototype, name))
sharp.prototype.reset = () => {
methods.forEach((name) => sharp.prototype[name].resetHistory())
}
sharp.prototype.restore = () => {
methods.forEach((name) => sharp.prototype[name].restore())
}
// Exports.
module.exports = sharp
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
// Strict mode.
'use strict'
// Package modules.
const sharp = require('sharp')
const sinon = require('sinon')
// Configure.
const methods = Object.getOwnPropertyNames(sharp.prototype)
// Patch methods, add reset and restore handlers.
methods.forEach((name) => sinon.spy(sharp.prototype, name))
sharp.prototype.reset = () => {
methods.forEach((name) => sharp.prototype[name].resetHistory())
}
sharp.prototype.restore = () => {
methods.forEach((name) => sharp.prototype[name].restore())
}
// Exports.
module.exports = sharp
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
// Strict mode.
'use strict'
// Package modules.
const sharp = require('sharp')
const sinon = require('sinon')
// Configure.
const methods = Object.getOwnPropertyNames(sharp.prototype)
// Patch methods, add reset and restore handlers.
methods.forEach((name) => sinon.spy(sharp.prototype, name))
sharp.prototype.reset = () => {
methods.forEach((name) => sharp.prototype[name].resetHistory())
}
sharp.prototype.restore = () => {
methods.forEach((name) => sharp.prototype[name].restore())
}
// Exports.
module.exports = sharp
const gl = createGLContext(WIDTH_S, HEIGHT_S)
if (!gl) {
console.error('Unable to create GL context')
process.exit(1)
}
const blendData = JSON.parse(result.result[0])
const timePiece = time(blendData, gl)
const gif = new GifEncoder(WIDTH, HEIGHT, {highWaterMark: 1024 * 1024})
gif.pipe(fs.createWriteStream(outPath))
gif.setRepeat(0)
gif.writeHeader()
sharp.cache(false) // Reduce memory usage
const totalFrames = 2 * FRAMES - 1
for (let i = 0; i < totalFrames; i++) {
// Render frame
const y = i < FRAMES ? i / FRAMES : 2 - i / FRAMES
timePiece.renderFrame(.5, y)
// Get frame data
let pixels = new Uint8Array(WIDTH_S * HEIGHT_S * 4)
gl.readPixels(0, 0, WIDTH_S, HEIGHT_S, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
// Resize and flip (otherwise gifs come out upside-down!?)
let framePixels = await sharp(Buffer.from(pixels.buffer), {
raw: {
width: WIDTH_S,
height: HEIGHT_S,
const sharp = require('sharp');
const path = require('path');
const fs = require('fs-extra');
const Export = require(path.join(__dirname, 'export.js'));
const imagemin = require('imagemin');
const pngquant = require('imagemin-pngquant');
const mozjpeg = require('imagemin-mozjpeg');
const cluster = require('cluster');
let debug; try { debug = require('debug')('RIBworker:' + cluster.worker.id) } catch (err) { debug = () => {} };
let config;
let uncompressed_bytes = 0;
let compressed_bytes = 0;
let raw_bytes = 0;
sharp.concurrency(1); // Only permit one thread
process.on('message', async function (packet) {
if (packet.code === 'EXIT') {
// Send worker stats and exit
process.send({code: 'SUM', data: {uncompressed_bytes: uncompressed_bytes, compressed_bytes: compressed_bytes, raw_bytes: raw_bytes}});
process.exit(0);
} else if (packet.code === 'SETUP') {
config = packet.data;
} else if (packet.code === 'ACCEL') {
sharp.concurrency(config.max_threads); // Speed up the end, as there are fewer cores
} else if (packet.code === 'TASK') {
let result;
process.on('message', async function (packet) {
if (packet.code === 'EXIT') {
// Send worker stats and exit
process.send({code: 'SUM', data: {uncompressed_bytes: uncompressed_bytes, compressed_bytes: compressed_bytes, raw_bytes: raw_bytes}});
process.exit(0);
} else if (packet.code === 'SETUP') {
config = packet.data;
} else if (packet.code === 'ACCEL') {
sharp.concurrency(config.max_threads); // Speed up the end, as there are fewer cores
} else if (packet.code === 'TASK') {
let result;
if (!config) {
result = {code: 'NOPT', data: packet.data};
} else {
try {
exp = await process_image(packet.data, config);
result = { code: 'OK', data: exp };
} catch (err) {
if (err instanceof Error) err = new_error(err);
result = {code: 'ERROR', data: packet.data, error: err};
const image = sharp();
source.on('error', err => next(err));
image.on('error', err => source.emit('error', err));
image.on('finish', () => fs.unlink(req.tempfile, () => {})); // eslint-disable-line no-empty-function
// Convert to JPEG? GIFs become still-frames
const convertToJPEG = (
(config.convertGIF && type.mime === 'image/gif') ||
(config.convertPNG && type.mime === 'image/png')
);
if (mimetype !== 'image/jpeg' && convertToJPEG) {
mimetype = 'image/jpeg';
image.background({ r: 0, g: 0, b: 0, alpha: 0 });
image.flatten();
image.toFormat(sharp.format.jpeg);
}
// Respect EXIF orientation headers
if (mimetype === 'image/jpeg') {
image.rotate();
}
// Apply recipe
recipe.process(image, Object.freeze(Object.assign({}, req.params, {
query: req.query,
path: req.path,
originalUrl: req.originalUrl,
})));
// Always apply compression at the end
if (mimetype === 'image/jpeg') {
s.metadata(Meteor.bindEnvironment((err, metadata) => {
if (!metadata) {
metadata = {};
}
s.toFormat(sharp.format.jpeg)
.resize(Math.min(height || 0, metadata.width || Infinity), Math.min(height || 0, metadata.height || Infinity))
.pipe(sharp()
.resize(height, height)
.background('#FFFFFF')
.embed()
)
// Use buffer to get the result in memory then replace the existing file
// There is no option to override a file using this library
.toBuffer()
.then(Meteor.bindEnvironment((outputBuffer) => {
fs.writeFile(tempFilePath, outputBuffer, Meteor.bindEnvironment((err) => {
if (err != null) {
console.error(err);
}
const { size } = fs.lstatSync(tempFilePath);
this.getCollection().direct.update({ _id: file._id }, { $set: { size } });
gif.writeHeader()
sharp.cache(false) // Reduce memory usage
const totalFrames = 2 * FRAMES - 1
for (let i = 0; i < totalFrames; i++) {
// Render frame
const y = i < FRAMES ? i / FRAMES : 2 - i / FRAMES
timePiece.renderFrame(.5, y)
// Get frame data
let pixels = new Uint8Array(WIDTH_S * HEIGHT_S * 4)
gl.readPixels(0, 0, WIDTH_S, HEIGHT_S, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
// Resize and flip (otherwise gifs come out upside-down!?)
let framePixels = await sharp(Buffer.from(pixels.buffer), {
raw: {
width: WIDTH_S,
height: HEIGHT_S,
channels: 4,
}
})
.resize(WIDTH, HEIGHT)
.flip()
.toBuffer()
// Add to GIF (slow!)
gif.setDelay(i === 0 ? PAUSE : DURATION / FRAMES)
gif.addFrame(framePixels)
// This seems to help keep memory usage down.
pixels = null