Mercateo/serverless-image-processor

View on GitHub
src/pipes/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { SharpInstance } from 'sharp';
import { pipe } from 'ramda';
import { InputQueryParams } from '../QueryParams';
import { manipulate } from './manipulation';
import { convert } from './conversion';

export type SupportedInputMime = 'image/jpeg' | 'image/gif' | 'image/png';

export type SupportedOutputMime = 'image/jpeg' | 'image/webp' | 'image/png';

export type PipeOutput = {
  transformer: SharpInstance;
  mime: SupportedOutputMime;
};

export function isSupportedInputMime(
  mime: string | null
): mime is SupportedInputMime {
  return ['image/jpeg', 'image/gif', 'image/png'].some(x => x === mime);
}

export const createPipe = (
  queryParams: InputQueryParams,
  inputMime: SupportedInputMime,
  inputTransformer: SharpInstance
): PipeOutput =>
  pipe(
    manipulate(queryParams),
    convert(queryParams, inputMime)
  )(inputTransformer);