Skip to content

Commit

Permalink
🤖 Merge PR #53413 [bezier-js] Update bezier-js export to not be defau…
Browse files Browse the repository at this point in the history
…lt by @georeith

* update bezier-js export to not be default

* update version in header

* update types and tests

* Update types/bezier-js/index.d.ts

Co-authored-by: Ron Buckton <ron.buckton@microsoft.com>

Co-authored-by: Ron Buckton <ron.buckton@microsoft.com>
  • Loading branch information
georeith and rbuckton committed Jul 12, 2021
1 parent 82658af commit 5f2db5d
Show file tree
Hide file tree
Showing 2 changed files with 205 additions and 143 deletions.
255 changes: 159 additions & 96 deletions types/bezier-js/bezier-js-tests.ts
Original file line number Diff line number Diff line change
@@ -1,101 +1,164 @@
function test() {
import * as BezierJs from 'bezier-js';

var bezierjs: typeof BezierJs;
const { Bezier } = BezierJs;

var bezier = new bezierjs.Bezier([1, 2, 3, 4]);
var cap = new bezierjs.BezierCap([]);
var point: BezierJs.Point = { x: 0, y: 0 };
var utils = bezier.getUtils();
var line: BezierJs.Line = { p1: { x: 0, y: 0 }, p2: { x: 1, y: 1 } };
var abc: BezierJs.ABC = { A: null, B: null, C: null };
var arc: BezierJs.Arc = { e: 0, s: 0, x: 0, y: 0, r: 1, interval:{ start: 0, end: 1 } };
var bbox: BezierJs.BBox = bezier.bbox();
var closest: BezierJs.Closest = { mdist: 1, mpos: 0 };
var inflection: BezierJs.Inflection = { values: null, x: [0], y: [0], z: [0] };
var minmax: BezierJs.MinMax = { min: 0, max: 0 };
var offset: BezierJs.Offset = { x: 0, y: 0, c: point, n: point };
var pair: BezierJs.Pair = { left: bezier, right: bezier };
var poly: BezierJs.PolyBezier = bezier.outline(1);
var projection: BezierJs.Projection = { x: 0, y: 0, t: 9, d: 4 };
var shape: BezierJs.Shape = {
startcap: cap, endcap: cap, forward: bezier, back: bezier, bbox: bbox, intersections: function (shape) { return [[0]]; }
};
var split: BezierJs.Split = { left: bezier, right: bezier, span: [point] };
var quadratic: BezierJs.Bezier = BezierJs.Bezier.quadraticFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 }, 0.5);
var quadratic: BezierJs.Bezier = BezierJs.Bezier.quadraticFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 });
var cubic: BezierJs.Bezier = BezierJs.Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 }, 0.5, 2);
var cubic: BezierJs.Bezier = BezierJs.Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 }, 0.5);
var cubic: BezierJs.Bezier = BezierJs.Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 });
// $ExpectType Bezier
const bezier = new Bezier([1, 2, 3, 4]);
const point: BezierJs.Point = { x: 0, y: 0 };
// $ExpectType utils
const utils = bezier.getUtils();
const line: BezierJs.Line = { p1: { x: 0, y: 0 }, p2: { x: 1, y: 1 } };
// $ExpectType BBox
const bbox = bezier.bbox();
const offset: BezierJs.Offset = { x: 0, y: 0, c: point, n: point };
// $ExpectType PolyBezier
const poly = bezier.outline(1);
// $ExpectType Shape
const shape = utils.makeshape(bezier, bezier);
// $ExpectType Bezier
Bezier.quadraticFromPoints(
{ x: 0, y: 0 },
{ x: 1, y: 1 },
{ x: 2, y: 2 },
0.5,
);
// $ExpectType Bezier
Bezier.quadraticFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 });
// $ExpectType Bezier
Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 }, 0.5, 2);
// $ExpectType Bezier
Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 }, 0.5);
// $ExpectType Bezier
Bezier.cubicFromPoints({ x: 0, y: 0 }, { x: 1, y: 1 }, { x: 2, y: 2 });

