All files / svg-transform/internal create-order.ts

100% Statements 8/8
100% Branches 0/0
100% Functions 3/3
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                    32x 32x 34x     32x   4x 4x     32x 32x    
import type { SvgTransformOrder } from '../svg-transform-order';
import type { OrderState } from './order-states';
import { orderStates } from './order-states';
 
// An order whose effect is the screen change `toChange(element, screen, ...args)`, `screen` being the screen
// matrix of the element without this order.
export function createOrder<TArguments extends unknown[]>(
  initialArguments: TArguments,
  toChange: (element: SVGGraphicsElement, screen: DOMMatrix, ...args: TArguments) => DOMMatrix,
): SvgTransformOrder<TArguments> {
  let currentArguments = initialArguments;
  const state: OrderState = {
    toChange: (element, screen) => toChange(element, screen, ...currentArguments),
    update: undefined,
  };
  const order: SvgTransformOrder<TArguments> = {
    set(...args: TArguments): void {
      currentArguments = args;
      state.update?.();
    },
  };
  orderStates.set(order, state);
  return order;
}