@remotion/gif 4.0.212 → 4.0.214

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 (68) hide show
  1. package/.turbo/turbo-make.log +4 -0
  2. package/dist/cjs/Gif.d.ts +0 -1
  3. package/dist/cjs/GifForDevelopment.d.ts +0 -1
  4. package/dist/cjs/GifForRendering.d.ts +0 -1
  5. package/dist/cjs/canvas.d.ts +0 -1
  6. package/dist/cjs/index.d.ts +1 -1
  7. package/dist/cjs/index.js +3 -3
  8. package/dist/cjs/js-binary-schema-parser/gif.d.ts +2 -2
  9. package/dist/cjs/parse-generate.d.ts +1 -1
  10. package/dist/cjs/props.d.ts +0 -1
  11. package/dist/cjs/useCurrentGifIndex.js +1 -2
  12. package/dist/esm/index.mjs +209 -207
  13. package/package.json +3 -3
  14. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/Gif.d.ts +0 -7
  15. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/Gif.js +0 -16
  16. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/GifForDevelopment.d.ts +0 -3
  17. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/GifForDevelopment.js +0 -82
  18. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/GifForRendering.d.ts +0 -3
  19. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/GifForRendering.js +0 -86
  20. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/canvas.d.ts +0 -13
  21. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/canvas.js +0 -93
  22. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/get-gif-duration-in-seconds.d.ts +0 -5
  23. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/get-gif-duration-in-seconds.js +0 -30
  24. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gif-cache.d.ts +0 -4
  25. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gif-cache.js +0 -3
  26. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/deinterlace.d.ts +0 -4
  27. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/deinterlace.js +0 -22
  28. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/index.d.ts +0 -4
  29. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/index.js +0 -50
  30. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/lzw.d.ts +0 -5
  31. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/lzw.js +0 -115
  32. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/types.d.ts +0 -96
  33. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/gifuct/types.js +0 -1
  34. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/index.d.ts +0 -4
  35. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/index.js +0 -3
  36. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/is-cors-error.d.ts +0 -1
  37. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/is-cors-error.js +0 -9
  38. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/gif.d.ts +0 -51
  39. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/gif.js +0 -155
  40. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/parser.d.ts +0 -9
  41. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/parser.js +0 -48
  42. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/uint8-parser.d.ts +0 -17
  43. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/js-binary-schema-parser/uint8-parser.js +0 -67
  44. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/lru/index.d.ts +0 -101
  45. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/lru/index.js +0 -254
  46. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/parse-generate.d.ts +0 -18
  47. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/parse-generate.js +0 -110
  48. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/parser/decompress-frames.d.ts +0 -2
  49. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/parser/decompress-frames.js +0 -12
  50. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/preload-gif.d.ts +0 -8
  51. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/preload-gif.js +0 -37
  52. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/props.d.ts +0 -26
  53. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/props.js +0 -1
  54. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/react-tools.d.ts +0 -9
  55. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/react-tools.js +0 -35
  56. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/resolve-gif-source.d.ts +0 -1
  57. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/resolve-gif-source.js +0 -4
  58. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/use-element-size.d.ts +0 -6
  59. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/use-element-size.js +0 -68
  60. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/useCurrentGifIndex.d.ts +0 -6
  61. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/useCurrentGifIndex.js +0 -32
  62. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/index.d.ts +0 -1
  63. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/index.js +0 -8
  64. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/source.d.ts +0 -1
  65. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/source.js +0 -4
  66. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/worker.d.ts +0 -1
  67. package/.rollup.cache/Users/jonathanburger/remotion/packages/gif/dist/esm/worker/worker.js +0 -37
  68. package/.turbo/turbo-build.log +0 -4