bezier.arcs();
bezier.clockwise;
bezier.compute(.5);
bezier.computedirection();
bezier.curveintersects([bezier], [bezier]);
bezier.derivative(0);
bezier.get(1);
bezier.getLUT()[0].x;
bezier.hull(0);
bezier.extrema();
bezier.intersects(bezier);
bezier.length();
bezier.lineIntersects(line);
bezier.normal(0);
bezier.offset(1, 2);
bezier.on(point, 0);
bezier.order = 5;
bezier.outlineshapes(1, 3);
bezier.overlaps(bezier);
bezier.point(9);
bezier.project(point);
bezier.raise();
bezier.reduce();
bezier.scale(4);
bezier.selfintersects();
bezier.simple();
bezier.split(0, 1).clockwise;
bezier.split(0.5).left;
bezier.toSVG();
bezier.update();
// $ExpectType Arc[]
bezier.arcs();
// $ExpectType boolean
bezier.clockwise;
// $ExpectType Point
bezier.compute(0.5);
// $ExpectType void
bezier.computedirection();
// $ExpectType string[]
bezier.curveintersects([bezier], [bezier]);
// $ExpectType Point
bezier.derivative(0);
// $ExpectType Point
bezier.get(1);
// $ExpectType number
bezier.getLUT()[0].x;
// $ExpectType Point[]
bezier.hull(0);
// $ExpectType Inflection
bezier.extrema();
// $ExpectType number[] | string[]
bezier.intersects(bezier);
// $ExpectType number
bezier.length();
// $ExpectType number[]
bezier.lineIntersects(line);
// $ExpectType Point
bezier.normal(0);
// $ExpectType Offset | Bezier[]
bezier.offset(1, 2);
// $ExpectType number
bezier.on(point, 0);
bezier.order = 5;
// $ExpectType Shape[]
bezier.outlineshapes(1, 3);
// $ExpectType boolean
bezier.overlaps(bezier);
// $ExpectType Point
bezier.point(9);
// $ExpectType Projection
bezier.project(point);
// $ExpectType Bezier
bezier.raise();
// $ExpectType Bezier[]
bezier.reduce();
// $ExpectType Bezier
bezier.scale(4);
// $ExpectType string[]
bezier.selfintersects();
// $ExpectType boolean
bezier.simple();
// $ExpectType boolean
bezier.split(0, 1).clockwise;
// $ExpectType Bezier
bezier.split(0.5).left;
// $ExpectType string
bezier.toSVG();
// $ExpectType void
bezier.update();

cap.virtual = true;
// $ExpectType void
poly.addCurve(bezier);
// $ExpectType BBox
poly.bbox();
// $ExpectType Bezier
poly.curve(7);
// $ExpectType boolean
poly.curves[0]._3d;
// $ExpectType number
poly.length();
// $ExpectType number
poly.offset(9).points[0].y;
// $ExpectType Point
poly.points[0];

poly.addCurve(bezier);
poly.bbox();
poly.curve(7);
poly.curves[0]._3d;
poly.length();
poly.offset(9).points[0].y;
poly.points[0];

