@@ -3,7 +3,8 @@ import {renderPath2D} from "../internal/render/canvas";
33import { genFromOptions } from "../internal/gen" ;
44import { mapPoints } from "../internal/util" ;
55import { statefulAnimationGenerator } from "../internal/animate/state" ;
6- import { typeCheck } from "../internal/errors" ;
6+ import { typeCheck , err } from "../internal/errors" ;
7+ import { timingFunctions } from "../internal/animate/timing" ;
78
89export interface CanvasKeyframe {
910 delay ?: number ;
@@ -38,8 +39,34 @@ const canvasBlobGenerator = (keyframe: CanvasKeyframe): Point[] => {
3839 } ) ;
3940} ;
4041
41- // Only need to check properties unique to the canvas animation generator .
42+ // TODO make reusable .
4243const canvasKeyframeChecker = ( keyframe : CanvasKeyframe , index : number ) => {
44+ // keyframe options
45+ typeCheck ( `keyframes[${ index } ]` , keyframe , [ "object" ] ) ;
46+ const { delay, duration, timingFunction, callback} = keyframe ;
47+ typeCheck ( `keyframes[${ index } ].delay` , delay , [ "number" , "undefined" ] ) ;
48+ if ( delay && delay < 0 ) err ( `keyframes[${ index } ].delay is invalid "${ delay } ".` ) ;
49+ typeCheck ( `keyframes[${ index } ].duration` , duration , [ "number" ] ) ;
50+ if ( duration && duration < 0 ) err ( `keyframes[${ index } ].duration is invalid "${ duration } ".` ) ;
51+ typeCheck ( `keyframes[${ index } ].timingFunction` , timingFunction , [ "string" , "undefined" ] ) ;
52+ if ( timingFunction && ! timingFunctions [ timingFunction ] )
53+ err ( `"keyframes[${ index } ].timingFunction" is not recognized "${ timingFunction } ".` ) ;
54+ typeCheck ( `keyframes[${ index } ].callback` , callback , [ "function" , "undefined" ] ) ;
55+
56+ // blobOptions
57+ typeCheck ( `keyframes[${ index } ].blobOptions` , keyframe . blobOptions , [ "object" ] ) ;
58+ const { seed, extraPoints, randomness, size} = keyframe . blobOptions ;
59+ typeCheck ( `keyframes[${ index } ].blobOptions.seed` , seed , [ "string" , "number" ] ) ;
60+ typeCheck ( `keyframes[${ index } ].blobOptions.extraPoints` , extraPoints , [ "number" ] ) ;
61+ if ( extraPoints < 0 )
62+ err ( `keyframes[${ index } ].blobOptions.extraPoints is invalid "${ extraPoints } ".` ) ;
63+ typeCheck ( `keyframes[${ index } ].blobOptions.randomness` , randomness , [ "number" ] ) ;
64+ if ( randomness < 0 )
65+ err ( `keyframes[${ index } ].blobOptions.randomness is invalid "${ randomness } ".` ) ;
66+ typeCheck ( `keyframes[${ index } ].blobOptions.size` , size , [ "number" ] ) ;
67+ if ( size < 0 ) err ( `keyframes[${ index } ].blobOptions.size is invalid "${ size } ".` ) ;
68+
69+ // canvasOptions
4370 typeCheck ( `keyframes[${ index } ].canvasOptions` , keyframe . canvasOptions , [ "object" , "undefined" ] ) ;
4471 if ( keyframe . canvasOptions ) {
4572 const { offsetX, offsetY} = keyframe . canvasOptions ;
0 commit comments