mattdesl / gifenc

fast GIF encoding
MIT License
277 stars 19 forks source link

Add type definitions for TypeScript #10

Closed SirPepe closed 3 years ago

mattdesl commented 3 years ago

Thanks !

SirPepe commented 2 years ago

How about a new release to npm with the types included? :)

laughinghan commented 2 years ago

@mattdesl Pretty please? :)

Your library is incredibly faster and more useful than gifencoder, would love to be able to load it from NPM instead of hot off GitHub master and still have types <3

abichinger commented 3 months ago

It is possible to define the types yourself as long as this PR is not published.

declare third party modules

// src/gifenc.d.ts

declare module "gifenc" {
  type Format = "rgb565" | "rgb444" | "rgba4444";

  type QuantizeOptions = {
    format?: Format;
    oneBitAlpha?: boolean | number;
    clearAlpha?: boolean;
    clearAlphaThreshold?: number;
    clearAlphaColor?: number;
  };

  type GIFEncoderOpts = {
    auto?: boolean;
    initialCapacity?: number;
  };

  type WriteFrameOpts = {
    palette?: number[][];
    first?: boolean;
    transparent?: boolean;
    transparentIndex?: number;
    delay?: number;
    repeat?: number;
    dispose?: number;
  };

  type Encoder = {
    writeFrame: (
      index: Uint8Array,
      width: number,
      height: number,
      ops?: WriteFrameOpts
    ) => void;
    finish: () => void;
    bytes: () => Uint8Array;
    bytesView: () => Uint8Array;
    writeHeader: () => void;
    reset: () => void;
    buffer: ArrayBuffer;
    stream: any;
  };

  export declare function quantize(
    rgba: Uint8Array | Uint8ClampedArray,
    maxColors: number,
    options?: QuantizeOptions
  ): number[][];

  export declare function applyPalette(
    rgba: Uint8Array | Uint8ClampedArray,
    palette: number[][],
    format?: Format
  ): Uint8Array;

  export declare function GIFEncoder(opts?: GIFEncoderOpts): Encoder;

  export declare function nearestColorIndex(
    palette: number[][],
    pixel: [number, number, number] | [number, number, number]
  ): number;

  export declare function nearestColorIndexWithDistance(
    palette: number[][],
    pixel: [number, number, number] | [number, number, number]
  ): [number, number];
}