utils.abcratio(0, 1);
utils.align([point], line);
utils.angle(point, point, point);
utils.approximately(5, 7, .001);
utils.arcfn(1, function () { });
utils.bboxoverlap(bbox, bbox);
utils.between(0, 0, 1);
utils.closest([point], point);
utils.copy({});
utils.dist(point, point);
utils.droots([9]);
utils.expandbox(bbox, bbox);
utils.findbbox([bezier]);
utils.getccenter(point, point, point);
utils.getminmax(bezier, 'x', [0]);
utils.length(function () { });
utils.lerp(1, point, point);
utils.lli(offset, offset);
utils.lli4(point, point, point, point);
utils.lli8(0, 0, 0, 0, 0, 0, 0, 0);
utils.makeline(point, point);
utils.makeshape(bezier, bezier);
utils.map(0, 0, 0, 0, 0);
utils.pairiteration(bezier, bezier);
utils.pointsToString([point]);
utils.projectionratio(0, 0);
utils.roots([point], line);
utils.round(.999, .001);
utils.shapeintersections(shape, bbox, shape, bbox);

}
// $ExpectType number
utils.abcratio(0, 1);
// $ExpectType Point[]
utils.align([point], line);
// $ExpectType number
utils.angle(point, point, point);
// $ExpectType boolean
utils.approximately(5, 7, 0.001);
// $ExpectType number
utils.arcfn(1, function () {});
// $ExpectType boolean
utils.bboxoverlap(bbox, bbox);
// $ExpectType boolean
utils.between(0, 0, 1);
// $ExpectType Closest
utils.closest([point], point);
// $ExpectType any
utils.copy({});
// $ExpectType number
utils.dist(point, point);
// $ExpectType number[]
utils.droots([9]);
// $ExpectType void
utils.expandbox(bbox, bbox);
// $ExpectType BBox
utils.findbbox([bezier]);
// $ExpectType Arc
utils.getccenter(point, point, point);
// $ExpectType MinMax
utils.getminmax(bezier, 'x', [0]);
// $ExpectType number
utils.length(function () {});
// $ExpectType Point
utils.lerp(1, point, point);
// $ExpectType Point
utils.lli(offset, offset);
// $ExpectType Point
utils.lli4(point, point, point, point);
// $ExpectType Point
utils.lli8(0, 0, 0, 0, 0, 0, 0, 0);
// $ExpectType Bezier
utils.makeline(point, point);
// $ExpectType number
utils.map(0, 0, 0, 0, 0);
// $ExpectType string[]
utils.pairiteration(bezier, bezier);
// $ExpectType string
utils.pointsToString([point]);
// $ExpectType number
utils.projectionratio(0, 0);
// $ExpectType number[]
utils.roots([point], line);
// $ExpectType number
utils.round(0.999, 0.001);
// $ExpectType string[][] | number[][]
utils.shapeintersections(shape, bbox, shape, bbox);
93 changes: 46 additions & 47 deletions types/bezier-js/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
// Type definitions for Bezier.js
// Type definitions for Bezier.js 4.1
// Project: https://github.com/Pomax/bezierjs
// Definitions by: Dan Marshall <https://github.com/danmarshall>
// Simon <https://github.com/Epskampie>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