@@ -1,110 +0,0 @@
1
- import { parseGIF } from './gifuct';
2
- import { decompressFrames } from './parser/decompress-frames';
3
- const validateAndFix = (gif) => {
4
- let currentGce = null;
5
- for (const frame of gif.frames) {
6
- currentGce = frame.gce ? frame.gce : currentGce;
7
- // fix loosing graphic control extension for same frames
8
- if ('image' in frame && !('gce' in frame) && currentGce !== null) {
9
- frame.gce = currentGce;
10
- }
11
- }
12
- };
13
- const resetPixels = ({ typedArray, dx, dy, width, height, gifWidth, }) => {
14
- const offset = dy * gifWidth + dx;
15
- for (let y = 0; y < height; y++) {
16
- for (let x = 0; x < width; x++) {
17
- const taPos = offset + y * gifWidth + x;
18
- typedArray[taPos * 4] = 0;
19
- typedArray[taPos * 4 + 1] = 0;
20
- typedArray[taPos * 4 + 2] = 0;
21
- typedArray[taPos * 4 + 3] = 0;
22
- }
23
- }
24
- };
25
- const putPixels = (typedArray, frame, gifSize) => {
26
- const { width, height, top: dy, left: dx } = frame.dims;
27
- const offset = dy * gifSize.width + dx;
28
- for (let y = 0; y < height; y++) {
29
- for (let x = 0; x < width; x++) {
30
- const pPos = y * width + x;
31
- const colorIndex = frame.pixels[pPos];
32
- if (colorIndex !== frame.transparentIndex) {
33
- const taPos = offset + y * gifSize.width + x;
34
- const color = frame.colorTable[colorIndex];
35
- typedArray[taPos * 4] = color[0];
36
- typedArray[taPos * 4 + 1] = color[1];
37
- typedArray[taPos * 4 + 2] = color[2];
38
- typedArray[taPos * 4 + 3] =
39
- colorIndex === frame.transparentIndex ? 0 : 255;
40
- }
41
- }
42
- }
43
- };
44
- export const parse = (src, { signal, }) => fetch(src, { signal })
45
- .then((resp) => {
46
- var _a;
47
- if (!((_a = resp.headers.get('Content-Type')) === null || _a === void 0 ? void 0 : _a.includes('image/gif')))
48
- throw Error(`Wrong content type: "${resp.headers.get('Content-Type')}"`);
49
- return resp.arrayBuffer();
50
- })
51
- .then((buffer) => parseGIF(buffer))
52
- .then((gif) => {
53
- validateAndFix(gif);
54
- return gif;
55
- })
56
- .then((gif) => Promise.all([
57
- decompressFrames(gif),
58
- { width: gif.lsd.width, height: gif.lsd.height },
59
- ]))
60
- .then(([frames, options]) => {
61
- const readyFrames = [];
62
- const size = options.width * options.height * 4;
63
- let canvas = new Uint8ClampedArray(size);
64
- for (let i = 0; i < frames.length; ++i) {
65
- const frame = frames[i];
66
- // Read about different disposal types
67
- // https://giflib.sourceforge.net/whatsinagif/animation_and_transparency.html
68
- const prevCanvas = frames[i].disposalType === 3 ? canvas.slice() : null;
69
- putPixels(canvas, frame, options);
70
- readyFrames.push(canvas.slice());
71
- // Disposal type 2: The canvas should be restored to the background color
72
- if (frames[i].disposalType === 2) {
73
- resetPixels({
74
- typedArray: canvas,
75
- dx: frame.dims.left,
76
- dy: frame.dims.top,
77
- width: frame.dims.width,
78
- height: frame.dims.height,
79
- gifWidth: options.width,
80
- });
81
- }
82
- // Disposal type 3: The decoder should restore the canvas to its previous state before the current image was drawn
83
- else if (frames[i].disposalType === 3) {
84
- if (!prevCanvas) {
85
- throw Error('Disposal type 3 without previous frame');
86
- }
87
- canvas = prevCanvas;
88
- }
89
- // Disposal type 1: Draw the next image on top of it
90
- else {
91
- canvas = readyFrames[i].slice();
92
- }
93
- }
94
- return {
95
- ...options,
96
- loaded: true,
97
- delays: frames.map((frame) => frame.delay),
98
- frames: readyFrames,
99
- };
100
- });
101
- export const generate = (info) => {
102
- return {
103
- ...info,
104
- frames: info.frames.map((buffer) => {
105
- const image = new ImageData(info.width, info.height);
106
- image.data.set(new Uint8ClampedArray(buffer));
107
- return image;
108
- }),
109
- };
110
- };
@@ -1,2 +0,0 @@
1
- import type { ParsedFrameWithoutPatch, ParsedGif } from '../gifuct/types';
2
- export declare const decompressFrames: (parsedGif: ParsedGif) => ParsedFrameWithoutPatch[];
@@ -1,12 +0,0 @@
1
- import { decompressFrame } from '../gifuct';
2
- export const decompressFrames = (parsedGif) => {
3
- return parsedGif.frames
4
- .filter((f) => {
5
- return 'image' in f;
6
- })
7
- .map((f) => {
8
- return decompressFrame(f, parsedGif.gct);
9
- })
10
- .filter(Boolean)
11
- .map((f) => f);
12
- };
@@ -1,8 +0,0 @@
1
- /**
2
- * @description Returns an object with two entries: waitUntilDone() that returns a Promise which can be awaited and free() which will cancel preloading or free up the memory if the GIF is not being used anymore.
3
- * @see [Documentation](https://www.remotion.dev/docs/gif/preload-gif)
4
- */
5
- export declare const preloadGif: (src: string) => {
6
- waitUntilDone: () => Promise<void>;
7
- free: () => void;
8
- };
@@ -1,37 +0,0 @@
1
- import { manuallyManagedGifCache, volatileGifCache } from './gif-cache';
2
- import { parseWithWorker } from './react-tools';
3
- import { resolveGifSource } from './resolve-gif-source';
4
- /**
5
- * @description Returns an object with two entries: waitUntilDone() that returns a Promise which can be awaited and free() which will cancel preloading or free up the memory if the GIF is not being used anymore.
6
- * @see [Documentation](https://www.remotion.dev/docs/gif/preload-gif)
7
- */
8
- export const preloadGif = (src) => {
9
- const resolvedSrc = resolveGifSource(src);
10
- if (volatileGifCache.has(resolvedSrc)) {
11
- return {
12
- waitUntilDone: () => Promise.resolve(),
13
- free: () => volatileGifCache.delete(resolvedSrc),
14
- };
15
- }
16
- if (manuallyManagedGifCache.has(resolvedSrc)) {
17
- return {
18
- waitUntilDone: () => Promise.resolve(),
19
- free: () => manuallyManagedGifCache.delete(resolvedSrc),
20
- };
21
- }
22
- const { prom, cancel } = parseWithWorker(resolvedSrc);
23
- let deleted = false;
24
- prom.then((p) => {
25
- if (!deleted) {
26
- manuallyManagedGifCache.set(resolvedSrc, p);
27
- }
28
- });
29
- return {
30
- waitUntilDone: () => prom.then(() => undefined),
31
- free: () => {
32
- cancel();
33
- deleted = true;
34
- manuallyManagedGifCache.delete(resolvedSrc);
35
- },
36
- };
37
- };
@@ -1,26 +0,0 @@
1
- /// <reference types="react" />
2
- export type GifLoopBehavior = 'loop' | 'pause-after-finish' | 'unmount-after-finish';
3
- export type RemotionGifProps = {
4
- src: string;
5
- width?: number;
6
- height?: number;
7
- onLoad?: (info: {
8
- width: number;
9
- height: number;
10
- delays: number[];
11
- frames: ImageData[];
12
- }) => void;
13
- onError?: (error: Error) => void;
14
- fit?: GifFillMode;
15
- playbackRate?: number;
16
- style?: React.CSSProperties;
17
- loopBehavior?: GifLoopBehavior;
18
- id?: string;
19
- };
20
- export type GifState = {
21
- delays: number[];
22
- frames: ImageData[];
23
- width: number;
24
- height: number;
25
- };
26
- export type GifFillMode = 'contain' | 'cover' | 'fill';
@@ -1,9 +0,0 @@
1
- import type { GifState } from './props';
2
- export declare const parseGif: ({ src, controller, }: {
3
- src: string;
4
- controller: AbortController;
5
- }) => Promise<GifState>;
6
- export declare const parseWithWorker: (src: string) => {
7
- prom: Promise<GifState>;
8
- cancel: () => void;
9
- };
@@ -1,35 +0,0 @@
1
- import { generate, parse } from './parse-generate';
2
- import { makeWorker } from './worker';
3
- export const parseGif = async ({ src, controller, }) => {
4
- const raw = await parse(src, { signal: controller.signal });
5
- return generate(raw);
6
- };
7
- export const parseWithWorker = (src) => {
8
- const worker = makeWorker();
9
- let handler = null;
10
- const prom = new Promise((resolve, reject) => {
11
- handler = (e) => {
12
- const message = e.data || e;
13
- if (message.src === src) {
14
- if (message.error) {
15
- reject(new Error(message.error));
16
- }
17
- else {
18
- const data = message.error ? message : generate(message);
19
- resolve(data);
20
- worker.terminate();
21
- }
22
- }
23
- };
24
- worker.addEventListener('message', handler);
25
- worker.postMessage({ src, type: 'parse' });
26
- });
27
- return {
28
- prom,
29
- cancel: () => {
30
- worker.postMessage({ src, type: 'cancel' });
31
- worker.removeEventListener('message', handler);
32
- worker.terminate();
33
- },
34
- };
35
- };
@@ -1 +0,0 @@
1
- export declare const resolveGifSource: (src: string) => string;
@@ -1,4 +0,0 @@
1
- export const resolveGifSource = (src) => {
2
- return new URL(src, typeof window === 'undefined' ? undefined : window.origin)
3
- .href;
4
- };
@@ -1,6 +0,0 @@
1
- export type Size = {
2
- width: number;
3
- height: number;
4
- };
5
- export declare const updateAllElementsSizes: () => void;
6
- export declare const useElementSize: (ref: React.RefObject<HTMLElement>) => Size | null;
@@ -1,68 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useState } from 'react';
2
- let elementSizeHooks = [];
3
- export const updateAllElementsSizes = () => {
4
- for (const listener of elementSizeHooks) {
5
- listener();
6
- }
7
- };
8
- export const useElementSize = (ref) => {
9
- const [size, setSize] = useState(null);
10
- const observer = useMemo(() => {
11
- if (typeof ResizeObserver === 'undefined') {
12
- return null;
13
- }
14
- return new ResizeObserver((entries) => {
15
- // The contentRect returns the width without any `scale()`'s being applied. The height is wrong
16
- const { contentRect } = entries[0];
17
- // The clientRect returns the size with `scale()` being applied.
18
- const newSize = entries[0].target.getClientRects();
19
- if (!(newSize === null || newSize === void 0 ? void 0 : newSize[0])) {
20
- setSize(null);
21
- return;
22
- }
23
- const probableCssParentScale = newSize[0].width / contentRect.width;
24
- const width = newSize[0].width * (1 / probableCssParentScale);
25
- const height = newSize[0].height * (1 / probableCssParentScale);
26
- setSize({
27
- width,
28
- height,
29
- });
30
- });
31
- }, []);
32
- const updateSize = useCallback(() => {
33
- if (!ref.current) {
34
- return;
35
- }
36
- const rect = ref.current.getClientRects();
37
- if (!rect[0]) {
38
- setSize(null);
39
- return;
40
- }
41
- setSize({
42
- width: rect[0].width,
43
- height: rect[0].height,
44
- });
45
- }, [ref]);
46
- useEffect(() => {
47
- if (!observer) {
48
- return;
49
- }
50
- updateSize();
51
- const { current } = ref;
52
- if (ref.current) {
53
- observer.observe(ref.current);
54
- }
55
- return () => {
56
- if (current) {
57
- observer.unobserve(current);
58
- }
59
- };
60
- }, [observer, ref, updateSize]);
61
- useEffect(() => {
62
- elementSizeHooks.push(updateSize);
63
- return () => {
64
- elementSizeHooks = elementSizeHooks.filter((e) => e !== updateSize);
65
- };
66
- }, [updateSize]);
67
- return size;
68
- };
@@ -1,6 +0,0 @@
1
- import type { GifLoopBehavior } from './props';
2
- export declare function useCurrentGifIndex({ delays, loopBehavior, playbackRate, }: {
3
- delays: number[];
4
- loopBehavior: GifLoopBehavior;
5
- playbackRate: number;
6
- }): number;
@@ -1,32 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { useCurrentFrame, useVideoConfig } from 'remotion';
3
- export function useCurrentGifIndex({ delays, loopBehavior, playbackRate, }) {
4
- const currentFrame = useCurrentFrame();
5
- const videoConfig = useVideoConfig();
6
- const duration = useMemo(() => {
7
- if (delays.length !== 0) {
8
- return delays.reduce((sum, delay) => sum + (delay !== null && delay !== void 0 ? delay : 0), 0);
9
- }
10
- return 1;
11
- }, [delays]);
12
- if (delays.length === 0) {
13
- return 0;
14
- }
15
- const updatedFrame = currentFrame / (1 / playbackRate);
16
- const time = (updatedFrame / videoConfig.fps) * 1000;
17
- if (loopBehavior === 'pause-after-finish' && time >= duration) {
18
- return delays.length - 1;
19
- }
20
- if (loopBehavior === 'unmount-after-finish' && time >= duration) {
21
- return -1;
22
- }
23
- let currentTime = time % duration;
24
- for (let i = 0; i < delays.length; i++) {
25
- const delay = delays[i];
26
- if (currentTime < delay) {
27
- return i;
28
- }
29
- currentTime -= delay;
30
- }
31
- return 0;
32
- }
@@ -1 +0,0 @@
1
- export declare const makeWorker: () => Worker;
@@ -1,8 +0,0 @@
1
- import { src } from './source';
2
- export const makeWorker = () => {
3
- const blob = new Blob([src], { type: 'application/javascript' });
4
- const url = URL.createObjectURL(blob);
5
- const worker = new Worker(url);
6
- URL.revokeObjectURL(url);
7
- return worker;
8
- };
@@ -1 +0,0 @@
1
- export declare const src = "\"use strict\";(()=>{var P=(t,r,e={},n=e)=>{if(Array.isArray(r))r.forEach(o=>P(t,o,e,n));else if(typeof r==\"function\")r(t,e,n,P);else{let o=Object.keys(r)[0];Array.isArray(r[o])?(n[o]={},P(t,r[o],e,n[o])):n[o]=r[o](t,e,n,P)}return e},M=(t,r)=>function(e,n,o,c){let i=[],a=e.pos;for(;r(e,n,o);){let s={};if(c(e,t,n,s),e.pos===a)break;a=e.pos,i.push(s)}return i},g=(t,r)=>(e,n,o,c)=>{r(e,n,o)&&c(e,t,n,o)};var W=t=>({data:t,pos:0}),m=()=>t=>t.data[t.pos++],U=(t=0)=>r=>r.data[r.pos+t],f=t=>r=>r.data.subarray(r.pos,r.pos+=t),k=t=>r=>r.data.subarray(r.pos,r.pos+t),v=t=>r=>Array.from(f(t)(r)).map(e=>String.fromCharCode(e)).join(\"\"),b=t=>r=>{let e=f(2)(r);return t?(e[1]<<8)+e[0]:(e[0]<<8)+e[1]},E=(t,r)=>(e,n,o)=>{let c=typeof r==\"function\"?r(e,n,o):r,i=f(t),a=new Array(c);for(let s=0;s<c;s++)a[s]=i(e);return a},$=(t,r,e)=>{let n=0;for(let o=0;o<e;o++)n+=Number(t[r+o]&&2**(e-o-1));return n},I=t=>r=>{let e=m()(r),n=new Array(8);for(let o=0;o<8;o++)n[7-o]=!!(e&1<<o);return Object.keys(t).reduce((o,c)=>{let i=t[c];return i.length?o[c]=$(n,i.index,i.length):o[c]=n[i.index],o},{})};var z={blocks:t=>{let e=[],n=t.data.length,o=0;for(let a=m()(t);a!==0&&a;a=m()(t)){if(t.pos+a>=n){let s=n-t.pos;e.push(f(s)(t)),o+=s;break}e.push(f(a)(t)),o+=a}let c=new Uint8Array(o),i=0;for(let a=0;a<e.length;a++)c.set(e[a],i),i+=e[a].length;return c}},q=g({gce:[{codes:f(2)},{byteSize:m()},{extras:I({future:{index:0,length:3},disposal:{index:3,length:3},userInput:{index:6},transparentColorGiven:{index:7}})},{delay:b(!0)},{transparentColorIndex:m()},{terminator:m()}]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===249}),H=g({image:[{code:m()},{descriptor:[{left:b(!0)},{top:b(!0)},{width:b(!0)},{height:b(!0)},{lct:I({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},g({lct:E(3,(t,r,e)=>2**(e.descriptor.lct.size+1))},(t,r,e)=>e.descriptor.lct.exists),{data:[{minCodeSize:m()},z]}]},t=>U()(t)===44),J=g({text:[{codes:f(2)},{blockSize:m()},{preData:(t,r,e)=>f(e.text.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===1}),Q=g({application:[{codes:f(2)},{blockSize:m()},{id:(t,r,e)=>v(e.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===255}),V=g({comment:[{codes:f(2)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===254}),K=[{header:[{signature:v(3)},{version:v(3)}]},{lsd:[{width:b(!0)},{height:b(!0)},{gct:I({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:m()},{pixelAspectRatio:m()}]},g({gct:E(3,(t,r)=>2**(r.lsd.gct.size+1))},(t,r)=>r.lsd.gct.exists),{frames:M([q,Q,V,H,J],t=>{let r=U()(t);return r===33||r===44})}];var X=(t,r)=>{let e=new Array(t.length),n=t.length/r,o=function(s,l){let u=t.slice(l*r,(l+1)*r);e.splice(...[s*r,r].concat(u))},c=[0,4,2,1],i=[8,8,4,2],a=0;for(let s=0;s<4;s++)for(let l=c[s];l<n;l+=i[s])o(l,a),a++;return e};var Z=(t,r,e)=>{let c=e,i,a,s,l,u;var w;let d,p;var C,y,h,_,G;let x=new Array(e),B=new Array(4096),T=new Array(4096),F=new Array(4096+1),R=t,S=1<<R,O=S+1;for(i=S+2,u=-1,s=R+1,a=(1<<s)-1,d=0;d<S;d++)B[d]=0,T[d]=d;var C,w,y,h,G,_;for(C=w=y=h=G=_=0,p=0;p<c;){if(h===0){if(w<s){C+=r[_]<<w,w+=8,_++;continue}if(d=C&a,C>>=s,w-=s,d>i||d===O)break;if(d===S){s=R+1,a=(1<<s)-1,i=S+2,u=-1;continue}if(u===-1){F[h++]=T[d],u=d,y=d;continue}for(l=d,d===i&&(F[h++]=y,d=u);d>S;)F[h++]=T[d],d=B[d];y=T[d]&255,F[h++]=y,i<4096&&(B[i]=u,T[i]=y,i++,!(i&a)&&i<4096&&(s++,a+=i)),u=l}h--,x[G++]=F[h],p++}for(p=G;p<c;p++)x[p]=0;return x};var j=t=>{let r=new Uint8Array(t);return P(W(r),K)},D=(t,r)=>{var i,a,s,l;if(!t.image)return console.warn(\"gif frame does not have associated image.\"),null;let{image:e}=t,n=e.descriptor.width*e.descriptor.height,o=Z(e.data.minCodeSize,e.data.blocks,n);return(i=e.descriptor.lct)!=null&&i.interlaced&&(o=X(o,e.descriptor.width)),{pixels:o,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height},colorTable:(a=e.descriptor.lct)!=null&&a.exists?e.lct:r,delay:((l=(s=t.gce)==null?void 0:s.delay)!=null?l:10)*10,disposalType:t.gce?t.gce.extras.disposal:1,transparentIndex:t.gce&&t.gce.extras.transparentColorGiven?t.gce.transparentColorIndex:-1}};var L=t=>t.frames.filter(r=>\"image\"in r).map(r=>D(r,t.gct)).filter(Boolean).map(r=>r);var Y=t=>{let r=null;for(let e of t.frames)r=e.gce?e.gce:r,\"image\"in e&&!(\"gce\"in e)&&r!==null&&(e.gce=r)},ee=({typedArray:t,dx:r,dy:e,width:n,height:o,gifWidth:c})=>{let i=e*c+r;for(let a=0;a<o;a++)for(let s=0;s<n;s++){let l=i+a*c+s;t[l*4]=0,t[l*4+1]=0,t[l*4+2]=0,t[l*4+3]=0}},te=(t,r,e)=>{let{width:n,height:o,top:c,left:i}=r.dims,a=c*e.width+i;for(let s=0;s<o;s++)for(let l=0;l<n;l++){let u=s*n+l,d=r.pixels[u];if(d!==r.transparentIndex){let p=a+s*e.width+l,x=r.colorTable[d];t[p*4]=x[0],t[p*4+1]=x[1],t[p*4+2]=x[2],t[p*4+3]=d===r.transparentIndex?0:255}}},N=(t,{signal:r})=>fetch(t,{signal:r}).then(e=>{var n;if(!((n=e.headers.get(\"Content-Type\"))!=null&&n.includes(\"image/gif\")))throw Error(`Wrong content type: \"${e.headers.get(\"Content-Type\")}\"`);return e.arrayBuffer()}).then(e=>j(e)).then(e=>(Y(e),e)).then(e=>Promise.all([L(e),{width:e.lsd.width,height:e.lsd.height}])).then(([e,n])=>{let o=[],c=n.width*n.height*4,i=new Uint8ClampedArray(c);for(let a=0;a<e.length;++a){let s=e[a],l=e[a].disposalType===3?i.slice():null;if(te(i,s,n),o.push(i.slice()),e[a].disposalType===2)ee({typedArray:i,dx:s.dims.left,dy:s.dims.top,width:s.dims.width,height:s.dims.height,gifWidth:n.width});else if(e[a].disposalType===3){if(!l)throw Error(\"Disposal type 3 without previous frame\");i=l}else i=o[a].slice()}return{...n,loaded:!0,delays:e.map(a=>a.delay),frames:o}});var A=new Map;self.addEventListener(\"message\",t=>{let{type:r,src:e}=t.data||t;switch(r){case\"parse\":{if(!A.has(e)){let n=new AbortController,o={signal:n.signal};A.set(e,n),N(e,o).then(c=>{self.postMessage(Object.assign(c,{src:e}),c.frames.map(i=>i.buffer))}).catch(c=>{self.postMessage({src:e,error:c,loaded:!0})}).finally(()=>{A.delete(e)})}break}case\"cancel\":{A.has(e)&&(A.get(e).abort(),A.delete(e));break}default:break}});})();\n";
@@ -1,4 +0,0 @@
1
- // Auto-generated by build.mjs
2
- export const src =
3
- // eslint-disable-next-line no-template-curly-in-string
4
- '"use strict";(()=>{var P=(t,r,e={},n=e)=>{if(Array.isArray(r))r.forEach(o=>P(t,o,e,n));else if(typeof r=="function")r(t,e,n,P);else{let o=Object.keys(r)[0];Array.isArray(r[o])?(n[o]={},P(t,r[o],e,n[o])):n[o]=r[o](t,e,n,P)}return e},M=(t,r)=>function(e,n,o,c){let i=[],a=e.pos;for(;r(e,n,o);){let s={};if(c(e,t,n,s),e.pos===a)break;a=e.pos,i.push(s)}return i},g=(t,r)=>(e,n,o,c)=>{r(e,n,o)&&c(e,t,n,o)};var W=t=>({data:t,pos:0}),m=()=>t=>t.data[t.pos++],U=(t=0)=>r=>r.data[r.pos+t],f=t=>r=>r.data.subarray(r.pos,r.pos+=t),k=t=>r=>r.data.subarray(r.pos,r.pos+t),v=t=>r=>Array.from(f(t)(r)).map(e=>String.fromCharCode(e)).join(""),b=t=>r=>{let e=f(2)(r);return t?(e[1]<<8)+e[0]:(e[0]<<8)+e[1]},E=(t,r)=>(e,n,o)=>{let c=typeof r=="function"?r(e,n,o):r,i=f(t),a=new Array(c);for(let s=0;s<c;s++)a[s]=i(e);return a},$=(t,r,e)=>{let n=0;for(let o=0;o<e;o++)n+=Number(t[r+o]&&2**(e-o-1));return n},I=t=>r=>{let e=m()(r),n=new Array(8);for(let o=0;o<8;o++)n[7-o]=!!(e&1<<o);return Object.keys(t).reduce((o,c)=>{let i=t[c];return i.length?o[c]=$(n,i.index,i.length):o[c]=n[i.index],o},{})};var z={blocks:t=>{let e=[],n=t.data.length,o=0;for(let a=m()(t);a!==0&&a;a=m()(t)){if(t.pos+a>=n){let s=n-t.pos;e.push(f(s)(t)),o+=s;break}e.push(f(a)(t)),o+=a}let c=new Uint8Array(o),i=0;for(let a=0;a<e.length;a++)c.set(e[a],i),i+=e[a].length;return c}},q=g({gce:[{codes:f(2)},{byteSize:m()},{extras:I({future:{index:0,length:3},disposal:{index:3,length:3},userInput:{index:6},transparentColorGiven:{index:7}})},{delay:b(!0)},{transparentColorIndex:m()},{terminator:m()}]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===249}),H=g({image:[{code:m()},{descriptor:[{left:b(!0)},{top:b(!0)},{width:b(!0)},{height:b(!0)},{lct:I({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},g({lct:E(3,(t,r,e)=>2**(e.descriptor.lct.size+1))},(t,r,e)=>e.descriptor.lct.exists),{data:[{minCodeSize:m()},z]}]},t=>U()(t)===44),J=g({text:[{codes:f(2)},{blockSize:m()},{preData:(t,r,e)=>f(e.text.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===1}),Q=g({application:[{codes:f(2)},{blockSize:m()},{id:(t,r,e)=>v(e.blockSize)(t)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===255}),V=g({comment:[{codes:f(2)},z]},t=>{let r=k(2)(t);return r[0]===33&&r[1]===254}),K=[{header:[{signature:v(3)},{version:v(3)}]},{lsd:[{width:b(!0)},{height:b(!0)},{gct:I({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:m()},{pixelAspectRatio:m()}]},g({gct:E(3,(t,r)=>2**(r.lsd.gct.size+1))},(t,r)=>r.lsd.gct.exists),{frames:M([q,Q,V,H,J],t=>{let r=U()(t);return r===33||r===44})}];var X=(t,r)=>{let e=new Array(t.length),n=t.length/r,o=function(s,l){let u=t.slice(l*r,(l+1)*r);e.splice(...[s*r,r].concat(u))},c=[0,4,2,1],i=[8,8,4,2],a=0;for(let s=0;s<4;s++)for(let l=c[s];l<n;l+=i[s])o(l,a),a++;return e};var Z=(t,r,e)=>{let c=e,i,a,s,l,u;var w;let d,p;var C,y,h,_,G;let x=new Array(e),B=new Array(4096),T=new Array(4096),F=new Array(4096+1),R=t,S=1<<R,O=S+1;for(i=S+2,u=-1,s=R+1,a=(1<<s)-1,d=0;d<S;d++)B[d]=0,T[d]=d;var C,w,y,h,G,_;for(C=w=y=h=G=_=0,p=0;p<c;){if(h===0){if(w<s){C+=r[_]<<w,w+=8,_++;continue}if(d=C&a,C>>=s,w-=s,d>i||d===O)break;if(d===S){s=R+1,a=(1<<s)-1,i=S+2,u=-1;continue}if(u===-1){F[h++]=T[d],u=d,y=d;continue}for(l=d,d===i&&(F[h++]=y,d=u);d>S;)F[h++]=T[d],d=B[d];y=T[d]&255,F[h++]=y,i<4096&&(B[i]=u,T[i]=y,i++,!(i&a)&&i<4096&&(s++,a+=i)),u=l}h--,x[G++]=F[h],p++}for(p=G;p<c;p++)x[p]=0;return x};var j=t=>{let r=new Uint8Array(t);return P(W(r),K)},D=(t,r)=>{var i,a,s,l;if(!t.image)return console.warn("gif frame does not have associated image."),null;let{image:e}=t,n=e.descriptor.width*e.descriptor.height,o=Z(e.data.minCodeSize,e.data.blocks,n);return(i=e.descriptor.lct)!=null&&i.interlaced&&(o=X(o,e.descriptor.width)),{pixels:o,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height},colorTable:(a=e.descriptor.lct)!=null&&a.exists?e.lct:r,delay:((l=(s=t.gce)==null?void 0:s.delay)!=null?l:10)*10,disposalType:t.gce?t.gce.extras.disposal:1,transparentIndex:t.gce&&t.gce.extras.transparentColorGiven?t.gce.transparentColorIndex:-1}};var L=t=>t.frames.filter(r=>"image"in r).map(r=>D(r,t.gct)).filter(Boolean).map(r=>r);var Y=t=>{let r=null;for(let e of t.frames)r=e.gce?e.gce:r,"image"in e&&!("gce"in e)&&r!==null&&(e.gce=r)},ee=({typedArray:t,dx:r,dy:e,width:n,height:o,gifWidth:c})=>{let i=e*c+r;for(let a=0;a<o;a++)for(let s=0;s<n;s++){let l=i+a*c+s;t[l*4]=0,t[l*4+1]=0,t[l*4+2]=0,t[l*4+3]=0}},te=(t,r,e)=>{let{width:n,height:o,top:c,left:i}=r.dims,a=c*e.width+i;for(let s=0;s<o;s++)for(let l=0;l<n;l++){let u=s*n+l,d=r.pixels[u];if(d!==r.transparentIndex){let p=a+s*e.width+l,x=r.colorTable[d];t[p*4]=x[0],t[p*4+1]=x[1],t[p*4+2]=x[2],t[p*4+3]=d===r.transparentIndex?0:255}}},N=(t,{signal:r})=>fetch(t,{signal:r}).then(e=>{var n;if(!((n=e.headers.get("Content-Type"))!=null&&n.includes("image/gif")))throw Error(`Wrong content type: "${e.headers.get("Content-Type")}"`);return e.arrayBuffer()}).then(e=>j(e)).then(e=>(Y(e),e)).then(e=>Promise.all([L(e),{width:e.lsd.width,height:e.lsd.height}])).then(([e,n])=>{let o=[],c=n.width*n.height*4,i=new Uint8ClampedArray(c);for(let a=0;a<e.length;++a){let s=e[a],l=e[a].disposalType===3?i.slice():null;if(te(i,s,n),o.push(i.slice()),e[a].disposalType===2)ee({typedArray:i,dx:s.dims.left,dy:s.dims.top,width:s.dims.width,height:s.dims.height,gifWidth:n.width});else if(e[a].disposalType===3){if(!l)throw Error("Disposal type 3 without previous frame");i=l}else i=o[a].slice()}return{...n,loaded:!0,delays:e.map(a=>a.delay),frames:o}});var A=new Map;self.addEventListener("message",t=>{let{type:r,src:e}=t.data||t;switch(r){case"parse":{if(!A.has(e)){let n=new AbortController,o={signal:n.signal};A.set(e,n),N(e,o).then(c=>{self.postMessage(Object.assign(c,{src:e}),c.frames.map(i=>i.buffer))}).catch(c=>{self.postMessage({src:e,error:c,loaded:!0})}).finally(()=>{A.delete(e)})}break}case"cancel":{A.has(e)&&(A.get(e).abort(),A.delete(e));break}default:break}});})();\n';
@@ -1,37 +0,0 @@
1
- import { parse } from '../parse-generate';
2
- const abortMap = new Map();
3
- self.addEventListener('message', (e) => {
4
- const { type, src } = e.data || e;
5
- switch (type) {
6
- case 'parse': {
7
- if (!abortMap.has(src)) {
8
- const controller = new AbortController();
9
- const signal = { signal: controller.signal };
10
- abortMap.set(src, controller);
11
- parse(src, signal)
12
- .then((result) => {
13
- self.postMessage(Object.assign(result, { src }),
14
- // @ts-expect-error
15
- result.frames.map((frame) => frame.buffer));
16
- })
17
- .catch((error) => {
18
- self.postMessage({ src, error, loaded: true });
19
- })
20
- .finally(() => {
21
- abortMap.delete(src);
22
- });
23
- }
24
- break;
25
- }
26
- case 'cancel': {
27
- if (abortMap.has(src)) {
28
- const controller = abortMap.get(src);
29
- controller.abort();
30
- abortMap.delete(src);
31
- }
32
- break;
33
- }
34
- default:
35
- break;
36
- }
37
- });
@@ -1,4 +0,0 @@
1
-
2
- > @remotion/gif@4.0.212 build /Users/jonathanburger/remotion/packages/gif
3
- > node build.mjs && bun --env-file=../.env.bundle bundle.ts
4
-