declare namespace BezierJs {
declare module 'bezier-js' {
interface Point {
x: number;
y: number;
Expand Down Expand Up @@ -52,7 +51,7 @@ declare namespace BezierJs {
e: number;
r: number;
s: number;
interval: { start: number; end: number; };
interval: { start: number; end: number };
}
interface Shape {
startcap: BezierCap;
Expand Down Expand Up @@ -99,8 +98,8 @@ declare namespace BezierJs {
static getABC(n: number, S: Point, B: Point, E: Point, t: number): ABC;
static quadraticFromPoints(p1: Point, p2: Point, p3: Point, t?: number): Bezier;
static cubicFromPoints(S: Point, B: Point, E: Point, t?: number, d1?: number): Bezier;
static getUtils(): typeof utils;
getUtils(): typeof utils;
static getUtils(): utils;
getUtils(): utils;
valueOf(): string;
toString(): string;
toSVG(): string;
Expand Down Expand Up @@ -145,45 +144,49 @@ declare namespace BezierJs {
class BezierCap extends Bezier {
virtual: boolean;
}
}

declare namespace BezierJs.utils {
var Tvalues: number[];
var Cvalues: number[];
function arcfn(t: number, derivativeFn: Function): number;
function between(v: number, m: number, M: number): boolean;
function approximately(a: number, b: number, precision?: number): boolean;
function length(derivativeFn: Function): number;
function map(v: number, ds: number, de: number, ts: number, te: number): number;
function lerp(r: number, v1: Point, v2: Point): Point;
function pointToString(p: Point): string;
function pointsToString(points: Point[]): string;
function copy(obj: Object): any;
function angle(o: Point, v1: Point, v2: Point): number;
function round(v: number, d: number): number;
function dist(p1: Point, p2: Point): number;
function closest(LUT: Point[], point: Point): Closest;
function abcratio(t: number, n: number): number;
function projectionratio(t: number, n: number): number;
function lli8(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): Point;
function lli4(p1: Point, p2: Point, p3: Point, p4: Point): Point;
function lli(v1: Offset, v2: Offset): Point;
function makeline(p1: Point, p2: Point): Bezier;
function findbbox(sections: Bezier[]): BBox;
function shapeintersections(s1: Shape, bbox1: BBox, s2: Shape, bbox2: BBox, curveIntersectionThreshold?: number): string[][] | number[][];
function makeshape(forward: Bezier, back: Bezier, curveIntersectionThreshold?: number): Shape;
function getminmax(curve: Bezier, d: string, list: number[]): MinMax;
function align(points: Point[], line: Line): Point[];
function roots(points: Point[], line: Line): number[];
function droots(p: number[]): number[];
function inflections(points: Point[]): number[];
function bboxoverlap(b1: BBox, b2: BBox): boolean;
function expandbox(bbox: BBox, _bbox: BBox): void;
function pairiteration(c1: Bezier, c2: Bezier, curveIntersectionThreshold?: number): string[];
function getccenter(p1: Point, p2: Point, p3: Point): Arc;
}
interface utils {
Tvalues: number[];
Cvalues: number[];
arcfn(t: number, derivativeFn: Function): number;
between(v: number, m: number, M: number): boolean;
approximately(a: number, b: number, precision?: number): boolean;
length(derivativeFn: Function): number;
map(v: number, ds: number, de: number, ts: number, te: number): number;
lerp(r: number, v1: Point, v2: Point): Point;
pointToString(p: Point): string;
pointsToString(points: Point[]): string;
copy(obj: Object): any;
angle(o: Point, v1: Point, v2: Point): number;
round(v: number, d: number): number;
dist(p1: Point, p2: Point): number;
closest(LUT: Point[], point: Point): Closest;
abcratio(t: number, n: number): number;
projectionratio(t: number, n: number): number;
lli8(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): Point;
lli4(p1: Point, p2: Point, p3: Point, p4: Point): Point;
lli(v1: Offset, v2: Offset): Point;
makeline(p1: Point, p2: Point): Bezier;
findbbox(sections: Bezier[]): BBox;
shapeintersections(
s1: Shape,
bbox1: BBox,
s2: Shape,
bbox2: BBox,
curveIntersectionThreshold?: number,
): string[][] | number[][];
makeshape(forward: Bezier, back: Bezier, curveIntersectionThreshold?: number): Shape;
getminmax(curve: Bezier, d: string, list: number[]): MinMax;
align(points: Point[], line: Line): Point[];
roots(points: Point[], line: Line): number[];
droots(p: number[]): number[];
inflections(points: Point[]): number[];
bboxoverlap(b1: BBox, b2: BBox): boolean;
expandbox(bbox: BBox, _bbox: BBox): void;
pairiteration(c1: Bezier, c2: Bezier, curveIntersectionThreshold?: number): string[];
getccenter(p1: Point, p2: Point, p3: Point): Arc;
}

declare namespace BezierJs {
/**
* Poly Bezier
* @param {[type]} curves [description]
Expand All @@ -202,7 +205,3 @@ declare namespace BezierJs {
offset(d: number): PolyBezier;
}
}

declare module "bezier-js" {
export = BezierJs.Bezier;
}

0 comments on commit 5f2db5d

Please sign in to comment.